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

> ## Agent Instructions
> SecId API: use the sandbox base URL https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance unless the user explicitly provides production access. Authenticate with OAuth 2.0 client credentials: POST https://partners-api.sandbox.securitize.io/oauth2/token (form fields grant_type=client_credentials, client_id, client_secret, read from environment variables), cache the bearer token for its expires_in (7200 s) and send it as Authorization: Bearer on every call; never print or log the secret or the token.
> Nothing is verified until POST /investors/{investorId}/verification/submit. An individual: create, upload one identity document, submit. A company: create, add its people as key parties (at least one with isBeneficialOwner: true), upload their documents, submit.
> Branch on the HTTP status and the error `code`, never on `message`. A body without `code` comes from the gateway: on a 401 get a new token and send the request again; a 403 means the account is not enabled for this API.
> SecId API addresses: send address.state only when that address's countryCode is US, as the 2-letter state code (NY); omit it for any other country, also when the user has a province or region. Otherwise the call answers 400 validation_error on address.state.
> SecId API individuals in the US: taxId is the person's Social Security number, and it is checked against the name and residential address sent; send them as registered. A mismatch can move the investor to manual-review instead of verified. Sandbox does not run the check.
> Creates are safe to repeat with the same body: after a timeout or a 502, send the identical create again. Document uploads are not: each call stores a new document, so only re-send a document after a 502.
> Poll GET /investors/{investorId} about every 30 seconds, then back off; treat any status you do not recognise as not verified. In sandbox, the webhook investor.kyc.updated also announces every status change, and investor.suitability.updated / investor.dlt_test.updated every change of the suitability and DLT test verificationStatus: verify the signature, deduplicate on sourceEventId and confirm with the matching GET before acting. Token whitelisting is asynchronous too: poll GET /investors/{investorId}/wallets/whitelist until the status leaves processing.
> SecId API tax forms: POST /investors/{investorId}/tax-forms takes multipart/form-data (parts file, formType, signatureDate); never base64 or JSON. Let the HTTP client set content-type with the boundary. At any point of the verification, before or after the investor is verified, only for investors you created (201), one PDF up to 10 MB per call; each upload replaces the form on file, so after a 502 send the same request again. A W-9 can instead go as JSON fields to POST /investors/{investorId}/tax-forms/w9 (TIN as 9 digits, SSN or EIN): it does not replace a form on file (409 tax_form_already_active, details.activeTaxForm), and it requires a certification object (certifiedAt, signatureName, subjectToBackupWithholding false, isUSPerson true, certificationTextVersion w9-sm-2026-10): the investor certifies in your flow on the text published at /secid-api/tax-forms#the-certification, shown without changes; subjectToBackupWithholding true answers 422 business_rule_violation (details.reason backup_withholding_not_supported). Unlike creates, a repeat after success answers 409 tax_form_already_active, not 201: when details.activeTaxForm.formType is W-9, treat it as on file.
> Use synthetic test data in sandbox (@test.invalid emails, fresh ids each run). Never send more than one DLT test attempt per test investor unless the user asks: three failed attempts lock the test permanently.
> The complete contract, with every field, response and error, is the OpenAPI file of the API reference; the Errors page says what to do for each code.
> CET Underlying API: a WebSocket at wss://partners-rt-gw.sandbox.securitize.io/v1/market-maker/stream (TLS only; ws:// hangs with no answer). Sign hello, place_order, cancel_order and submit_crypto_funding with the user's Ed25519 key, read from an environment variable or secrets store; never print or log it. Sign timestamp + "." + type + "." + the exact payload string you send: serialise the payload once and embed that same string in the frame.
> CET Underlying API: send a unique requestId of at most 32 characters (a UUID without hyphens) on every message and match replies on it; frames without a requestId are pushes. Every amount is a decimal string, never a JSON number; compare amounts as decimals. Branch on the error code, never on message.
> CET Underlying API: an ack to place_order means taken, not filled. externalRef is the idempotency key; after an ack with status UNKNOWN or an UPSTREAM_UNAVAILABLE error, call get_order by externalRef before resending. Updates are delivered at most once: after any reconnect, read working orders back with get_order. Every order is placed by quantity. A buy must be a LIMIT order: quantity × limitPrice plus fees is held against your own available cash (get_cash_balance_v2), and a buy it does not cover, a MARKET buy or a notional order is refused (INVALID_ORDER). A sell must be placed by quantity, after its CETs reach the redemption wallet, or it is refused. mint_updated and burn_updated push mints and burns once they are on chain; after a gap, read them with get_mints and get_burns. The complete contract is the AsyncAPI file of the API reference.
> Stocks API (Beta): documented ahead of its release through the partner gateway; paths, fields and errors can change. Base URL https://partners-api.sandbox.securitize.io/stocks/v1. Send x-api-key on every call and investorId on every call about an investor. Read the key from an environment variable; never print or log it, and never call the API from frontend code.
> Stocks API: an investor can trade only once the SecId API shows them verified, with verified suitability (and a passed DLT test in the EEA), and once their wallet on the stock's chain is linked with their signature of the agreement message, signed verbatim. There is no whitelisting call: the first trade whitelists the wallet.
> Stocks API: orders are fill or kill. GET /stocks/realtime-price, prepare within about 20 seconds (signedPrice), have the investor's wallet sign the returned transaction unchanged and sign-only (never send it), then submit it once with POST /stocks/execute-signed-transaction within 120 seconds. Amounts are raw base units as strings; USDC has 6 decimals. The outcome is on chain: follow transactionHash.
> Stocks API: production access requires a UI audit by Securitize Compliance of the live screens: the disclosures and the market data shown, the NBBO included.
> Corporate Actions API (Beta, 0.x): in development and subject to change; paths, fields, enumerations and event names can change before 1.0.0. Base URL https://partners-api.sandbox.securitize.io/corporate-actions/v1. Get a bearer token with OAuth 2.0 client credentials at POST https://partners-api.sandbox.securitize.io/oauth2/token (no scope, 2 hours), cache it, and send Authorization: Bearer on every call. Read the client id, secret and the webhook signing secret from environment variables; never print or log them, and never call the API from frontend code.
> Corporate Actions API: webhooks arrive signed with the Standard Webhooks scheme under the svix-id, svix-timestamp and svix-signature headers (HMAC-SHA256 over id.timestamp.raw body, base64, v1 prefix; the secret is base64 after whsec_). Verify before parsing, reject a timestamp more than 5 minutes off, answer 2xx within 10 seconds. Delivery is at least once and can be out of order: deduplicate on sourceEventId, keep the highest version per object (objectId), order by sequence per stream.id, and replace the object with data (never merge).
> Corporate Actions API: treat an unknown caType, reasonCode, eventType or enum value as informational, never as an error. A restriction ends only with ca.restriction.removed; expectedEnd is informational. marketStatus UNAVAILABLE means do not trade; the reason field carries a restriction reasonCode or a market reason such as PRE_MARKET. GET /tokens?status= filters by marketStatus (OPEN, CLOSED, UNAVAILABLE), not by the token's ACTIVE status.
> Corporate Actions API: the event routes are at https://partners-api.sandbox.securitize.io/webhooks/v1 (not under /corporate-actions/v1) and cover every webhook family sent to the partner; filter with eventTypes=ca.* for corporate actions only. After an outage call POST /events/recover with since at the start of the outage (resends failed deliveries only), or page GET /events?since= (newest first, iterator paging, 90 days), then read state with GET /tokens/{tokenId}/status and GET /corporate-actions/{sourceCaId}. In sandbox, POST /sandbox/events with a scenario and one of your tokenIds publishes a scripted sequence at once; order the events by sequence, not by arrival.
> Investor Activity API: base URL https://partners-api.sandbox.securitize.io/v1. Authentication is OAuth 2.0 client credentials only (no API key): POST https://partners-api.sandbox.securitize.io/oauth2/token (no scope, 2 hours), cache the token, and send Authorization: Bearer on every call. The token identifies the investor account; there is no investor id to pass. Read the client id, secret and the webhook signing secret from environment variables; never print or log them, and never call the API from frontend code.
> Investor Activity API: every amount is an integer string in base units with a sibling decimals (human = amount / 10^decimals); parse with BigInt or a decimal type, never a float. Cash amounts (deposits, confirmations, payouts) are in the minor units of currencyId (1 = USD, decimals 2); token amounts (transactions, mintings, holdings) in the token's base units. Never add cash to tokens.
> Investor Activity API: reconcile a subscription by grouping GET /deposits?tokenId= on tokenIssuanceId and matching the transaction in GET /transactions?tokenId= with the same tokenIssuanceId (null on a deposit means not issued yet; null on a transaction means not an issuance). Each issuance has a deposit movement (cash in) and a liquidation movement (that cash applied to the tokens) for the same amount: count the cash once, by direction=deposit, never by adding every movement. Page with offset and limit (max 100) until offset + meta.length reaches meta.total; there is no tokenIssuanceId filter. Reconcile a redemption by txHash (transfer, investor.redemption.pending, payout sourceTransaction) and by the redemption's data.id across pending, confirmed, payout.initiated and payout.completed.
> Investor Activity API: webhooks arrive signed with the Standard Webhooks scheme under the svix-id, svix-timestamp and svix-signature headers (HMAC-SHA256 over id.timestamp.raw body, base64, v1 prefix; the secret is base64 after whsec_). Verify before parsing, reject a timestamp more than 5 minutes off, answer 2xx within 15 seconds. The body is {eventType, eventId, timestamp, data}: deduplicate on eventId (not svix-id), upsert by data.id, never move a record back to an earlier step, and treat an unknown eventType, processType or paymentMethod as informational. In webhooks a field with no value is absent; in endpoint answers it is null. After an outage page GET /webhook-events (newest first, iterator paging, optional eventType) back to the start of the outage.
> SecId hosted onboarding: instead of the API, a partner can send an investor to https://stocks.securitize.io/partners?tokenId=<stock token id>&partnerUrl=<return URL> (tokenAddress may replace tokenId; partnerUrl must be an absolute https URL, URL-encoded). Securitize runs identity verification, the investment profile and the wallet there. Nothing is appended to partnerUrl on return: check the wallet on chain before trading (Beta on Solana).

# Orders

> List the symbols you can trade, place, cancel and look up orders, and receive order and trade updates.

`get_symbols` lists the symbols you can trade and the chains each one can be bought on; a symbol listed on more than one chain needs `chainId` on `place_order`. `get_redemption_address` answers where to send a CET's tokens before selling, `get_redemption_balance` how many of the ones you sent you can still sell, and `get_redemption_balances` the same for every CET at once: see [Sell shares and redeem CETs](https://developers.securitize.io/cet-underlying-api/sell-shares.md#1-send-the-cets-to-the-redemption-wallet).

