---
title: "Get a customer profile"
description: "Fetch Feature access and signed Experience delivery state."
api: POST https://i.nuxie.ai/profile
authMethod: none
playground: simple
search:
  tags: ["api", "app", "reference"]
  keywords: ["profile", "ETag", "If-None-Match", "releases", "armedLegs", "facts"]
---

Fetch a customer's Feature access and Experience delivery state. The SDK uses this profile to find Experiences the customer can run and verifies each signed release before displaying it.

## Request

- **`If-None-Match`** · header · `string`

  The complete `ETag` from the previous response, including its quotes. An unchanged profile returns `304` with no body.

- **`apiKey`** · body · `string` · required

  Publishable key for the app platform. A `pk_test_` key selects test data; a `pk_live_` key selects live data. Copy it from **Connect your app**.

- **`distinct_id`** · body · `string` · required

  The identified or anonymous customer ID your app supplies to the SDK, rather than Nuxie's internal customer record ID. See [Customer identifiers](/docs/api-reference/rest-api#customer-identifiers).

## Response

- **`schemaVersion`** · `string` · required

  `nuxie.journey-plane-profile.v2`.

- **`status`** · `string` · required

  `ok`.

- **`delivery`** · `object` · required

  Base URLs for rendering Experiences and loading assets.

  **Delivery fields**

  - **`renderBaseUrl`** · `string` · required

    Base URL for Experience rendering.

  - **`assetBaseUrl`** · `string` · required

    Base URL for Experience assets.

- **`features`** · `object[]` · required

  Active Features that apply to this platform.

  **Feature fields**

  - **`id`** · `string` · required

    Published Feature key.

  - **`type`** · `string` · required

    `boolean`, `metered`, or `creditSystem`.

  - **`balance`** · `number` · required

    Remaining units, or `null` for Boolean or unlimited access.

  - **`unlimited`** · `boolean` · required

    Whether usage is unlimited.

  - **`nextResetAt`** · `null` · required

    Reset metadata.

  - **`interval`** · `null` · required

    Interval metadata.

- **`facts`** · `object` · required

  Customer properties, Segment memberships, and Experiment assignments.

- **`armedLegs`** · `object[]` · required

  New or continuing Journey sections available to run.

- **`releases`** · `object[]` · required

  Signed Experience content for those sections.

A customer without an available Experience can receive empty `armedLegs` and `releases` arrays. Use [Check Feature access](/docs/api-reference/app/entitled) to evaluate a specific required balance and [Consume Feature usage](/docs/api-reference/app/consume) to spend units.

## Caching and response headers

| Header | Meaning |
| --- | --- |
| `ETag` | Validator for this exact response body |
| `Cache-Control` | `private, no-cache`; revalidate a stored response before using it |
| `Nuxie-App-Id` | Platform ID associated with the publishable key |
| `Nuxie-App-Environment` | `test` or `live` |
| `X-Request-Id` | Request identifier for troubleshooting |

A `304` response has no body. Keep the previous profile and use the returned headers. Copy the complete `ETag`, including its quotes, into `If-None-Match`.

Profile requests from the SDK also update the connection status in **Connect your app**.

```sh title="cURL"
curl https://i.nuxie.ai/profile \
  --header 'Content-Type: application/json' \
  --data '{
  "apiKey": "pk_test_example",
  "distinct_id": "user-456"
}'
```

```json title="200 · No available Experience"
{
  "schemaVersion": "nuxie.journey-plane-profile.v2",
  "status": "ok",
  "delivery": {
    "renderBaseUrl": "https://cdn.nuxie.ai/",
    "assetBaseUrl": "https://cdn.nuxie.ai/"
  },
  "features": [],
  "facts": {
    "properties": {},
    "memberships": {},
    "assignments": {}
  },
  "armedLegs": [],
  "releases": []
}
```

```http title="Unchanged profile"
HTTP/1.1 304 Not Modified
```
