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

# Outputs

> Profiles, claims, intent scores, and sample responses partners receive from the SDK and API.

After events are accepted and archived, partners read intelligence back through the profile APIs. V1 returns **resolved profiles**, **claims**, and **intent scores**.

## What a partner can read today

| Output            | Endpoint                                  | Scope            | Timing      |
| ----------------- | ----------------------------------------- | ---------------- | ----------- |
| Resolved profile  | `GET /v1/profiles/:customer_id`           | `profile:read`   | Synchronous |
| Underlying claims | `GET /v1/profiles/:customer_id/claims`    | `claims:read`    | Synchronous |
| Intent scores     | `GET /v1/profiles/:customer_id/intents`   | `intents:read`   | Synchronous |
| Event status      | `GET /v1/events/:event_id`                | `events:read`    | Synchronous |
| Effective consent | `GET /v1/customers/:id/effective-consent` | `consent:read`   | Synchronous |
| Workflow status   | `GET /v1/workflows/:workflow_id`          | `workflows:read` | Synchronous |

Pass `consent_purpose` on profile reads when you need the consent gate enforced for that call. If the purpose is not granted, the API returns `403 consent_required`.

## Resolved profile

Swapnice does not overwrite contradictory facts. Each attribute is resolved from claims using `highest_confidence_then_most_recent`, with alternatives retained.

```bash theme={null}
curl "https://api.sandbox.swapnice.com/v1/profiles/cust_8f2a1c?consent_purpose=personalization" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```

```json theme={null}
{
  "customer_id": "cust_8f2a1c",
  "resolved_at": "2026-08-26T16:10:02.000Z",
  "facts": [
    {
      "attribute": "favorite_series",
      "resolved_value": "yugioh",
      "confidence": 0.91,
      "resolution_method": "highest_confidence_then_most_recent",
      "consent_purpose": "personalization",
      "evidence": [
        {
          "id": "clm_101",
          "customer_id": "cust_8f2a1c",
          "attribute": "favorite_series",
          "value": "yugioh",
          "source": "partner_app",
          "observed_at": "2026-08-20T18:00:00.000Z",
          "context": "profile_selection",
          "consent_purpose": "personalization",
          "confidence": 0.91,
          "provenance": {
            "source_partner": "partner_app",
            "source_system": "ios",
            "collected_at": "2026-08-20T18:00:00.000Z"
          }
        }
      ],
      "alternatives": [
        {
          "value": "pokemon",
          "confidence": 0.64,
          "reason": "lower_confidence_or_older_claim"
        }
      ]
    },
    {
      "attribute": "recent_purchase_object",
      "resolved_value": "sku_blue_eyes_tin",
      "confidence": 1,
      "resolution_method": "highest_confidence_then_most_recent",
      "consent_purpose": "personalization",
      "evidence": [],
      "alternatives": []
    }
  ]
}
```

What you can do with this:

* Personalize the partner app from facts the user actually granted
* Show provenance when a value is inferred versus explicitly selected
* Keep a defensible audit trail instead of a single overwritten profile field

## Claims

Claims are the unresolved evidence behind a profile. Use them when you need the full history, not just the winner.

```json theme={null}
{
  "data": [
    {
      "id": "clm_101",
      "customer_id": "cust_8f2a1c",
      "attribute": "favorite_series",
      "value": "yugioh",
      "source": "partner_app",
      "observed_at": "2026-08-20T18:00:00.000Z",
      "context": "profile_selection",
      "consent_purpose": "personalization",
      "confidence": 0.91,
      "provenance": {
        "source_partner": "partner_app",
        "source_system": "ios",
        "collected_at": "2026-08-20T18:00:00.000Z"
      }
    }
  ],
  "pagination": { "has_more": false, "next_cursor": null }
}
```

## Intent scores

Intents are grouped into five categories.

| Category     | Meaning                                                   | Example objects            |
| ------------ | --------------------------------------------------------- | -------------------------- |
| `outcome`    | Intent to purchase, participate, or complete a collection | SKU, event, set            |
| `sentiment`  | Positive or negative preference                           | Product, brand, experience |
| `affiliate`  | Self-label or group association                           | Team, fandom, community    |
| `habit`      | Repeated interest or activity                             | Series, category, venue    |
| `activation` | Readiness for the next step in the partner product        | Onboarding step, offer     |

```json theme={null}
{
  "data": [
    {
      "id": "evt_9c21",
      "category": "outcome",
      "object": "sku_blue_eyes_tin",
      "confidence": 1,
      "consent_purpose": "personalization",
      "evidence": [
        {
          "id": "clm_220",
          "customer_id": "cust_8f2a1c",
          "attribute": "purchase.completed",
          "value": "sku_blue_eyes_tin",
          "source": "partner_app",
          "observed_at": "2026-08-26T16:04:00.000Z",
          "consent_purpose": "personalization",
          "confidence": 1,
          "provenance": {
            "source_partner": "partner_app",
            "source_system": "ios",
            "collected_at": "2026-08-26T16:04:00.000Z"
          }
        }
      ]
    },
    {
      "id": "evt_9c18",
      "category": "habit",
      "object": "yugioh",
      "confidence": 0.72,
      "consent_purpose": "personalization",
      "evidence": []
    }
  ],
  "pagination": { "has_more": false, "next_cursor": null }
}
```

In V1, an intent row is derived from archived events for that customer. Use high-confidence `habit` and `outcome` rows to decide what to show next in the partner product.

## Event acceptance and status

Immediately after ingest:

```json theme={null}
{
  "event_id": "evt_9c21",
  "status": "accepted",
  "sequence": 7,
  "accepted_at": "2026-08-26T16:04:00.120Z",
  "processing_status": "queued"
}
```

Later, `GET /v1/events/evt_9c21`:

```json theme={null}
{
  "event_id": "evt_9c21",
  "customer_id": "cust_8f2a1c",
  "status": "processed",
  "accepted_at": "2026-08-26T16:04:00.120Z",
  "processed_at": "2026-08-26T16:04:01.004Z"
}
```

Statuses: `accepted`, `processing`, `processed`, `failed`, `rejected`.

## Related

* [Events and intent ontology](/partners/events-and-intents)
* [What a pilot enables](/partners/pilot)
* [Example use cases](/partners/use-cases)
* [API overview](/partners/api-overview)