An `ack` to `place_order` means the order was taken, not that it filled. A buy the account cannot pay for, or a sell your redemption balance cannot cover, is refused with `INVALID_ORDER` before it reaches the broker. Once taken, its fills arrive as `order_updated` and `trade_updated`, pushed at most once and never replayed. After any gap, `get_order` says where an order stands. See [Track, cancel and reconcile orders](https://developers.securitize.io/cet-underlying-api/track-orders.md).


## AsyncAPI

````yaml cet-underlying-api/asyncapi.yaml orders
id: orders
title: Orders
description: >
  Place, cancel and look up orders on the shares underlying your CETs, and
  receive their updates. The account is always the session's: no message carries
  an account field.


  An `ack` to `place_order` means the order was taken, not that it filled. Fills
  arrive as `order_updated` and `trade_updated`, pushed without a request.
  Updates are delivered at most once and nothing is queued for a closed socket:
  after any gap, `get_order` is what says where an order stands.
servers:
  - id: sandbox
    protocol: wss
    host: partners-rt-gw.sandbox.securitize.io
    bindings: []
    variables: []
address: /v1/market-maker/stream
parameters: []
bindings: []
operations:
  - &ref_8
    id: placeOrder
    title: Place an order
    description: Buy or sell shares, by quantity.
    type: receive
    messages:
      - &ref_18
        id: place_order
        payload:
          - name: place_order
            description: Buys or sells shares. Signed.
            type: object
            properties:
              - name: type
                type: string
                description: place_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: timestamp
                type: integer
                description: >-
                  Unix seconds when you signed the message. Must be within 30
                  seconds of the server clock.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: side
                    type: string
                    description: >-
                      `B` buys shares, and CETs are minted as it fills; a buy
                      your own cash cannot cover answers `INVALID_ORDER` with
                      the figures, and one the broker account as a whole cannot
                      pay for can still answer `INVALID_ORDER`, `Insufficient
                      buying power`. `S` sells shares, and the CETs you sent to
                      the redemption wallet are burned as it fills; the wallet
                      must already hold them, and the sell must be placed by
                      `quantity`.
                    enumValues:
                      - B
                      - S
                    required: true
                  - name: symbol
                    type: string
                    description: >-
                      The share's symbol, as `get_symbols` lists it. Checked
                      before the order is sent; a symbol your account does not
                      trade, mistyped or not, answers `INVALID_ORDER`; check it
                      against `get_symbols`. A symbol your account trades that
                      the broker no longer recognises answers `INVALID_SYMBOL`.
                    required: true
                  - name: quantity
                    type: string
                    description: >-
                      Shares, greater than zero, with no leading zero and at
                      most 5 decimal places. Every order is placed by
                      `quantity`.
                    required: false
                  - name: notional
                    type: string
                    description: >-
                      Not accepted: an order by `notional` answers
                      `INVALID_ORDER`. A buy is held against your cash at
                      `quantity × limitPrice`, and a sell is checked in shares
                      against your redemption balance, so both need a
                      `quantity`. Sending both fields, or neither, answers
                      `MALFORMED`.
                    required: false
                  - name: externalRef
                    type: string
                    description: >-
                      Your reference for the order, and its idempotency key. A
                      reference an order already uses is refused, not
                      duplicated, except that the reference of an order refused
                      before it reached the broker can be used again (a
                      reference the broker itself refused stays taken for the
                      rest of the day, so send the order under a new one); an
                      order answered `UNKNOWN` can be resent unchanged to find
                      out whether it exists. At most 39 characters of letters,
                      digits, `.`, `_` and `-`; no colon. It appears at the
                      start of every mint and burn memo.
                    required: true
                  - name: orderType
                    type: string
                    description: >-
                      A buy must be `LIMIT`; a `MARKET` buy, including one that
                      leaves `orderType` out, answers `INVALID_ORDER`. A sell
                      may be either.
                    enumValues:
                      - MARKET
                      - LIMIT
                    required: false
                  - name: limitPrice
                    type: string
                    description: >-
                      Required on a `LIMIT` order and refused on a `MARKET` one.
                      Greater than zero, with no leading zero and at most 4
                      decimal places. A price of 1.00 or more must be in whole
                      cents (2 decimal places); the broker refuses a finer one
                      as sub-penny. Only a price under 1.00 may use 4. A buy
                      must be a `LIMIT` order, and its limit is the price its
                      cost is held at.
                    required: false
                  - name: timeInForce
                    type: string
                    description: >-
                      Only `DAY` is supported. `IOC` and `FOK` are not offered
                      through the broker's API and answer `INVALID_ORDER`; a
                      `GTC` order is refused by the broker after its `ack`.
                    enumValues:
                      - DAY
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      The chain whose CETs the order mints or burns, as
                      `get_symbols` lists it. Optional when the symbol is listed
                      on one chain, which is then used. Required when it is
                      listed on more than one; without it the order answers
                      `INVALID_ORDER`.
                    required: false
              - name: signature
                type: string
                description: >-
                  base58( Ed25519-Sign( privateKey, timestamp + "." + type + "."
                  + payloadBytes ) ), over the exact bytes of `payload` as sent.
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - timestamp
            - payload
            - signature
          properties:
            type:
              type: string
              const: place_order
              x-parser-schema-id: <anonymous-schema-18>
            requestId: &ref_0
              type: string
              maxLength: 64
              description: >-
                Your id for this message, echoed on its reply. Never interpreted
                or checked for uniqueness. Up to 64 characters are accepted, but
                keep it to 32, since an `error` echoes only the first 32
                followed by `…`. A UUID without its hyphens is 32 characters.
              x-parser-schema-id: RequestId
            timestamp: &ref_2
              type: integer
              description: >-
                Unix seconds when you signed the message. Must be within 30
                seconds of the server clock.
              x-parser-schema-id: Timestamp
            payload:
              type: object
              required:
                - side
                - symbol
                - externalRef
              properties:
                side:
                  type: string
                  enum:
                    - B
                    - S
                  description: >-
                    `B` buys shares, and CETs are minted as it fills; a buy your
                    own cash cannot cover answers `INVALID_ORDER` with the
                    figures, and one the broker account as a whole cannot pay
                    for can still answer `INVALID_ORDER`, `Insufficient buying
                    power`. `S` sells shares, and the CETs you sent to the
                    redemption wallet are burned as it fills; the wallet must
                    already hold them, and the sell must be placed by
                    `quantity`.
                  x-parser-schema-id: <anonymous-schema-20>
                symbol:
                  type: string
                  maxLength: 32
                  pattern: ^(?=.*[A-Za-z0-9])[A-Za-z0-9. -]{1,32}$
                  description: >-
                    The share's symbol, as `get_symbols` lists it. Checked
                    before the order is sent; a symbol your account does not
                    trade, mistyped or not, answers `INVALID_ORDER`; check it
                    against `get_symbols`. A symbol your account trades that the
                    broker no longer recognises answers `INVALID_SYMBOL`.
                  x-parser-schema-id: <anonymous-schema-21>
                quantity:
                  type: string
                  format: decimal
                  maxLength: 32
                  pattern: ^(?!0\d)(?!0+(\.0+)?$)\d+(\.\d{1,5})?$
                  description: >-
                    Shares, greater than zero, with no leading zero and at most
                    5 decimal places. Every order is placed by `quantity`.
                  x-parser-schema-id: <anonymous-schema-22>
                notional:
                  type: string
                  format: decimal
                  maxLength: 24
                  pattern: ^(?!0\d)(?!0+(\.0+)?$)\d+(\.\d{1,2})?$
                  description: >-
                    Not accepted: an order by `notional` answers
                    `INVALID_ORDER`. A buy is held against your cash at
                    `quantity × limitPrice`, and a sell is checked in shares
                    against your redemption balance, so both need a `quantity`.
                    Sending both fields, or neither, answers `MALFORMED`.
                  x-parser-schema-id: <anonymous-schema-23>
                externalRef:
                  type: string
                  pattern: ^[A-Za-z0-9._-]{1,39}$
                  description: >-
                    Your reference for the order, and its idempotency key. A
                    reference an order already uses is refused, not duplicated,
                    except that the reference of an order refused before it
                    reached the broker can be used again (a reference the broker
                    itself refused stays taken for the rest of the day, so send
                    the order under a new one); an order answered `UNKNOWN` can
                    be resent unchanged to find out whether it exists. At most
                    39 characters of letters, digits, `.`, `_` and `-`; no
                    colon. It appears at the start of every mint and burn memo.
                  x-parser-schema-id: <anonymous-schema-24>
                orderType:
                  type: string
                  enum:
                    - MARKET
                    - LIMIT
                  default: MARKET
                  description: >-
                    A buy must be `LIMIT`; a `MARKET` buy, including one that
                    leaves `orderType` out, answers `INVALID_ORDER`. A sell may
                    be either.
                  x-parser-schema-id: <anonymous-schema-25>
                limitPrice:
                  type: string
                  format: decimal
                  maxLength: 32
                  pattern: ^(?!0\d)(?!0+(\.0+)?$)\d+(\.\d{1,4})?$
                  description: >-
                    Required on a `LIMIT` order and refused on a `MARKET` one.
                    Greater than zero, with no leading zero and at most 4
                    decimal places. A price of 1.00 or more must be in whole
                    cents (2 decimal places); the broker refuses a finer one as
                    sub-penny. Only a price under 1.00 may use 4. A buy must be
                    a `LIMIT` order, and its limit is the price its cost is held
                    at.
                  x-parser-schema-id: <anonymous-schema-26>
                timeInForce:
                  type: string
                  enum:
                    - DAY
                  default: DAY
                  description: >-
                    Only `DAY` is supported. `IOC` and `FOK` are not offered
                    through the broker's API and answer `INVALID_ORDER`; a `GTC`
                    order is refused by the broker after its `ack`.
                  x-parser-schema-id: <anonymous-schema-27>
                chainId:
                  type: integer
                  minimum: 1
                  description: >-
                    The chain whose CETs the order mints or burns, as
                    `get_symbols` lists it. Optional when the symbol is listed
                    on one chain, which is then used. Required when it is listed
                    on more than one; without it the order answers
                    `INVALID_ORDER`.
                  x-parser-schema-id: <anonymous-schema-28>
              x-parser-schema-id: <anonymous-schema-19>
            signature: &ref_3
              type: string
              maxLength: 128
              description: >-
                base58( Ed25519-Sign( privateKey, timestamp + "." + type + "." +
                payloadBytes ) ), over the exact bytes of `payload` as sent.
              x-parser-schema-id: Signature
          x-parser-schema-id: PlaceOrderFrame
        title: Place_order
        description: Buys or sells shares. Signed.
        example: |-
          {
            "type": "place_order",
            "requestId": "7a02c4e158b34f9da0e23c6b1d7f8e45",
            "timestamp": 1787900123,
            "payload": {
              "side": "B",
              "symbol": "AAPL",
              "quantity": "10",
              "orderType": "LIMIT",
              "limitPrice": "150.0000",
              "externalRef": "ref-2026-08-28-0001"
            },
            "signature": "9Pq2…"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: place_order
    bindings: []
    extensions: &ref_1
      - id: x-parser-unique-object-id
        value: orders
  - &ref_9
    id: getSymbols
    title: List symbols
    description: The symbols you can trade, and the chains each one can be bought on.
    type: receive
    messages:
      - &ref_19
        id: get_symbols
        payload:
          - name: get_symbols
            description: >-
              Lists the symbols you can trade, and the chains each one can be
              bought on.
            type: object
            properties:
              - name: type
                type: string
                description: get_symbols
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
          properties:
            type:
              type: string
              const: get_symbols
              x-parser-schema-id: <anonymous-schema-128>
            requestId: *ref_0
          x-parser-schema-id: GetSymbolsFrame
        title: Get_symbols
        description: >-
          Lists the symbols you can trade, and the chains each one can be bought
          on.
        example: |-
          {
            "type": "get_symbols",
            "requestId": "5e21d9a03c7b4f68a1e40b9c2d7f3a16"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_symbols
    bindings: []
    extensions: *ref_1
  - &ref_10
    id: getRedemptionAddress
    title: Get the redemption wallet
    description: Where to send a CET's tokens before selling the shares they stand for.
    type: receive
    messages:
      - &ref_20
        id: get_redemption_address
        payload:
          - name: get_redemption_address
            description: >-
              The redemption wallet of one CET, where its tokens go before you
              sell the shares they stand for.
            type: object
            properties:
              - name: type
                type: string
                description: get_redemption_address
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: payload
                type: object
                required: true
                properties:
                  - name: symbol
                    type: string
                    description: The share's symbol, as `get_symbols` lists it.
                    required: true
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it. Required
                      even for a symbol on a single chain, so the address always
                      belongs to the chain you send the tokens on. Solana is
                      `101` (`901` on devnet); an EVM chain uses its own chain
                      id.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - payload
          properties:
            type:
              type: string
              const: get_redemption_address
              x-parser-schema-id: <anonymous-schema-140>
            requestId: *ref_0
            payload:
              type: object
              required:
                - symbol
                - chainId
              properties:
                symbol:
                  type: string
                  description: The share's symbol, as `get_symbols` lists it.
                  x-parser-schema-id: <anonymous-schema-142>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it. Required
                    even for a symbol on a single chain, so the address always
                    belongs to the chain you send the tokens on. Solana is `101`
                    (`901` on devnet); an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-143>
              x-parser-schema-id: <anonymous-schema-141>
          x-parser-schema-id: GetRedemptionAddressFrame
        title: Get_redemption_address
        description: >-
          The redemption wallet of one CET, where its tokens go before you sell
          the shares they stand for.
        example: |-
          {
            "type": "get_redemption_address",
            "requestId": "8d3f1a6b2c9e4f07b5a1d2e3c4f5a6b7",
            "payload": {
              "symbol": "AAPL",
              "chainId": 196
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_address
    bindings: []
    extensions: *ref_1
  - &ref_11
    id: getRedemptionBalance
    title: Get your redemption balance
    description: >-
      How many of the CETs you sent to a redemption wallet you can still sell
      against.
    type: receive
    messages:
      - &ref_21
        id: get_redemption_balance
        payload:
          - name: get_redemption_balance
            description: >-
              Your own balance in one CET's redemption wallet, which your sells
              of that CET are checked against.
            type: object
            properties:
              - name: type
                type: string
                description: get_redemption_balance
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: payload
                type: object
                required: true
                properties:
                  - name: symbol
                    type: string
                    description: The share's symbol, as `get_symbols` lists it.
                    required: true
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it. Required
                      even for a symbol on a single chain, since each chain has
                      its own redemption wallet. Solana is `101` (`901` on
                      devnet); an EVM chain uses its own chain id.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - payload
          properties:
            type:
              type: string
              const: get_redemption_balance
              x-parser-schema-id: <anonymous-schema-151>
            requestId: *ref_0
            payload:
              type: object
              required:
                - symbol
                - chainId
              properties:
                symbol:
                  type: string
                  description: The share's symbol, as `get_symbols` lists it.
                  x-parser-schema-id: <anonymous-schema-153>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it. Required
                    even for a symbol on a single chain, since each chain has
                    its own redemption wallet. Solana is `101` (`901` on
                    devnet); an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-154>
              x-parser-schema-id: <anonymous-schema-152>
          x-parser-schema-id: GetRedemptionBalanceFrame
        title: Get_redemption_balance
        description: >-
          Your own balance in one CET's redemption wallet, which your sells of
          that CET are checked against.
        example: |-
          {
            "type": "get_redemption_balance",
            "requestId": "4b8e2d7f1a3c4e5f9a0b1c2d3e4f5a6b",
            "payload": {
              "symbol": "AAPL",
              "chainId": 196
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_balance
    bindings: []
    extensions: *ref_1
  - &ref_12
    id: getRedemptionBalances
    title: Get all your redemption balances
    description: Your redemption balance in every CET you can trade, in one read.
    type: receive
    messages:
      - &ref_22
        id: get_redemption_balances
        payload:
          - name: get_redemption_balances
            description: >-
              Your own balance in the redemption wallet of every CET you can
              trade, in one read.
            type: object
            properties:
              - name: type
                type: string
                description: get_redemption_balances
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: payload
                type: object
                description: >-
                  Both fields are optional and combine. With neither, or no
                  payload, every CET you can trade is answered.
                required: false
                properties:
                  - name: symbol
                    type: string
                    description: Only this symbol, as `get_symbols` lists it.
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      Only CETs on this chain, as `get_symbols` lists it. Solana
                      is `101` (`901` on devnet); an EVM chain uses its own
                      chain id.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
          properties:
            type:
              type: string
              const: get_redemption_balances
              x-parser-schema-id: <anonymous-schema-163>
            requestId: *ref_0
            payload:
              type: object
              description: >-
                Both fields are optional and combine. With neither, or no
                payload, every CET you can trade is answered.
              properties:
                symbol:
                  type: string
                  description: Only this symbol, as `get_symbols` lists it.
                  x-parser-schema-id: <anonymous-schema-165>
                chainId:
                  type: integer
                  description: >-
                    Only CETs on this chain, as `get_symbols` lists it. Solana
                    is `101` (`901` on devnet); an EVM chain uses its own chain
                    id.
                  x-parser-schema-id: <anonymous-schema-166>
              x-parser-schema-id: <anonymous-schema-164>
          x-parser-schema-id: GetRedemptionBalancesFrame
        title: Get_redemption_balances
        description: >-
          Your own balance in the redemption wallet of every CET you can trade,
          in one read.
        example: |-
          {
            "type": "get_redemption_balances",
            "requestId": "6c1f3a9d2e7b4c58a0d1e2f3a4b5c6d7"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_balances
    bindings: []
    extensions: *ref_1
  - &ref_13
    id: cancelOrder
    title: Cancel an order
    description: Request a cancellation; the outcome arrives as order_updated.
    type: receive
    messages:
      - &ref_23
        id: cancel_order
        payload:
          - name: cancel_order
            description: Requests a cancellation. Signed.
            type: object
            properties:
              - name: type
                type: string
                description: cancel_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: timestamp
                type: integer
                description: >-
                  Unix seconds when you signed the message. Must be within 30
                  seconds of the server clock.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: orderId
                    type: string
                    description: >-
                      The order to cancel. Letters, digits, `.`, `_` and `-`, at
                      most 64 characters.
                    required: true
              - name: signature
                type: string
                description: >-
                  base58( Ed25519-Sign( privateKey, timestamp + "." + type + "."
                  + payloadBytes ) ), over the exact bytes of `payload` as sent.
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - timestamp
            - payload
            - signature
          properties:
            type:
              type: string
              const: cancel_order
              x-parser-schema-id: <anonymous-schema-39>
            requestId: *ref_0
            timestamp: *ref_2
            payload:
              type: object
              required:
                - orderId
              properties:
                orderId:
                  type: string
                  pattern: ^(?=.*[A-Za-z0-9])[A-Za-z0-9._-]{1,64}$
                  description: >-
                    The order to cancel. Letters, digits, `.`, `_` and `-`, at
                    most 64 characters.
                  x-parser-schema-id: <anonymous-schema-41>
              x-parser-schema-id: <anonymous-schema-40>
            signature: *ref_3
          x-parser-schema-id: CancelOrderFrame
        title: Cancel_order
        description: Requests a cancellation. Signed.
        example: |-
          {
            "type": "cancel_order",
            "requestId": "b19f3a7c6e2d4f81a5b09c4e7d1f2a38",
            "timestamp": 1787900140,
            "payload": {
              "orderId": "3396877"
            },
            "signature": "Lm4x…"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: cancel_order
    bindings: []
    extensions: *ref_1
  - &ref_14
    id: getOrder
    title: Look up an order
    description: Where an order stands, by orderId or by your externalRef.
    type: receive
    messages:
      - &ref_24
        id: get_order
        payload:
          - name: get_order
            description: Reads where an order stands, by orderId or by externalRef.
            type: object
            properties:
              - name: type
                type: string
                description: get_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: payload
                type: object
                required: true
                properties:
                  - name: orderId
                    type: string
                    description: >-
                      Securitize's id for the order. Exactly one of `orderId` or
                      `externalRef`.
                    required: false
                  - name: externalRef
                    type: string
                    description: >-
                      Your reference, exactly as you sent it to `place_order`.
                      Exactly one of `orderId` or `externalRef`. At most 47
                      characters, more than `place_order` accepts, so an order
                      that carries a longer reference is still found.
                    required: false
                  - name: include
                    type: array
                    description: >-
                      `fills` adds the individual executions. They are absent
                      unless asked for, and an empty list means you asked and
                      nothing has executed yet. `mints` and `burns` are accepted
                      and change nothing: every answer carries both.
                    required: false
                    properties:
                      - name: item
                        type: string
                        enumValues:
                          - fills
                          - mints
                          - burns
                        required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - payload
          properties:
            type:
              type: string
              const: get_order
              x-parser-schema-id: <anonymous-schema-48>
            requestId: *ref_0
            payload:
              type: object
              properties:
                orderId:
                  type: string
                  pattern: ^(?=.*[A-Za-z0-9])[A-Za-z0-9._-]{1,64}$
                  description: >-
                    Securitize's id for the order. Exactly one of `orderId` or
                    `externalRef`.
                  x-parser-schema-id: <anonymous-schema-50>
                externalRef:
                  type: string
                  pattern: ^[A-Za-z0-9._-]{1,47}$
                  description: >-
                    Your reference, exactly as you sent it to `place_order`.
                    Exactly one of `orderId` or `externalRef`. At most 47
                    characters, more than `place_order` accepts, so an order
                    that carries a longer reference is still found.
                  x-parser-schema-id: <anonymous-schema-51>
                include:
                  type: array
                  maxItems: 3
                  description: >-
                    `fills` adds the individual executions. They are absent
                    unless asked for, and an empty list means you asked and
                    nothing has executed yet. `mints` and `burns` are accepted
                    and change nothing: every answer carries both.
                  items:
                    type: string
                    enum:
                      - fills
                      - mints
                      - burns
                    x-parser-schema-id: <anonymous-schema-53>
                  x-parser-schema-id: <anonymous-schema-52>
              x-parser-schema-id: <anonymous-schema-49>
          x-parser-schema-id: GetOrderFrame
        title: Get_order
        description: Reads where an order stands, by orderId or by externalRef.
        example: |-
          {
            "type": "get_order",
            "requestId": "e4404b2d7c9a4e158f3b1a6d0c5e9b72",
            "payload": {
              "orderId": "3396877"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_order
    bindings: []
    extensions: *ref_1
  - &ref_15
    id: orderReplies
    title: Order replies
    description: What the server answers to order messages.
    type: send
    messages:
      - &ref_25
        id: place_order_ack
        payload:
          - name: ack (place_order)
            description: The order was taken, refused, or never acknowledged. Not a fill.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: place_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: orderId
                    type: string
                    description: >-
                      Securitize's id for the order; every other order message
                      takes it. Absent on `UNKNOWN`.
                    required: false
                  - name: regulatoryId
                    type: string
                    description: >-
                      The broker's id for the order, used in regulatory (CAT)
                      reporting and on every mint, burn and trade. Record it
                      now.
                    required: false
                  - name: tokenAddress
                    type: string
                    description: >-
                      The on-chain address of the CET the symbol is tracked as
                      on your account. Absent for a symbol not tracked there, or
                      when it could not be looked up.
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it; present
                      only with `tokenAddress`. Solana is `101` (`901` on
                      devnet); an EVM chain uses its own chain id.
                    required: false
                  - name: externalRef
                    type: string
                    description: Your reference, as you sent it.
                    required: true
                  - name: status
                    type: string
                    enumValues:
                      - ACCEPTED
                      - REJECTED
                      - UNKNOWN
                    required: true
                  - name: message
                    type: string
                    description: >-
                      On `REJECTED` or `UNKNOWN`, a short reason: that the
                      broker refused the order, or that it never acknowledged
                      it.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-29>
            for:
              type: string
              const: place_order
              x-parser-schema-id: <anonymous-schema-30>
            requestId: *ref_0
            traceId: &ref_4
              type: string
              description: >-
                The server's id for this exchange. Opaque; quote it when you
                contact Securitize. Not the `traceId` on a mint or a burn.
              x-parser-schema-id: TraceId
            sentAt: &ref_5
              type: string
              format: date-time
              description: >-
                When the server put the message on the wire. ISO 8601, UTC,
                milliseconds. Not when anything happened at the broker.
              x-parser-schema-id: SentAt
            payload:
              type: object
              required:
                - externalRef
                - status
              properties:
                orderId:
                  type: string
                  description: >-
                    Securitize's id for the order; every other order message
                    takes it. Absent on `UNKNOWN`.
                  x-parser-schema-id: <anonymous-schema-32>
                regulatoryId:
                  type: string
                  description: >-
                    The broker's id for the order, used in regulatory (CAT)
                    reporting and on every mint, burn and trade. Record it now.
                  x-parser-schema-id: <anonymous-schema-33>
                tokenAddress:
                  type: string
                  description: >-
                    The on-chain address of the CET the symbol is tracked as on
                    your account. Absent for a symbol not tracked there, or when
                    it could not be looked up.
                  x-parser-schema-id: <anonymous-schema-34>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it; present
                    only with `tokenAddress`. Solana is `101` (`901` on devnet);
                    an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-35>
                externalRef:
                  type: string
                  description: Your reference, as you sent it.
                  x-parser-schema-id: <anonymous-schema-36>
                status:
                  type: string
                  enum:
                    - ACCEPTED
                    - REJECTED
                    - UNKNOWN
                  x-parser-schema-id: <anonymous-schema-37>
                message:
                  type: string
                  description: >-
                    On `REJECTED` or `UNKNOWN`, a short reason: that the broker
                    refused the order, or that it never acknowledged it.
                  x-parser-schema-id: <anonymous-schema-38>
              x-parser-schema-id: <anonymous-schema-31>
          x-parser-schema-id: PlaceOrderAckFrame
        title: ack (place_order)
        description: The order was taken, refused, or never acknowledged. Not a fill.
        example: |-
          {
            "type": "ack",
            "for": "place_order",
            "requestId": "7a02c4e158b34f9da0e23c6b1d7f8e45",
            "traceId": "partners-rt-gw-4d81e0a7-2c6f-4b19-9e3a-8f5d1c7b0a62",
            "sentAt": "2026-08-28T15:29:47.012Z",
            "payload": {
              "orderId": "3396877",
              "regulatoryId": "ec6c1265-8dc2-4bca-8f67-2e6206e3f39b",
              "externalRef": "ref-2026-08-28-0001",
              "tokenAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
              "chainId": 101,
              "status": "ACCEPTED"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: place_order_ack
      - &ref_26
        id: get_symbols_ack
        payload:
          - name: ack (get_symbols)
            description: >-
              One entry per symbol, sorted by symbol, each with its chains
              sorted by chainId.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: get_symbols
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: symbols
                    type: array
                    description: >-
                      Only what you can buy now. A symbol switched off for your
                      account is not listed. An empty list means there is
                      nothing you can trade yet.
                    required: true
                    properties:
                      - name: symbol
                        type: string
                        description: The value `place_order` takes as `symbol`.
                        required: true
                      - name: chains
                        type: array
                        required: true
                        properties:
                          - name: chainId
                            type: integer
                            description: >-
                              The value `place_order` takes as `chainId`. Solana
                              is `101` (`901` on devnet); an EVM chain uses its
                              own chain id.
                            required: true
                          - name: tokenAddress
                            type: string
                            description: >-
                              The CET's address on that chain. Absent while it
                              is not yet known.
                            required: false
                          - name: isin
                            type: string
                            description: >-
                              The ISIN of the security behind the CET on that
                              chain. Absent when it is not set for that CET, or
                              could not be read at the moment.
                            required: false
                          - name: cusip
                            type: string
                            description: >-
                              The CUSIP of the security behind the CET on that
                              chain. Absent when it is not set for that CET, or
                              could not be read at the moment.
                            required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-129>
            for:
              type: string
              const: get_symbols
              x-parser-schema-id: <anonymous-schema-130>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - symbols
              properties:
                symbols:
                  type: array
                  description: >-
                    Only what you can buy now. A symbol switched off for your
                    account is not listed. An empty list means there is nothing
                    you can trade yet.
                  items:
                    type: object
                    required:
                      - symbol
                      - chains
                    properties:
                      symbol:
                        type: string
                        description: The value `place_order` takes as `symbol`.
                        x-parser-schema-id: <anonymous-schema-133>
                      chains:
                        type: array
                        items:
                          type: object
                          required:
                            - chainId
                          properties:
                            chainId:
                              type: integer
                              description: >-
                                The value `place_order` takes as `chainId`.
                                Solana is `101` (`901` on devnet); an EVM chain
                                uses its own chain id.
                              x-parser-schema-id: <anonymous-schema-136>
                            tokenAddress:
                              type: string
                              description: >-
                                The CET's address on that chain. Absent while it
                                is not yet known.
                              x-parser-schema-id: <anonymous-schema-137>
                            isin:
                              type: string
                              description: >-
                                The ISIN of the security behind the CET on that
                                chain. Absent when it is not set for that CET,
                                or could not be read at the moment.
                              x-parser-schema-id: <anonymous-schema-138>
                            cusip:
                              type: string
                              description: >-
                                The CUSIP of the security behind the CET on that
                                chain. Absent when it is not set for that CET,
                                or could not be read at the moment.
                              x-parser-schema-id: <anonymous-schema-139>
                          x-parser-schema-id: <anonymous-schema-135>
                        x-parser-schema-id: <anonymous-schema-134>
                    x-parser-schema-id: Symbol
                  x-parser-schema-id: <anonymous-schema-132>
              x-parser-schema-id: <anonymous-schema-131>
          x-parser-schema-id: GetSymbolsAckFrame
        title: ack (get_symbols)
        description: >-
          One entry per symbol, sorted by symbol, each with its chains sorted by
          chainId.
        example: |-
          {
            "type": "ack",
            "for": "get_symbols",
            "requestId": "5e21d9a03c7b4f68a1e40b9c2d7f3a16",
            "traceId": "partners-rt-gw-3c8e1f52-7a4d-4b90-9e26-1d5f0b7c8a43",
            "sentAt": "2026-10-19T13:04:12.318Z",
            "payload": {
              "symbols": [
                {
                  "symbol": "AAPL",
                  "chains": [
                    {
                      "chainId": 101,
                      "tokenAddress": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
                      "isin": "US0378331005",
                      "cusip": "037833100"
                    },
                    {
                      "chainId": 196,
                      "tokenAddress": "0x1111111111111111111111111111111111111111",
                      "isin": "US0378331005",
                      "cusip": "037833100"
                    }
                  ]
                },
                {
                  "symbol": "MSFT",
                  "chains": [
                    {
                      "chainId": 101
                    }
                  ]
                }
              ]
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_symbols_ack
      - &ref_27
        id: get_redemption_address_ack
        payload:
          - name: ack (get_redemption_address)
            description: The CET's token address and its redemption wallet on that chain.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: get_redemption_address
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: symbol
                    type: string
                    required: true
                  - name: chainId
                    type: integer
                    required: true
                  - name: tokenAddress
                    type: string
                    description: >-
                      The CET's address on that chain. Check that the tokens you
                      send are this CET.
                    required: true
                  - name: redemptionAddress
                    type: string
                    description: >-
                      The wallet to send the CETs to before you place the sell.
                      Every burn for this CET comes out of it.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-144>
            for:
              type: string
              const: get_redemption_address
              x-parser-schema-id: <anonymous-schema-145>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - symbol
                - chainId
                - tokenAddress
                - redemptionAddress
              properties:
                symbol:
                  type: string
                  x-parser-schema-id: <anonymous-schema-147>
                chainId:
                  type: integer
                  x-parser-schema-id: <anonymous-schema-148>
                tokenAddress:
                  type: string
                  description: >-
                    The CET's address on that chain. Check that the tokens you
                    send are this CET.
                  x-parser-schema-id: <anonymous-schema-149>
                redemptionAddress:
                  type: string
                  description: >-
                    The wallet to send the CETs to before you place the sell.
                    Every burn for this CET comes out of it.
                  x-parser-schema-id: <anonymous-schema-150>
              x-parser-schema-id: <anonymous-schema-146>
          x-parser-schema-id: GetRedemptionAddressAckFrame
        title: ack (get_redemption_address)
        description: The CET's token address and its redemption wallet on that chain.
        example: |-
          {
            "type": "ack",
            "for": "get_redemption_address",
            "requestId": "8d3f1a6b2c9e4f07b5a1d2e3c4f5a6b7",
            "traceId": "partners-rt-gw-6a1d4e8b-2f7c-4b39-a0e5-9c3d1b7f2e64",
            "sentAt": "2026-10-21T16:20:05.411Z",
            "payload": {
              "symbol": "AAPL",
              "chainId": 196,
              "tokenAddress": "0x1111111111111111111111111111111111111111",
              "redemptionAddress": "0x2222222222222222222222222222222222222222"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_address_ack
      - &ref_28
        id: get_redemption_balance_ack
        payload:
          - name: ack (get_redemption_balance)
            description: >-
              What you sent to the CET's redemption wallet, what of it is burned
              or spoken for, and what you can still sell.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: get_redemption_balance
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                description: >-
                  Every figure is a whole number of CETs, one per share, as a
                  decimal string, and `available` = `deposited` − `burned` −
                  `reserved`, never below zero.
                required: true
                properties:
                  - name: symbol
                    type: string
                    required: true
                  - name: chainId
                    type: integer
                    required: true
                  - name: deposited
                    type: string
                    description: >-
                      Every transfer you made to the redemption wallet that
                      Securitize has credited to you. A transfer counts once it
                      is confirmed on chain and recorded.
                    required: true
                  - name: burned
                    type: string
                    description: What of it has been burned against your sells.
                    required: true
                  - name: reserved
                    type: string
                    description: >-
                      What of it your sells hold and has not been burned yet. A
                      working sell holds its full quantity; a filled one holds
                      what it sold until the burn; a cancelled or expired one
                      holds only what it sold.
                    required: true
                  - name: available
                    type: string
                    description: >-
                      What a new sell of this CET may ask for. A sell for more
                      answers `INVALID_ORDER`.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-155>
            for:
              type: string
              const: get_redemption_balance
              x-parser-schema-id: <anonymous-schema-156>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload: &ref_6
              type: object
              required:
                - symbol
                - chainId
                - deposited
                - burned
                - reserved
                - available
              description: >-
                Every figure is a whole number of CETs, one per share, as a
                decimal string, and `available` = `deposited` − `burned` −
                `reserved`, never below zero.
              properties:
                symbol:
                  type: string
                  x-parser-schema-id: <anonymous-schema-157>
                chainId:
                  type: integer
                  x-parser-schema-id: <anonymous-schema-158>
                deposited:
                  type: string
                  description: >-
                    Every transfer you made to the redemption wallet that
                    Securitize has credited to you. A transfer counts once it is
                    confirmed on chain and recorded.
                  x-parser-schema-id: <anonymous-schema-159>
                burned:
                  type: string
                  description: What of it has been burned against your sells.
                  x-parser-schema-id: <anonymous-schema-160>
                reserved:
                  type: string
                  description: >-
                    What of it your sells hold and has not been burned yet. A
                    working sell holds its full quantity; a filled one holds
                    what it sold until the burn; a cancelled or expired one
                    holds only what it sold.
                  x-parser-schema-id: <anonymous-schema-161>
                available:
                  type: string
                  description: >-
                    What a new sell of this CET may ask for. A sell for more
                    answers `INVALID_ORDER`.
                  x-parser-schema-id: <anonymous-schema-162>
              x-parser-schema-id: RedemptionBalance
          x-parser-schema-id: GetRedemptionBalanceAckFrame
        title: ack (get_redemption_balance)
        description: >-
          What you sent to the CET's redemption wallet, what of it is burned or
          spoken for, and what you can still sell.
        example: |-
          {
            "type": "ack",
            "for": "get_redemption_balance",
            "requestId": "4b8e2d7f1a3c4e5f9a0b1c2d3e4f5a6b",
            "traceId": "partners-rt-gw-3f9a1c7e-5b2d-4e8a-9c6f-1d2e3f4a5b6c",
            "sentAt": "2026-10-22T14:02:41.207Z",
            "payload": {
              "symbol": "AAPL",
              "chainId": 196,
              "deposited": "250",
              "burned": "100",
              "reserved": "40",
              "available": "110"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_balance_ack
      - &ref_29
        id: get_redemption_balances_ack
        payload:
          - name: ack (get_redemption_balances)
            description: >-
              Your balance in each CET's redemption wallet, sorted by symbol and
              then chain.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: get_redemption_balances
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: balances
                    type: array
                    description: >-
                      One entry per symbol and chain you can trade that matches,
                      sorted by symbol and then `chainId`. Each is what
                      `get_redemption_balance` answers for that symbol and
                      chain. An empty list means nothing matched.
                    required: true
                    properties:
                      - name: symbol
                        type: string
                        required: true
                      - name: chainId
                        type: integer
                        required: true
                      - name: deposited
                        type: string
                        description: >-
                          Every transfer you made to the redemption wallet that
                          Securitize has credited to you. A transfer counts once
                          it is confirmed on chain and recorded.
                        required: true
                      - name: burned
                        type: string
                        description: What of it has been burned against your sells.
                        required: true
                      - name: reserved
                        type: string
                        description: >-
                          What of it your sells hold and has not been burned
                          yet. A working sell holds its full quantity; a filled
                          one holds what it sold until the burn; a cancelled or
                          expired one holds only what it sold.
                        required: true
                      - name: available
                        type: string
                        description: >-
                          What a new sell of this CET may ask for. A sell for
                          more answers `INVALID_ORDER`.
                        required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-167>
            for:
              type: string
              const: get_redemption_balances
              x-parser-schema-id: <anonymous-schema-168>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - balances
              properties:
                balances:
                  type: array
                  description: >-
                    One entry per symbol and chain you can trade that matches,
                    sorted by symbol and then `chainId`. Each is what
                    `get_redemption_balance` answers for that symbol and chain.
                    An empty list means nothing matched.
                  items: *ref_6
                  x-parser-schema-id: <anonymous-schema-170>
              x-parser-schema-id: <anonymous-schema-169>
          x-parser-schema-id: GetRedemptionBalancesAckFrame
        title: ack (get_redemption_balances)
        description: >-
          Your balance in each CET's redemption wallet, sorted by symbol and
          then chain.
        example: |-
          {
            "type": "ack",
            "for": "get_redemption_balances",
            "requestId": "6c1f3a9d2e7b4c58a0d1e2f3a4b5c6d8",
            "traceId": "partners-rt-gw-8e2b4d6f-1a3c-4e5f-9b7d-2c4e6a8b0d1f",
            "sentAt": "2026-10-28T10:15:22.031Z",
            "payload": {
              "balances": [
                {
                  "symbol": "AAPL",
                  "chainId": 196,
                  "deposited": "250",
                  "burned": "100",
                  "reserved": "40",
                  "available": "110"
                },
                {
                  "symbol": "AMZN",
                  "chainId": 196,
                  "deposited": "5",
                  "burned": "5",
                  "reserved": "0",
                  "available": "0"
                }
              ]
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_redemption_balances_ack
      - &ref_30
        id: cancel_order_ack
        payload:
          - name: ack (cancel_order)
            description: >-
              The cancellation request was taken, refused, or never
              acknowledged.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: cancel_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: orderId
                    type: string
                    required: true
                  - name: status
                    type: string
                    enumValues:
                      - PENDING_CANCEL
                      - REJECTED
                      - UNKNOWN
                    required: true
                  - name: message
                    type: string
                    description: >-
                      On `REJECTED` or `UNKNOWN`, a short fixed reason: that the
                      broker refused the cancellation, or that it never
                      acknowledged it. The broker's own words come with the
                      `ORDER_NOT_CANCELLABLE` error.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-42>
            for:
              type: string
              const: cancel_order
              x-parser-schema-id: <anonymous-schema-43>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - orderId
                - status
              properties:
                orderId:
                  type: string
                  x-parser-schema-id: <anonymous-schema-45>
                status:
                  type: string
                  enum:
                    - PENDING_CANCEL
                    - REJECTED
                    - UNKNOWN
                  x-parser-schema-id: <anonymous-schema-46>
                message:
                  type: string
                  description: >-
                    On `REJECTED` or `UNKNOWN`, a short fixed reason: that the
                    broker refused the cancellation, or that it never
                    acknowledged it. The broker's own words come with the
                    `ORDER_NOT_CANCELLABLE` error.
                  x-parser-schema-id: <anonymous-schema-47>
              x-parser-schema-id: <anonymous-schema-44>
          x-parser-schema-id: CancelOrderAckFrame
        title: ack (cancel_order)
        description: The cancellation request was taken, refused, or never acknowledged.
        example: |-
          {
            "type": "ack",
            "for": "cancel_order",
            "requestId": "b19f3a7c6e2d4f81a5b09c4e7d1f2a38",
            "traceId": "partners-rt-gw-b70c2f19-8d4a-4e63-a1f7-5b2c9e0d3f84",
            "sentAt": "2026-08-28T15:29:58.441Z",
            "payload": {
              "orderId": "3396877",
              "status": "PENDING_CANCEL"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: cancel_order_ack
      - &ref_31
        id: get_order_ack
        payload:
          - name: ack (get_order)
            description: The order as it stands, with any extra detail you asked for.
            type: object
            properties:
              - name: type
                type: string
                description: ack
                required: true
              - name: for
                type: string
                description: get_order
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                description: >-
                  An order as it stands. Every quantity is the broker's
                  arithmetic, passed through unchanged.
                required: true
                properties:
                  - name: orderId
                    type: string
                    description: >-
                      Securitize's id for the order; every order message takes
                      it.
                    required: true
                  - name: regulatoryId
                    type: string
                    description: >-
                      The broker's id for the order, used in regulatory (CAT)
                      reporting. Present once the broker has acknowledged the
                      order. For reporting and for joining to trades, mints and
                      burns; not for addressing the order.
                    required: false
                  - name: externalRef
                    type: string
                    description: Your reference, as you sent it.
                    required: false
                  - name: status
                    type: string
                    description: >-
                      One of `WORKING`, `PARTIALLY_FILLED`, `FILLED`,
                      `PENDING_CANCEL`, `CANCELLED`, `REJECTED`, `EXPIRED`,
                      `UNKNOWN`. Treat the list as open: on a value you do not
                      recognise, fall back to the quantities.
                    required: true
                  - name: brokerStatus
                    type: string
                    description: >-
                      The broker's own status code, for support conversations
                      about one order. Branch on `status`.
                    required: true
                  - name: side
                    type: string
                    description: >-
                      `B` (buy) and `S` (sell) are the usual values; other
                      broker codes may appear. Treat one you do not recognise as
                      opaque.
                    required: true
                  - name: symbol
                    type: string
                    required: true
                  - name: tokenAddress
                    type: string
                    description: >-
                      The on-chain address of the CET the symbol is tracked as
                      on your account. Absent for a symbol not tracked there, or
                      when it could not be looked up.
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it; present
                      only with `tokenAddress`. Solana is `101` (`901` on
                      devnet); an EVM chain uses its own chain id.
                    required: false
                  - name: orderType
                    type: string
                    enumValues:
                      - MARKET
                      - LIMIT
                    required: true
                  - name: timeInForce
                    type: string
                    enumValues:
                      - DAY
                      - GTC
                      - IOC
                      - FOK
                    required: true
                  - name: quantity
                    type: string
                    description: >-
                      Shares ordered. On an order placed by `notional`, the
                      broker's figure; on a market notional order, an estimate
                      the fill can settle away from.
                    required: true
                  - name: executedQuantity
                    type: string
                    description: >-
                      Shares executed so far; the sum of the effective
                      executions.
                    required: true
                  - name: leavesQuantity
                    type: string
                    description: >-
                      Shares still working. Zero means nothing is left, and
                      nothing to cancel. The field to make decisions on.
                    required: true
                  - name: limitPrice
                    type: string
                    required: false
                  - name: executedPrice
                    type: string
                    description: Average price across the executions.
                    required: false
                  - name: currency
                    type: string
                    required: false
                  - name: createdAt
                    type: string
                    description: When the broker created the order.
                    required: true
                  - name: message
                    type: string
                    description: On `REJECTED` or `UNKNOWN`, a short reason.
                    required: false
                  - name: fills
                    type: array
                    description: >-
                      With `include: ["fills"]` only. The executions, each with
                      its own quantity, price and time.
                    required: false
                    properties:
                      - name: executionId
                        type: string
                        description: >-
                          The broker's id for the execution. Quote it in a query
                          about it.
                        required: true
                      - name: sequence
                        type: integer
                        description: >-
                          The broker's order of executions within the order.
                          Starts at 2, not 1; nothing is missing.
                        required: true
                      - name: quantity
                        type: string
                        description: Shares in this execution, not the running total.
                        required: true
                      - name: price
                        type: string
                        required: true
                      - name: amount
                        type: string
                        description: The broker's extended amount for the execution.
                        required: true
                      - name: executedAt
                        type: string
                        required: true
                      - name: type
                        type: string
                        description: >-
                          The broker's execution type. `NEW` is an ordinary
                          fill; the list also covers busts and corrections.
                          Branch on `effective`.
                        required: true
                      - name: effective
                        type: boolean
                        description: >-
                          Whether the execution still counts. A busted execution
                          stays in the list with `false`; sum only the effective
                          ones.
                        required: true
                  - name: mints
                    type: array
                    description: >-
                      Every mint the order produced, newest first. On every
                      answer; empty for a sale, and until the first mint lands.
                    required: true
                    properties:
                      - name: regulatoryId
                        type: string
                        description: The order the mint is for.
                        required: true
                      - name: symbol
                        type: string
                        required: true
                      - name: tokenAddress
                        type: string
                        description: >-
                          The on-chain address of the CET the symbol is tracked
                          as on your account. Absent for a symbol not tracked
                          there, or when it could not be looked up.
                        required: false
                      - name: chainId
                        type: integer
                        description: >-
                          The chain of the CET, as `get_symbols` lists it;
                          present only with `tokenAddress`. Solana is `101`
                          (`901` on devnet); an EVM chain uses its own chain id.
                        required: false
                      - name: amount
                        type: string
                        description: >-
                          CETs this mint issued, `executedQty` minus
                          `previousMintedQty`. Sum this, never `executedQty`.
                        required: true
                      - name: executedQty
                        type: string
                        description: >-
                          The order's executed quantity when the mint was
                          decided; a snapshot, not an increment.
                        required: true
                      - name: previousMintedQty
                        type: string
                        description: >-
                          CETs already minted against the order before this
                          mint.
                        required: true
                      - name: memo
                        type: string
                        description: >-
                          The memo of the mint:
                          `<externalRef>:<executedQty>:<traceId>`. Written on
                          the mint transaction on Solana; on an EVM chain the
                          transaction carries no memo, and `txHash` links the
                          two.
                        required: false
                      - name: traceId
                        type: string
                        description: >-
                          The base58 handle after the memo's final colon, at
                          most 16 characters. Store it; `get_mints` takes it.
                          Absent on mints from before the handle existed.
                        required: false
                      - name: txHash
                        type: string
                        description: >-
                          The hash of the mint transaction on its chain;
                          `get_mints` takes it. Known after the mint lands,
                          usually within a minute, so the first `mint_updated`
                          for a mint usually has none and a later one carries
                          it. Absent on mints from before it was recorded.
                        required: false
                      - name: executions
                        type: array
                        description: >-
                          The whole executions this mint paid for, oldest first.
                          Absent when they could not be captured; the mint is
                          still valid.
                        required: false
                        properties:
                          - name: executionId
                            type: string
                            required: true
                          - name: sequence
                            type: integer
                            required: true
                          - name: quantity
                            type: string
                            required: true
                          - name: price
                            type: string
                            required: true
                          - name: executedAt
                            type: string
                            required: true
                      - name: executionsComplete
                        type: boolean
                        description: >-
                          `true`: `executions` is final. `false`: the broker had
                          not posted every execution yet; the list completes as
                          it does. Reconcile on `true` only.
                        required: true
                      - name: occurredAt
                        type: string
                        description: When the fill happened at the broker.
                        required: false
                      - name: mintedAt
                        type: string
                        description: When Securitize decided the mint.
                        required: true
                  - name: burns
                    type: array
                    description: >-
                      Every burn the order produced, newest first. On every
                      answer; empty for a purchase, and until the first burn
                      lands.
                    required: true
                    properties:
                      - name: regulatoryId
                        type: string
                        description: The order the burn is for.
                        required: true
                      - name: symbol
                        type: string
                        required: true
                      - name: tokenAddress
                        type: string
                        description: >-
                          The on-chain address of the CET the symbol is tracked
                          as on your account. Absent for a symbol not tracked
                          there, or when it could not be looked up.
                        required: false
                      - name: chainId
                        type: integer
                        description: >-
                          The chain of the CET, as `get_symbols` lists it;
                          present only with `tokenAddress`. Solana is `101`
                          (`901` on devnet); an EVM chain uses its own chain id.
                        required: false
                      - name: amount
                        type: string
                        description: >-
                          CETs this burn destroyed, `executedQty` minus
                          `previousBurnedQty`. Sum this, never `executedQty`.
                        required: true
                      - name: executedQty
                        type: string
                        description: >-
                          The order's executed quantity when the burn was
                          decided.
                        required: true
                      - name: previousBurnedQty
                        type: string
                        description: >-
                          CETs already burned against the order before this
                          burn.
                        required: true
                      - name: memo
                        type: string
                        description: >-
                          The memo of the burn:
                          `<externalRef>:<executedQty>:<traceId>`. Written on
                          the burn transaction on Solana.
                        required: false
                      - name: traceId
                        type: string
                        description: >-
                          The base58 handle after the memo's final colon, at
                          most 16 characters. Store it; `get_burns` takes it.
                          Absent on burns from before the handle existed.
                        required: false
                      - name: txHash
                        type: string
                        description: >-
                          The hash of the burn transaction on its chain;
                          `get_burns` takes it. Known when the burn lands, so
                          the first `burn_updated` carries it. Absent when none
                          was reported for the burn, and on burns from before it
                          was recorded.
                        required: false
                      - name: executions
                        type: array
                        description: As on a mint.
                        required: false
                        properties:
                          - name: executionId
                            type: string
                            required: true
                          - name: sequence
                            type: integer
                            required: true
                          - name: quantity
                            type: string
                            required: true
                          - name: price
                            type: string
                            required: true
                          - name: executedAt
                            type: string
                            required: true
                      - name: executionsComplete
                        type: boolean
                        description: As on a mint. Reconcile on `true` only.
                        required: true
                      - name: occurredAt
                        type: string
                        required: false
                      - name: burnedAt
                        type: string
                        description: When Securitize decided the burn.
                        required: true
                  - name: fees
                    type: array
                    description: >-
                      The fees charged on the order's trades, one per trade,
                      oldest first. On every answer; empty until the first is
                      charged. A fee is charged when its trade reaches the
                      broker's ledger, after the fill, so the list can grow
                      after the order has filled.
                    required: false
                    properties:
                      - name: transactionNo
                        type: string
                        description: >-
                          The trade the fee is owed on, by the broker's ledger
                          number for it.
                        required: true
                      - name: reference
                        type: string
                        description: The fee transfer's own reference at the broker.
                        required: true
                      - name: amount
                        type: string
                        description: The fee, two decimals.
                        required: true
                      - name: perShare
                        type: string
                        description: The rate per share it was charged at.
                        required: true
                      - name: status
                        type: string
                        description: >-
                          `PENDING`: charged, and not booked by the broker yet;
                          it books about a minute later. `BOOKED`: the transfer
                          is on the ledger. `FAILED`: the transfer was refused
                          or cancelled; the fee is still owed.
                        enumValues:
                          - PENDING
                          - BOOKED
                          - FAILED
                        required: true
                      - name: chargedAt
                        type: string
                        description: When the fee was charged.
                        required: true
                      - name: bookedAt
                        type: string
                        description: >-
                          When the booking was seen. Present only on a `BOOKED`
                          fee.
                        required: false
                  - name: feeTotal
                    type: string
                    description: >-
                      The sum of `fees` whatever their status, two decimals;
                      `0.00` when there are none. What the order is charged,
                      including fees still pending or failed.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - for
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: ack
              x-parser-schema-id: <anonymous-schema-54>
            for:
              type: string
              const: get_order
              x-parser-schema-id: <anonymous-schema-55>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              description: >-
                An order as it stands. Every quantity is the broker's
                arithmetic, passed through unchanged.
              required:
                - orderId
                - status
                - brokerStatus
                - side
                - symbol
                - orderType
                - timeInForce
                - quantity
                - executedQuantity
                - leavesQuantity
                - createdAt
                - mints
                - burns
              properties:
                orderId:
                  type: string
                  description: Securitize's id for the order; every order message takes it.
                  x-parser-schema-id: <anonymous-schema-56>
                regulatoryId:
                  type: string
                  description: >-
                    The broker's id for the order, used in regulatory (CAT)
                    reporting. Present once the broker has acknowledged the
                    order. For reporting and for joining to trades, mints and
                    burns; not for addressing the order.
                  x-parser-schema-id: <anonymous-schema-57>
                externalRef:
                  type: string
                  description: Your reference, as you sent it.
                  x-parser-schema-id: <anonymous-schema-58>
                status:
                  type: string
                  description: >-
                    One of `WORKING`, `PARTIALLY_FILLED`, `FILLED`,
                    `PENDING_CANCEL`, `CANCELLED`, `REJECTED`, `EXPIRED`,
                    `UNKNOWN`. Treat the list as open: on a value you do not
                    recognise, fall back to the quantities.
                  x-parser-schema-id: <anonymous-schema-59>
                brokerStatus:
                  type: string
                  description: >-
                    The broker's own status code, for support conversations
                    about one order. Branch on `status`.
                  x-parser-schema-id: <anonymous-schema-60>
                side:
                  type: string
                  description: >-
                    `B` (buy) and `S` (sell) are the usual values; other broker
                    codes may appear. Treat one you do not recognise as opaque.
                  x-parser-schema-id: <anonymous-schema-61>
                symbol:
                  type: string
                  x-parser-schema-id: <anonymous-schema-62>
                tokenAddress:
                  type: string
                  description: >-
                    The on-chain address of the CET the symbol is tracked as on
                    your account. Absent for a symbol not tracked there, or when
                    it could not be looked up.
                  x-parser-schema-id: <anonymous-schema-63>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it; present
                    only with `tokenAddress`. Solana is `101` (`901` on devnet);
                    an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-64>
                orderType:
                  type: string
                  enum:
                    - MARKET
                    - LIMIT
                  x-parser-schema-id: <anonymous-schema-65>
                timeInForce:
                  type: string
                  enum:
                    - DAY
                    - GTC
                    - IOC
                    - FOK
                  x-parser-schema-id: <anonymous-schema-66>
                quantity:
                  type: string
                  format: decimal
                  description: >-
                    Shares ordered. On an order placed by `notional`, the
                    broker's figure; on a market notional order, an estimate the
                    fill can settle away from.
                  x-parser-schema-id: <anonymous-schema-67>
                executedQuantity:
                  type: string
                  format: decimal
                  description: Shares executed so far; the sum of the effective executions.
                  x-parser-schema-id: <anonymous-schema-68>
                leavesQuantity:
                  type: string
                  format: decimal
                  description: >-
                    Shares still working. Zero means nothing is left, and
                    nothing to cancel. The field to make decisions on.
                  x-parser-schema-id: <anonymous-schema-69>
                limitPrice:
                  type: string
                  format: decimal
                  x-parser-schema-id: <anonymous-schema-70>
                executedPrice:
                  type: string
                  format: decimal
                  description: Average price across the executions.
                  x-parser-schema-id: <anonymous-schema-71>
                currency:
                  type: string
                  x-parser-schema-id: <anonymous-schema-72>
                createdAt:
                  type: string
                  format: date-time
                  description: When the broker created the order.
                  x-parser-schema-id: <anonymous-schema-73>
                message:
                  type: string
                  description: On `REJECTED` or `UNKNOWN`, a short reason.
                  x-parser-schema-id: <anonymous-schema-74>
                fills:
                  type: array
                  description: >-
                    With `include: ["fills"]` only. The executions, each with
                    its own quantity, price and time.
                  items:
                    type: object
                    required:
                      - executionId
                      - sequence
                      - quantity
                      - price
                      - amount
                      - executedAt
                      - type
                      - effective
                    properties:
                      executionId:
                        type: string
                        description: >-
                          The broker's id for the execution. Quote it in a query
                          about it.
                        x-parser-schema-id: <anonymous-schema-76>
                      sequence:
                        type: integer
                        description: >-
                          The broker's order of executions within the order.
                          Starts at 2, not 1; nothing is missing.
                        x-parser-schema-id: <anonymous-schema-77>
                      quantity:
                        type: string
                        format: decimal
                        description: Shares in this execution, not the running total.
                        x-parser-schema-id: <anonymous-schema-78>
                      price:
                        type: string
                        format: decimal
                        x-parser-schema-id: <anonymous-schema-79>
                      amount:
                        type: string
                        format: decimal
                        description: The broker's extended amount for the execution.
                        x-parser-schema-id: <anonymous-schema-80>
                      executedAt:
                        type: string
                        format: date-time
                        x-parser-schema-id: <anonymous-schema-81>
                      type:
                        type: string
                        description: >-
                          The broker's execution type. `NEW` is an ordinary
                          fill; the list also covers busts and corrections.
                          Branch on `effective`.
                        x-parser-schema-id: <anonymous-schema-82>
                      effective:
                        type: boolean
                        description: >-
                          Whether the execution still counts. A busted execution
                          stays in the list with `false`; sum only the effective
                          ones.
                        x-parser-schema-id: <anonymous-schema-83>
                    x-parser-schema-id: Execution
                  x-parser-schema-id: <anonymous-schema-75>
                mints:
                  type: array
                  description: >-
                    Every mint the order produced, newest first. On every
                    answer; empty for a sale, and until the first mint lands.
                  items:
                    type: object
                    description: >-
                      CETs minted on chain to your registered wallet against
                      shares an order bought. One CET per share.
                    required:
                      - regulatoryId
                      - symbol
                      - amount
                      - executedQty
                      - previousMintedQty
                      - executionsComplete
                      - mintedAt
                    properties:
                      regulatoryId:
                        type: string
                        description: The order the mint is for.
                        x-parser-schema-id: <anonymous-schema-85>
                      symbol:
                        type: string
                        x-parser-schema-id: <anonymous-schema-86>
                      tokenAddress:
                        type: string
                        description: >-
                          The on-chain address of the CET the symbol is tracked
                          as on your account. Absent for a symbol not tracked
                          there, or when it could not be looked up.
                        x-parser-schema-id: <anonymous-schema-87>
                      chainId:
                        type: integer
                        description: >-
                          The chain of the CET, as `get_symbols` lists it;
                          present only with `tokenAddress`. Solana is `101`
                          (`901` on devnet); an EVM chain uses its own chain id.
                        x-parser-schema-id: <anonymous-schema-88>
                      amount:
                        type: string
                        format: decimal
                        description: >-
                          CETs this mint issued, `executedQty` minus
                          `previousMintedQty`. Sum this, never `executedQty`.
                        x-parser-schema-id: <anonymous-schema-89>
                      executedQty:
                        type: string
                        format: decimal
                        description: >-
                          The order's executed quantity when the mint was
                          decided; a snapshot, not an increment.
                        x-parser-schema-id: <anonymous-schema-90>
                      previousMintedQty:
                        type: string
                        format: decimal
                        description: >-
                          CETs already minted against the order before this
                          mint.
                        x-parser-schema-id: <anonymous-schema-91>
                      memo:
                        type: string
                        description: >-
                          The memo of the mint:
                          `<externalRef>:<executedQty>:<traceId>`. Written on
                          the mint transaction on Solana; on an EVM chain the
                          transaction carries no memo, and `txHash` links the
                          two.
                        x-parser-schema-id: <anonymous-schema-92>
                      traceId:
                        type: string
                        description: >-
                          The base58 handle after the memo's final colon, at
                          most 16 characters. Store it; `get_mints` takes it.
                          Absent on mints from before the handle existed.
                        x-parser-schema-id: <anonymous-schema-93>
                      txHash:
                        type: string
                        description: >-
                          The hash of the mint transaction on its chain;
                          `get_mints` takes it. Known after the mint lands,
                          usually within a minute, so the first `mint_updated`
                          for a mint usually has none and a later one carries
                          it. Absent on mints from before it was recorded.
                        x-parser-schema-id: <anonymous-schema-94>
                      executions:
                        type: array
                        description: >-
                          The whole executions this mint paid for, oldest first.
                          Absent when they could not be captured; the mint is
                          still valid.
                        items: &ref_7
                          type: object
                          required:
                            - executionId
                            - sequence
                            - quantity
                            - price
                            - executedAt
                          properties:
                            executionId:
                              type: string
                              x-parser-schema-id: <anonymous-schema-96>
                            sequence:
                              type: integer
                              x-parser-schema-id: <anonymous-schema-97>
                            quantity:
                              type: string
                              format: decimal
                              x-parser-schema-id: <anonymous-schema-98>
                            price:
                              type: string
                              format: decimal
                              x-parser-schema-id: <anonymous-schema-99>
                            executedAt:
                              type: string
                              format: date-time
                              x-parser-schema-id: <anonymous-schema-100>
                          x-parser-schema-id: MintExecution
                        x-parser-schema-id: <anonymous-schema-95>
                      executionsComplete:
                        type: boolean
                        description: >-
                          `true`: `executions` is final. `false`: the broker had
                          not posted every execution yet; the list completes as
                          it does. Reconcile on `true` only.
                        x-parser-schema-id: <anonymous-schema-101>
                      occurredAt:
                        type: string
                        format: date-time
                        description: When the fill happened at the broker.
                        x-parser-schema-id: <anonymous-schema-102>
                      mintedAt:
                        type: string
                        format: date-time
                        description: When Securitize decided the mint.
                        x-parser-schema-id: <anonymous-schema-103>
                    x-parser-schema-id: Mint
                  x-parser-schema-id: <anonymous-schema-84>
                burns:
                  type: array
                  description: >-
                    Every burn the order produced, newest first. On every
                    answer; empty for a purchase, and until the first burn
                    lands.
                  items:
                    type: object
                    description: >-
                      CETs burned from the redemption wallet against shares an
                      order sold. One CET per share.
                    required:
                      - regulatoryId
                      - symbol
                      - amount
                      - executedQty
                      - previousBurnedQty
                      - executionsComplete
                      - burnedAt
                    properties:
                      regulatoryId:
                        type: string
                        description: The order the burn is for.
                        x-parser-schema-id: <anonymous-schema-105>
                      symbol:
                        type: string
                        x-parser-schema-id: <anonymous-schema-106>
                      tokenAddress:
                        type: string
                        description: >-
                          The on-chain address of the CET the symbol is tracked
                          as on your account. Absent for a symbol not tracked
                          there, or when it could not be looked up.
                        x-parser-schema-id: <anonymous-schema-107>
                      chainId:
                        type: integer
                        description: >-
                          The chain of the CET, as `get_symbols` lists it;
                          present only with `tokenAddress`. Solana is `101`
                          (`901` on devnet); an EVM chain uses its own chain id.
                        x-parser-schema-id: <anonymous-schema-108>
                      amount:
                        type: string
                        format: decimal
                        description: >-
                          CETs this burn destroyed, `executedQty` minus
                          `previousBurnedQty`. Sum this, never `executedQty`.
                        x-parser-schema-id: <anonymous-schema-109>
                      executedQty:
                        type: string
                        format: decimal
                        description: >-
                          The order's executed quantity when the burn was
                          decided.
                        x-parser-schema-id: <anonymous-schema-110>
                      previousBurnedQty:
                        type: string
                        format: decimal
                        description: >-
                          CETs already burned against the order before this
                          burn.
                        x-parser-schema-id: <anonymous-schema-111>
                      memo:
                        type: string
                        description: >-
                          The memo of the burn:
                          `<externalRef>:<executedQty>:<traceId>`. Written on
                          the burn transaction on Solana.
                        x-parser-schema-id: <anonymous-schema-112>
                      traceId:
                        type: string
                        description: >-
                          The base58 handle after the memo's final colon, at
                          most 16 characters. Store it; `get_burns` takes it.
                          Absent on burns from before the handle existed.
                        x-parser-schema-id: <anonymous-schema-113>
                      txHash:
                        type: string
                        description: >-
                          The hash of the burn transaction on its chain;
                          `get_burns` takes it. Known when the burn lands, so
                          the first `burn_updated` carries it. Absent when none
                          was reported for the burn, and on burns from before it
                          was recorded.
                        x-parser-schema-id: <anonymous-schema-114>
                      executions:
                        type: array
                        description: As on a mint.
                        items: *ref_7
                        x-parser-schema-id: <anonymous-schema-115>
                      executionsComplete:
                        type: boolean
                        description: As on a mint. Reconcile on `true` only.
                        x-parser-schema-id: <anonymous-schema-116>
                      occurredAt:
                        type: string
                        format: date-time
                        x-parser-schema-id: <anonymous-schema-117>
                      burnedAt:
                        type: string
                        format: date-time
                        description: When Securitize decided the burn.
                        x-parser-schema-id: <anonymous-schema-118>
                    x-parser-schema-id: Burn
                  x-parser-schema-id: <anonymous-schema-104>
                fees:
                  type: array
                  description: >-
                    The fees charged on the order's trades, one per trade,
                    oldest first. On every answer; empty until the first is
                    charged. A fee is charged when its trade reaches the
                    broker's ledger, after the fill, so the list can grow after
                    the order has filled.
                  items:
                    type: object
                    description: One fee charged on one of an order's trades.
                    required:
                      - transactionNo
                      - reference
                      - amount
                      - perShare
                      - status
                      - chargedAt
                    properties:
                      transactionNo:
                        type: string
                        description: >-
                          The trade the fee is owed on, by the broker's ledger
                          number for it.
                        x-parser-schema-id: <anonymous-schema-120>
                      reference:
                        type: string
                        description: The fee transfer's own reference at the broker.
                        x-parser-schema-id: <anonymous-schema-121>
                      amount:
                        type: string
                        format: decimal
                        description: The fee, two decimals.
                        x-parser-schema-id: <anonymous-schema-122>
                      perShare:
                        type: string
                        format: decimal
                        description: The rate per share it was charged at.
                        x-parser-schema-id: <anonymous-schema-123>
                      status:
                        type: string
                        enum:
                          - PENDING
                          - BOOKED
                          - FAILED
                        description: >-
                          `PENDING`: charged, and not booked by the broker yet;
                          it books about a minute later. `BOOKED`: the transfer
                          is on the ledger. `FAILED`: the transfer was refused
                          or cancelled; the fee is still owed.
                        x-parser-schema-id: <anonymous-schema-124>
                      chargedAt:
                        type: string
                        format: date-time
                        description: When the fee was charged.
                        x-parser-schema-id: <anonymous-schema-125>
                      bookedAt:
                        type: string
                        format: date-time
                        description: >-
                          When the booking was seen. Present only on a `BOOKED`
                          fee.
                        x-parser-schema-id: <anonymous-schema-126>
                    x-parser-schema-id: OrderFee
                  x-parser-schema-id: <anonymous-schema-119>
                feeTotal:
                  type: string
                  format: decimal
                  description: >-
                    The sum of `fees` whatever their status, two decimals;
                    `0.00` when there are none. What the order is charged,
                    including fees still pending or failed.
                  x-parser-schema-id: <anonymous-schema-127>
              x-parser-schema-id: Order
          x-parser-schema-id: GetOrderAckFrame
        title: ack (get_order)
        description: The order as it stands, with any extra detail you asked for.
        example: |-
          {
            "type": "ack",
            "for": "get_order",
            "requestId": "e4404b2d7c9a4e158f3b1a6d0c5e9b72",
            "traceId": "partners-rt-gw-1a55d3c8-6f0e-4b72-a9d4-3c8e1f5b7a20",
            "sentAt": "2026-08-28T15:31:02.517Z",
            "payload": {
              "orderId": "3396877",
              "regulatoryId": "ec6c1265-8dc2-4bca-8f67-2e6206e3f39b",
              "externalRef": "ref-2026-08-28-0001",
              "status": "PARTIALLY_FILLED",
              "brokerStatus": "PARTIALLY_FILLED",
              "side": "B",
              "symbol": "AAPL",
              "tokenAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
              "chainId": 101,
              "orderType": "LIMIT",
              "timeInForce": "DAY",
              "quantity": "10",
              "executedQuantity": "4",
              "leavesQuantity": "6",
              "limitPrice": "150.25",
              "executedPrice": "150.25",
              "currency": "USD",
              "createdAt": "2026-08-28T15:29:46.936Z",
              "mints": [],
              "burns": [],
              "fees": [
                {
                  "transactionNo": "12874152.000000",
                  "reference": "fee.12874152",
                  "amount": "0.01",
                  "perShare": "0.003",
                  "status": "BOOKED",
                  "chargedAt": "2026-08-28T15:30:03.112Z",
                  "bookedAt": "2026-08-28T15:31:01.529Z"
                }
              ],
              "feeTotal": "0.01"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: get_order_ack
      - &ref_32
        id: error
        payload:
          - name: error
            description: A request was refused. Most errors leave the socket open.
            type: object
            properties:
              - name: type
                type: string
                description: error
                required: true
              - name: requestId
                type: string
                description: >-
                  Your id for this message, echoed on its reply. Never
                  interpreted or checked for uniqueness. Up to 64 characters are
                  accepted, but keep it to 32, since an `error` echoes only the
                  first 32 followed by `…`. A UUID without its hyphens is 32
                  characters.
                required: false
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: code
                    type: string
                    description: >-
                      One of `SIGNATURE_INVALID`, `TIMESTAMP_OUT_OF_WINDOW`,
                      `UNAUTHENTICATED`, `NOT_PERMITTED`, `RATE_LIMITED`,
                      `MALFORMED`, `INVALID_ORDER`, `INVALID_SYMBOL`,
                      `ORDER_NOT_FOUND`, `ORDER_NOT_CANCELLABLE`,
                      `DEPOSIT_PENDING`, `DEPOSIT_REFUSED`,
                      `UPSTREAM_UNAVAILABLE`, `INTERNAL`. Treat a code you do
                      not recognise as a refusal.
                    required: true
                  - name: message
                    type: string
                    description: For people. Can change; never branch on it.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: error
              x-parser-schema-id: <anonymous-schema-14>
            requestId: *ref_0
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - code
                - message
              properties:
                code:
                  type: string
                  description: >-
                    One of `SIGNATURE_INVALID`, `TIMESTAMP_OUT_OF_WINDOW`,
                    `UNAUTHENTICATED`, `NOT_PERMITTED`, `RATE_LIMITED`,
                    `MALFORMED`, `INVALID_ORDER`, `INVALID_SYMBOL`,
                    `ORDER_NOT_FOUND`, `ORDER_NOT_CANCELLABLE`,
                    `DEPOSIT_PENDING`, `DEPOSIT_REFUSED`,
                    `UPSTREAM_UNAVAILABLE`, `INTERNAL`. Treat a code you do not
                    recognise as a refusal.
                  x-parser-schema-id: <anonymous-schema-16>
                message:
                  type: string
                  description: For people. Can change; never branch on it.
                  x-parser-schema-id: <anonymous-schema-17>
              x-parser-schema-id: <anonymous-schema-15>
          x-parser-schema-id: ErrorFrame
        title: Error
        description: A request was refused. Most errors leave the socket open.
        example: |-
          {
            "type": "error",
            "requestId": "7a02c4e158b34f9da0e23c6b1d7f8e45",
            "traceId": "partners-rt-gw-4d81e0a7-2c6f-4b19-9e3a-8f5d1c7b0a62",
            "sentAt": "2026-08-28T15:29:47.012Z",
            "payload": {
              "code": "INVALID_ORDER",
              "message": "The reference ref-2026-08-28-0001 already names an order (FILLED): look it up instead of placing it again"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: error
    bindings: []
    extensions: *ref_1
  - &ref_16
    id: orderUpdated
    title: Order updates
    description: Pushed whenever an order on the account changes.
    type: send
    messages:
      - &ref_33
        id: order_updated
        payload:
          - name: order_updated
            description: Pushed whenever an order on the account changes.
            type: object
            properties:
              - name: type
                type: string
                description: order_updated
                required: true
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                description: >-
                  The order shape without `orderType`, `timeInForce`,
                  `limitPrice`, `fills`, `mints`, `burns`, `fees` and
                  `feeTotal`, plus `occurredAt`.
                required: true
                properties:
                  - name: orderId
                    type: string
                    required: true
                  - name: regulatoryId
                    type: string
                    required: false
                  - name: externalRef
                    type: string
                    required: false
                  - name: status
                    type: string
                    description: As on the order. Treat the list as open.
                    required: true
                  - name: brokerStatus
                    type: string
                    required: true
                  - name: side
                    type: string
                    description: >-
                      `B` (buy) and `S` (sell) are the usual values; other
                      broker codes may appear. Treat one you do not recognise as
                      opaque.
                    required: true
                  - name: symbol
                    type: string
                    required: true
                  - name: tokenAddress
                    type: string
                    description: >-
                      The on-chain address of the CET the symbol is tracked as
                      on your account. Absent for a symbol not tracked there, or
                      when it could not be looked up.
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it; present
                      only with `tokenAddress`. Solana is `101` (`901` on
                      devnet); an EVM chain uses its own chain id.
                    required: false
                  - name: quantity
                    type: string
                    required: true
                  - name: executedQuantity
                    type: string
                    required: true
                  - name: leavesQuantity
                    type: string
                    required: true
                  - name: executedPrice
                    type: string
                    required: false
                  - name: currency
                    type: string
                    required: false
                  - name: createdAt
                    type: string
                    required: true
                  - name: occurredAt
                    type: string
                    description: >-
                      The broker's time for this change. Orders two updates of
                      one order.
                    required: true
                  - name: message
                    type: string
                    description: On `REJECTED` or `UNKNOWN`, a short reason.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: order_updated
              x-parser-schema-id: <anonymous-schema-171>
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              description: >-
                The order shape without `orderType`, `timeInForce`,
                `limitPrice`, `fills`, `mints`, `burns`, `fees` and `feeTotal`,
                plus `occurredAt`.
              required:
                - orderId
                - status
                - brokerStatus
                - side
                - symbol
                - quantity
                - executedQuantity
                - leavesQuantity
                - createdAt
                - occurredAt
              properties:
                orderId:
                  type: string
                  x-parser-schema-id: <anonymous-schema-172>
                regulatoryId:
                  type: string
                  x-parser-schema-id: <anonymous-schema-173>
                externalRef:
                  type: string
                  x-parser-schema-id: <anonymous-schema-174>
                status:
                  type: string
                  description: As on the order. Treat the list as open.
                  x-parser-schema-id: <anonymous-schema-175>
                brokerStatus:
                  type: string
                  x-parser-schema-id: <anonymous-schema-176>
                side:
                  type: string
                  description: >-
                    `B` (buy) and `S` (sell) are the usual values; other broker
                    codes may appear. Treat one you do not recognise as opaque.
                  x-parser-schema-id: <anonymous-schema-177>
                symbol:
                  type: string
                  x-parser-schema-id: <anonymous-schema-178>
                tokenAddress:
                  type: string
                  description: >-
                    The on-chain address of the CET the symbol is tracked as on
                    your account. Absent for a symbol not tracked there, or when
                    it could not be looked up.
                  x-parser-schema-id: <anonymous-schema-179>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it; present
                    only with `tokenAddress`. Solana is `101` (`901` on devnet);
                    an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-180>
                quantity:
                  type: string
                  format: decimal
                  x-parser-schema-id: <anonymous-schema-181>
                executedQuantity:
                  type: string
                  format: decimal
                  x-parser-schema-id: <anonymous-schema-182>
                leavesQuantity:
                  type: string
                  format: decimal
                  x-parser-schema-id: <anonymous-schema-183>
                executedPrice:
                  type: string
                  format: decimal
                  x-parser-schema-id: <anonymous-schema-184>
                currency:
                  type: string
                  x-parser-schema-id: <anonymous-schema-185>
                createdAt:
                  type: string
                  format: date-time
                  x-parser-schema-id: <anonymous-schema-186>
                occurredAt:
                  type: string
                  format: date-time
                  description: >-
                    The broker's time for this change. Orders two updates of one
                    order.
                  x-parser-schema-id: <anonymous-schema-187>
                message:
                  type: string
                  description: On `REJECTED` or `UNKNOWN`, a short reason.
                  x-parser-schema-id: <anonymous-schema-188>
              x-parser-schema-id: OrderUpdate
          x-parser-schema-id: OrderUpdatedFrame
        title: Order_updated
        description: Pushed whenever an order on the account changes.
        example: |-
          {
            "type": "order_updated",
            "traceId": "partners-rt-gw-c3e9a11f-5b2d-4e7a-8f60-9d1c4b3e2a75",
            "sentAt": "2026-09-03T20:29:15.654Z",
            "payload": {
              "orderId": "3402360",
              "regulatoryId": "1a68ac30-3931-4261-a98e-8d0eea53ca20",
              "externalRef": "ref-2026-09-03-0001",
              "status": "FILLED",
              "brokerStatus": "FILLED",
              "side": "B",
              "symbol": "AAPL",
              "tokenAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
              "chainId": 101,
              "quantity": "250",
              "executedQuantity": "250",
              "leavesQuantity": "0.000000",
              "executedPrice": "325.13",
              "currency": "USD",
              "createdAt": "2026-09-03T20:29:13.737Z",
              "occurredAt": "2026-09-03T20:29:15.654Z"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: order_updated
    bindings: []
    extensions: *ref_1
  - &ref_17
    id: tradeUpdated
    title: Trade updates
    description: Pushed once per execution, from the broker's ledger.
    type: send
    messages:
      - &ref_34
        id: trade_updated
        payload:
          - name: trade_updated
            description: Pushed once per execution, from the broker's ledger.
            type: object
            properties:
              - name: type
                type: string
                description: trade_updated
                required: true
              - name: traceId
                type: string
                description: >-
                  The server's id for this exchange. Opaque; quote it when you
                  contact Securitize. Not the `traceId` on a mint or a burn.
                required: true
              - name: sentAt
                type: string
                description: >-
                  When the server put the message on the wire. ISO 8601, UTC,
                  milliseconds. Not when anything happened at the broker.
                required: true
              - name: payload
                type: object
                required: true
                properties:
                  - name: tradeId
                    type: string
                    description: >-
                      The broker's ledger entry number. Deduplicate on it; treat
                      it as an opaque string, not a number or a dense sequence.
                    required: true
                  - name: orderRegulatoryId
                    type: string
                    description: >-
                      The `regulatoryId` of the order behind the execution.
                      Absent when the ledger row carries no order reference.
                    required: false
                  - name: side
                    type: string
                    description: >-
                      `B` (buy) and `S` (sell) are the usual values; other
                      broker codes may appear. Treat one you do not recognise as
                      opaque.
                    required: true
                  - name: symbol
                    type: string
                    required: true
                  - name: tokenAddress
                    type: string
                    description: >-
                      The on-chain address of the CET the symbol is tracked as
                      on your account. Absent for a symbol not tracked there, or
                      when it could not be looked up.
                    required: false
                  - name: chainId
                    type: integer
                    description: >-
                      The chain of the CET, as `get_symbols` lists it; present
                      only with `tokenAddress`. Solana is `101` (`901` on
                      devnet); an EVM chain uses its own chain id.
                    required: false
                  - name: quantity
                    type: string
                    description: >-
                      Shares in this execution, not the running total, signed as
                      the broker's ledger writes it.
                    required: true
                  - name: grossAmount
                    type: string
                    description: >-
                      Before fees, signed as the broker's ledger writes it.
                      `side` says which way the trade went.
                    required: true
                  - name: netAmount
                    type: string
                    description: After fees. Equal to `grossAmount` when none were charged.
                    required: true
                  - name: price
                    type: string
                    description: >-
                      The broker's unit price for the execution, unsigned. Not
                      `grossAmount` divided by `quantity`.
                    required: false
                  - name: currency
                    type: string
                    required: true
                  - name: settled
                    type: boolean
                    description: >-
                      Always `false` on arrival, and never updated by a later
                      push. Use `settleDate`.
                    required: true
                  - name: settleDate
                    type: string
                    description: When the trade settles.
                    required: true
                  - name: brokerStatus
                    type: string
                    description: >-
                      `R` regular, `X` cancelled, `C` correction, `P` pending. A
                      correction arrives as a new frame, not as a change to the
                      first.
                    required: true
                  - name: tradeDate
                    type: string
                    required: true
                  - name: executedAt
                    type: string
                    description: >-
                      When the execution happened. The field to order executions
                      by.
                    required: false
                  - name: occurredAt
                    type: string
                    description: >-
                      When the broker recorded the entry. Not the execution
                      time.
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - type
            - traceId
            - sentAt
            - payload
          properties:
            type:
              type: string
              const: trade_updated
              x-parser-schema-id: <anonymous-schema-189>
            traceId: *ref_4
            sentAt: *ref_5
            payload:
              type: object
              required:
                - tradeId
                - side
                - symbol
                - quantity
                - grossAmount
                - netAmount
                - currency
                - settled
                - settleDate
                - brokerStatus
                - tradeDate
                - occurredAt
              properties:
                tradeId:
                  type: string
                  description: >-
                    The broker's ledger entry number. Deduplicate on it; treat
                    it as an opaque string, not a number or a dense sequence.
                  x-parser-schema-id: <anonymous-schema-190>
                orderRegulatoryId:
                  type: string
                  description: >-
                    The `regulatoryId` of the order behind the execution. Absent
                    when the ledger row carries no order reference.
                  x-parser-schema-id: <anonymous-schema-191>
                side:
                  type: string
                  description: >-
                    `B` (buy) and `S` (sell) are the usual values; other broker
                    codes may appear. Treat one you do not recognise as opaque.
                  x-parser-schema-id: <anonymous-schema-192>
                symbol:
                  type: string
                  x-parser-schema-id: <anonymous-schema-193>
                tokenAddress:
                  type: string
                  description: >-
                    The on-chain address of the CET the symbol is tracked as on
                    your account. Absent for a symbol not tracked there, or when
                    it could not be looked up.
                  x-parser-schema-id: <anonymous-schema-194>
                chainId:
                  type: integer
                  description: >-
                    The chain of the CET, as `get_symbols` lists it; present
                    only with `tokenAddress`. Solana is `101` (`901` on devnet);
                    an EVM chain uses its own chain id.
                  x-parser-schema-id: <anonymous-schema-195>
                quantity:
                  type: string
                  format: decimal
                  description: >-
                    Shares in this execution, not the running total, signed as
                    the broker's ledger writes it.
                  x-parser-schema-id: <anonymous-schema-196>
                grossAmount:
                  type: string
                  format: decimal
                  description: >-
                    Before fees, signed as the broker's ledger writes it. `side`
                    says which way the trade went.
                  x-parser-schema-id: <anonymous-schema-197>
                netAmount:
                  type: string
                  format: decimal
                  description: After fees. Equal to `grossAmount` when none were charged.
                  x-parser-schema-id: <anonymous-schema-198>
                price:
                  type: string
                  format: decimal
                  description: >-
                    The broker's unit price for the execution, unsigned. Not
                    `grossAmount` divided by `quantity`.
                  x-parser-schema-id: <anonymous-schema-199>
                currency:
                  type: string
                  x-parser-schema-id: <anonymous-schema-200>
                settled:
                  type: boolean
                  description: >-
                    Always `false` on arrival, and never updated by a later
                    push. Use `settleDate`.
                  x-parser-schema-id: <anonymous-schema-201>
                settleDate:
                  type: string
                  format: date-time
                  description: When the trade settles.
                  x-parser-schema-id: <anonymous-schema-202>
                brokerStatus:
                  type: string
                  description: >-
                    `R` regular, `X` cancelled, `C` correction, `P` pending. A
                    correction arrives as a new frame, not as a change to the
                    first.
                  x-parser-schema-id: <anonymous-schema-203>
                tradeDate:
                  type: string
                  format: date-time
                  x-parser-schema-id: <anonymous-schema-204>
                executedAt:
                  type: string
                  format: date-time
                  description: >-
                    When the execution happened. The field to order executions
                    by.
                  x-parser-schema-id: <anonymous-schema-205>
                occurredAt:
                  type: string
                  format: date-time
                  description: When the broker recorded the entry. Not the execution time.
                  x-parser-schema-id: <anonymous-schema-206>
              x-parser-schema-id: Trade
          x-parser-schema-id: TradeUpdatedFrame
        title: Trade_updated
        description: Pushed once per execution, from the broker's ledger.
        example: |-
          {
            "type": "trade_updated",
            "traceId": "partners-rt-gw-a3c9b7ee-4d1f-4a82-b6e0-2f8c5d9a1e37",
            "sentAt": "2026-09-03T20:30:01.858Z",
            "payload": {
              "tradeId": "12874158.000000",
              "orderRegulatoryId": "1a68ac30-3931-4261-a98e-8d0eea53ca20",
              "side": "B",
              "symbol": "AAPL",
              "tokenAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
              "chainId": 101,
              "quantity": "50.00000000",
              "grossAmount": "16256.500000",
              "netAmount": "16256.500000",
              "price": "325.13",
              "currency": "USD",
              "settled": false,
              "settleDate": "2026-09-04T04:00:00.000Z",
              "brokerStatus": "R",
              "tradeDate": "2026-09-03T04:00:00.000Z",
              "executedAt": "2026-09-03T20:29:38.487Z",
              "occurredAt": "2026-09-03T20:30:01.529Z"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: trade_updated
    bindings: []
    extensions: *ref_1
sendOperations:
  - *ref_8
  - *ref_9
  - *ref_10
  - *ref_11
  - *ref_12
  - *ref_13
  - *ref_14
receiveOperations:
  - *ref_15
  - *ref_16
  - *ref_17
sendMessages:
  - *ref_18
  - *ref_19
  - *ref_20
  - *ref_21
  - *ref_22
  - *ref_23
  - *ref_24
receiveMessages:
  - *ref_25
  - *ref_26
  - *ref_27
  - *ref_28
  - *ref_29
  - *ref_30
  - *ref_31
  - *ref_32
  - *ref_33
  - *ref_34
extensions:
  - id: x-parser-unique-object-id
    value: orders
securitySchemes:
  - id: ed25519Signature
    name: ed25519Signature
    type: asymmetricEncryption
    description: >
      Each client registers an Ed25519 public key with Securitize beforehand;
      the private key never leaves the client. `hello`, `place_order`,
      `cancel_order`, `submit_crypto_funding`, `sandbox_deposit` and
      `sandbox_withdraw` carry `timestamp` (Unix seconds) and `signature` =
      base58( Ed25519-Sign( privateKey, timestamp + "." + type + "." +
      payloadBytes ) ), where `payloadBytes` are the exact bytes of `payload` as
      sent on the wire. The timestamp must be within 30 seconds of the server
      clock. Other messages ride on the session `hello` opens.
    extensions: []

````

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