# Response Layer

## Introduction

Configure how Webhooked responds to webhook requests, including status codes, headers, and response bodies.

## Response Context Variables

Variables available in security conditions:

| Variable             | Description                                            | Example                                   |
| -------------------- | ------------------------------------------------------ | ----------------------------------------- |
| `.SpecName`          | Name of the current spec as defined in config          | `"user-events"`                           |
| `.SpecEntrypointURL` | EntrypointURL of the current spec as defined in config | `"/user-events"`                          |
| `.ConnID`            | Unique connection ID                                   | `123549841`                               |
| `.ConnTime`          | Connection established time                            | time.Time object `2025-08-20T21:10:00Z`   |
| `.Host`              | Host header of request                                 | `"example.com"`                           |
| `.IsTLS`             | Whether request is HTTPS                               | `true`                                    |
| `.Method`            | HTTP method used                                       | `"POST"`                                  |
| `.Payload`           | Raw request body                                       | `{"data": "value"}`                       |
| `.QueryArgs`         | Query parameters object                                | `fasthttp.Args{"id":"123","token":"abc"}` |
| `.RemoteAddr`        | Remote Addr                                            | `"192.168.1.10:54321"`                    |
| `.RemoteIP`          | Remote network address                                 | `"192.168.1.1"`                           |
| `.RequestTime`       | Time when request was received                         | time.Time object `2025-08-20T21:10:00Z`   |
| `.Request`           | Full `fasthttp.Request` object                         | `&fasthttp.Request{...}`                  |
| `.URI`               | Request URI                                            | `"/webhooks/..."`                         |
| `.UserAgent`         | Client User-Agent header                               | `"Mozilla/5.0 (X11; Linux x86_64)"`       |

## Best Practices

1. **Always set appropriate status codes** (200 for success, 202 for async)
2. **Include request/correlation IDs** in responses
3. **Keep responses minimal** for performance
4. **Use consistent response formats** across webhooks
5. **Validate responses** match webhook provider expectations
6. **Set proper Content-Type** headers
7. **Include timestamps** for debugging
8. **Avoid sensitive data** in responses
9. **Test with actual webhook providers**

## Response Structure

```yaml
response:
  statusCode: 200                    # HTTP status code
  contentType: application/json      # Content-Type header
  formatting:                        # Response body template
    templateString: '{"status": "ok"}'
```

## Webhook-Specific Codes

```yaml
# GitHub webhooks expect 200-299
response:
  statusCode: 200

# Stripe webhooks expect exactly 200
response:
  statusCode: 200

# Slack webhooks expect 200 with specific body
response:
  statusCode: 200
  formatting:
    templateString: "OK"
```

## Examples

#### JSON Responses

```yaml
response:
  contentType: application/json
  formatting:
    templateString: |
      {
        "status": "received",
        "timestamp": "{{ now }}",
        "id": "{{ uuidv4 }}"
      }
```

#### Plain Text Responses

```yaml
response:
  contentType: text/plain
  formatting:
    templateString: "Webhook received and processed"
```

#### XML Responses

```yaml
response:
  contentType: application/xml
  formatting:
    templateString: |
      <?xml version="1.0" encoding="UTF-8"?>
      <response>
        <status>success</status>
        <id>{{ uuidv4 }}</id>
        <timestamp>{{ now }}</timestamp>
      </response>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.atom.codes/webhooked/configuration/response-layer.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
