---
title: "Create Attribution Events"
method: POST
path: "/v2/issuers/{organizationId}/users/{userId}/attributions"
tags: ["users > attributions"]
---

# Create Attribution Events

`POST /v2/issuers/{organizationId}/users/{userId}/attributions`

## Request

- Base URL: `https://rewards-api.getkard.com`
- URL: `https://rewards-api.getkard.com/v2/issuers/{organizationId}/users/{userId}/attributions`
- Auth: HTTP bearer

Call this endpoint to send attribution events made by a single enrolled user for processing. A maximum of 100 events can be included in a single request.

<b>Required scopes:</b> `attributions:write`

## Path parameters

- `organizationId` string, required: Your issuer organization ID, provided by Kard
- `userId` string, required: The ID of the user as defined on the issuers system

## Request body

- UsersAttributionsCreateAttributionRequestObject
  - `data` UsersAttributionsCreateAttributionRequestUnion[], required: Discriminated union representing the request body for submitting attribution events. Use `type` to distinguish between the two: - `offerAttribution`: Events related to viewing or interacting with an offer. - `notificationAttribution`: Events related to viewing or interacting with a notification.
    - union
      - object
        - `type` 'offerAttribution', required: Discriminator value: offerAttribution
        - `attributes` UsersAttributionsOfferAttributionAttributes, required
          - `entityId` string, required: The offer ID
          - `eventCode` 'IMPRESSION' | 'VIEW' | 'ACTIVATE' | 'BOOST', required: The event code of attribution event.
          - `medium` 'BROWSE' | 'EMAIL' | 'MAP' | 'SEARCH' | 'CTA' | 'PUSH', required: Where the offer attribution event is taking place in your rewards experience.
          - `eventDate` string, date-time, required: The timestamp of the attribution event. Must be in ISO 8601 format (e.g., "2025-01-01T00:00:00Z").
          - `state` UsersAttributionsAttributionState
            - `rank` integer: The position of the offer in the list shown to the user (1-indexed)
            - `filters` UsersAttributionsAttributionFilter[]: The active filters when the user saw the offer
              - …
            - `placementId` string: Unique identifier of the placement the attribution event originated from
            - `slotId` string: Stable identifier for the slot within the placement
      - object
        - `type` 'notificationAttribution', required: Discriminator value: notificationAttribution
        - `attributes` UsersAttributionsNotificationAttributionAttributes, required
          - `entityId` string, required: The notification ID
          - `eventCode` 'IMPRESSION' | 'VIEW' | 'ACTIVATE' | 'BOOST', required: The event code of attribution event.
          - `medium` 'PUSH' | 'EMAIL', required: Where the notification attribution event is taking place in your rewards experience.
          - `eventDate` string, date-time, required: The timestamp of the attribution event. Must be in ISO 8601 format (e.g., "2025-01-01T00:00:00Z").
          - `state` UsersAttributionsAttributionState
            - `rank` integer: The position of the offer in the list shown to the user (1-indexed)
            - `filters` UsersAttributionsAttributionFilter[]: The active filters when the user saw the offer
              - …
            - `placementId` string: Unique identifier of the placement the attribution event originated from
            - `slotId` string: Stable identifier for the slot within the placement
      - object
        - `type` 'placementSlotAttribution', required: Discriminator value: placementSlotAttribution
        - `attributes` UsersAttributionsPlacementSlotAttributionAttributes, required: Attributes for a slot-level activation event on a batch-activation placement. A slot activation also writes per-offer `offerAttribution` ACTIVATE events for every offer resolved by the slot's content strategy (see `ActivatePlacementSlot`).
          - `entityId` string, required: The slot ID (matches `state.slotId`)
          - `eventCode` 'IMPRESSION' | 'VIEW' | 'ACTIVATE' | 'BOOST', required: The event code of attribution event.
          - `medium` 'CTA', required: Where the placement-slot attribution event is taking place in your rewards experience.
          - `eventDate` string, date-time, required: The timestamp of the attribution event. Must be in ISO 8601 format (e.g., "2025-01-01T00:00:00Z").
          - `state` UsersAttributionsAttributionState
            - `rank` integer: The position of the offer in the list shown to the user (1-indexed)
            - `filters` UsersAttributionsAttributionFilter[]: The active filters when the user saw the offer
              - …
            - `placementId` string: Unique identifier of the placement the attribution event originated from
            - `slotId` string: Stable identifier for the slot within the placement

## Response `202`

Response with status 202

- UsersAttributionsCreateAttributionResponse
  - `data` CommonsJobResponse, required
    - `type` string, required: Type of document returned
    - `id` string, required: The request id of the pending job
    - `attributes` CommonsJob, required
      - `status` 'queued', required: Status of the job
      - `message` string, required: Message regarding the status of the job request

## Other responses

- `400`: Error response with status 400
- `401`: Error response with status 401
- `429`: The issuer's traffic grew faster than its allowed rate, or the endpoint's own limit was reached. If the response includes a `Retry-After` header, wait that many seconds before retrying. See [Rate Limits](/2024-10-01/api/integration-guides/rate-limits).
- `500`: Error response with status 500

## Changes

- **2026-10-22** `4e87fc8b018b`: 1 info
  - added the non-success response with the status `429`

[Operation history](https://skmtc.dev/getkard/apis/getkard-2/changes/v2/issuers/:organizationId/users/:userId/attributions/post.md)

---

[API](https://skmtc.dev/getkard/apis/getkard-2.md) - [All operations](https://skmtc.dev/getkard/apis/getkard-2/llms.txt) - [OpenAPI document](https://skmtc.dev/getkard/apis/getkard-2/revisions/bd47764afa21?raw)
