> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kaireonai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Capture & Attribution

> Record customer events and attribute outcomes to decisions.

## POST /api/v1/capture

Legacy alias for the [Respond API](/api-reference/respond). All requests are forwarded directly to `POST /api/v1/respond` with identical behavior. The Capture endpoint exists for backward compatibility.

<Note>
  **Data plane.** This endpoint is part of the public data plane — the runtime
  decisioning loop (`/recommend`, `/respond`, `/respond/bulk`, `/capture`) —
  and is callable with any `krn_` API key, including default keys minted
  without scopes. Management endpoints, by contrast, require control-plane
  access (see [API Keys](/api-reference/api-keys)).
</Note>

**Rate limit:** 500 requests/min.

### Request Body

The request body is identical to the [Respond API](/api-reference/respond). Key fields:

| Field              | Type    | Required    | Description                                                     |
| ------------------ | ------- | ----------- | --------------------------------------------------------------- |
| `customerId`       | string  | Yes         | Customer identifier                                             |
| `outcome`          | string  | Yes\*       | Outcome type key (e.g., `"impression"`, `"click"`, `"convert"`) |
| `interactionType`  | string  | Yes\*       | Alias for `outcome` (provide one or the other)                  |
| `creativeId`       | string  | Conditional | Creative ID (or provide `recommendationId` + `rank`)            |
| `recommendationId` | string  | Conditional | Recommendation to attribute to (used with `rank`)               |
| `rank`             | integer | Conditional | Which offer from the recommendation (1-based)                   |
| `offerId`          | string  | No          | Offer ID (auto-resolved from creative if omitted)               |
| `channelId`        | string  | No          | Channel ID                                                      |
| `idempotencyKey`   | string  | Yes         | Required for all outcomes to prevent double-counting            |
| `conversionValue`  | number  | No          | Monetary value of the conversion                                |
| `context`          | object  | No          | Additional context data                                         |
| `outcomeDetails`   | object  | No          | Additional outcome data                                         |
| `timestamp`        | string  | No          | ISO 8601 timestamp (defaults to now)                            |

### Example

```bash theme={null}
curl -X POST https://playground.kaireonai.com/api/v1/capture \
  -H "Content-Type: application/json" \
  -H "X-Tenant-Id: my-tenant" \
  -d '{
    "customerId": "C-1234",
    "creativeId": "creative_001",
    "outcome": "impression",
    "idempotencyKey": "imp-C1234-001"
  }'
```

### Response

Same as the [Respond API](/api-reference/respond) response:

```json theme={null}
{
  "interactionId": "int_abc123",
  "recommendationId": null,
  "customerId": "C-1234",
  "outcome": "impression",
  "classification": "neutral",
  "rank": null,
  "offerName": "Premium Card",
  "creativeName": "Email Hero V1",
  "channelName": "Email",
  "categoryName": "Credit Cards",
  "status": "recorded",
  "timestamp": "2026-03-10T12:00:00.000Z"
}
```

<Tip>
  The Capture endpoint is a legacy alias. New integrations should use the [Respond API](/api-reference/respond) directly. Both endpoints accept the same request body and return the same response.
</Tip>
