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

# Get Placement Content

> What each placement shows one contact now

For each placement key you ask for, returns the contact's open placement item with the highest priority (ties go to the newest), or `null` when there is nothing to show, so your app collapses the slot. Keys your workspace has not defined always return `null`. Use this from your backend when you render placements yourself; the mobile and web SDKs call the equivalent browser endpoint for you. Reading marks nothing displayed: report `displayed`, `clicked` and `dismissed` with [Record In-App Event](https://docs.sequenzy.com/api-reference/in-app/record-event.md). Requires the `subscribers:read` scope.

## Request

**placements** `string` *required*

Comma-separated placement keys, up to 10. Each key appears once in the response, in request order.

**email** `string`

The contact's email. Give one of `email`, `externalId` or `subscriberId`.

**externalId** `string`

The contact's external ID from your app.

**subscriberId** `string`

The Sequenzy subscriber ID.

**actions** `string`

Comma-separated button actions your app handles beyond `open_url` and `dismiss`, such as `request_push_permission`. Items with other actions are skipped, so a lower-priority item can show instead.

```bash theme={null}
curl "https://api.sequenzy.com/api/v1/in-app/placement-feed?externalId=user_42&placements=home_hero,checkout_upsell" \
  --header "Authorization: Bearer $SEQUENZY_API_KEY"
```

```json 200 theme={null}
{
  "success": true,
  "subscriberId": "sub_123",
  "placements": [
    {
      "placement": "home_hero",
      "message": {
        "id": "iam_placement",
        "kind": "placement",
        "format": null,
        "position": null,
        "eyebrow": "Members only",
        "title": "Upgrade to Pro, Jane",
        "body": "Get 20% off your first year.",
        "imageUrl": "https://cdn.example.com/pro.png",
        "imagePlacement": null,
        "buttons": [
          { "label": "See plans", "action": "open_url", "url": "myapp://billing" },
          { "label": "Not now", "action": "dismiss", "url": null }
        ],
        "data": { "campaign": "pro" },
        "style": {
          "preset": "brand",
          "backgroundColor": "#ffffff",
          "textColor": "#111827",
          "mutedTextColor": "#4b5563",
          "buttonColor": "#4f46e5",
          "buttonTextColor": "#ffffff",
          "cornerRadius": 16,
          "buttonRadius": 8,
          "fontFamily": "Inter, Arial, sans-serif"
        },
        "pinned": false,
        "placement": "home_hero",
        "priority": "high",
        "layout": "card",
        "sequenceId": "seq_1",
        "stepId": "step_2",
        "createdAt": "2026-11-07T10:00:00.000Z",
        "expiresAt": null,
        "displayedAt": null,
        "clickedAt": null,
        "clickCount": 0,
        "dismissedAt": null,
        "readAt": null,
        "html": null,
        "showCloseButton": false
      }
    },
    { "placement": "checkout_upsell", "message": null }
  ]
}
```

```json 400 theme={null}
{
  "error": "Ask for at most 10 placements at once"
}
```

```json 401 theme={null}
{
  "error": "Invalid API key"
}
```

```json 403 theme={null}
{
  "error": "API key is missing required scope: subscribers:read"
}
```

```json 404 theme={null}
{
  "error": "Subscriber not found."
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.