---
title: "Create Entitlements"
method: POST
path: "/v1/omni-ai/entitlements"
tags: ["Omni AI"]
---

# Create Entitlements

`POST /v1/omni-ai/entitlements`

## Request

- Base URL: `https://api.clearstreet.com`
- URL: `https://api.clearstreet.com/v1/omni-ai/entitlements`
- Auth: HTTP bearer

Record consent and upsert one-or-more active grants.

## Request body

- CreateEntitlementsRequest
  - `account_ids` integer[], required
  - `agreement_id` string, required
  - `entitlement_codes` EntitlementCode[], required

## Response `200`

Resulting active grants for requested scope

- object
  - `error` ApiError: A direct mapping of tonic::Status, for use in HTTP responses.
    - `code` integer, required: The error code is used to identify the nature of the error. It corresponds to an HTTP status code.
    - `details` object[]
    - `message` string, required: A human-readable message providing more details about the error.
  - `metadata` ResponseMetadata, required: Metadata for the response. This will always contain a request ID which can be used to identify the request to Clear Street for tracing, and optionally may include pagination data.
    - `next_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `page_number` integer, nullable: Pagination. Included if this was a GET (list) response
    - `previous_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `request_id` string, required: A unique ID for this request, generated upon ingestion of the request.
    - `total_items` integer, nullable: Total number of items available (not just in this page).
    - `total_pages` integer, nullable: Total number of pages available.
  - `data` EntitlementResource[], required
    - `account_id` integer, required
    - `agreement_id` string, required
    - `entitlement_code` 'omni.account_data', required: Stable entitlement code granted by an agreement.
    - `entitlement_id` string, required
    - `granted_at` string, required

## Other responses

- `400`: Invalid request payload
- `403`: Caller lacks access to one or more requested accounts
- `500`: Internal server error

## Changes

- **2026-07-16** `ae04ae681b64`: 1 breaking, 1 info
  - removed the required property `allOf[subschema #2]/data/items/trading_account_id` from the response with the `200` status
  - added the required property `allOf[subschema #2]/data/items/account_id` to the response with the `200` status
- **2026-07-16** `169e8b9ad50c`: 1 breaking, 1 info
  - removed the required property `allOf[subschema #2]/data/items/account_id` from the response with the `200` status
  - added the required property `allOf[subschema #2]/data/items/trading_account_id` to the response with the `200` status
- **2026-07-15** `ae04ae681b64`: 1 breaking, 1 info
  - removed the required property `allOf[subschema #2]/data/items/trading_account_id` from the response with the `200` status
  - added the required property `allOf[subschema #2]/data/items/account_id` to the response with the `200` status
- **2026-05-21** `4f7b961d35ff`: 2 breaking, 2 warning
  - added the new required request property `account_ids`
  - added the new required request property `entitlement_codes`
  - removed the request property `requested_entitlement_codes`
  - removed the request property `trading_account_ids`

[Operation history](https://skmtc.dev/clear-street/apis/clear-street-trading-api/changes/v1/omni-ai/entitlements/post.md)

---

[API](https://skmtc.dev/clear-street/apis/clear-street-trading-api.md) - [All operations](https://skmtc.dev/clear-street/apis/clear-street-trading-api/llms.txt) - [OpenAPI document](https://skmtc.dev/clear-street/apis/clear-street-trading-api/revisions/52e77ea7d731?raw)
