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

# Reject a signing request with a machine stamp

> Submits a machine (api-key) stamp rejecting the payout or wallet setup. Built, verified and relayed exactly like an approval — same envelope, and the same rule that the envelope's `SIGNATURE_SCHEME_TK_API_*` value must be the scheme this signer is enrolled with — with `ACTIVITY_TYPE_REJECT_ACTIVITY` as the activity type. A rejection follows the signing provider's consensus semantics. Idempotent: a (re)submission against an already-resolved request returns its current state. Send an `Idempotency-Key` header (required on this money-moving route). See [Programmatic payout signing](/guides/machine-signer-stamping).



## OpenAPI

````yaml https://api.sandbox.conduit.financial/v2/api-docs/openapi.json post /signing-requests/{id}/reject
openapi: 3.0.0
info:
  title: Conduit Sandbox API
  description: >-
    **Sandbox API** — clients integrate against this surface to exercise happy
    and unhappy paths without consuming real KYC/PSP credits or moving real
    money. Customer KYC, banking partners, and crypto custody are stubbed;
    org-level KYB runs against real providers. Simulation endpoints under
    `/v2/sandbox/*` drive specific scenarios.


    Internal and portal endpoints are excluded from this spec.
  version: '2.0'
  contact: {}
servers:
  - url: https://api.sandbox.conduit.financial/v2
    description: Sandbox
  - url: https://api.conduit.financial/v2
    description: Production
security:
  - api-key: []
tags:
  - name: Customers
  - name: Registered Addresses
  - name: Wallets
  - name: Wallet Signers
  - name: Signing Quorum
  - name: Virtual Accounts
  - name: Applications
  - name: RFIs
  - name: Documents
  - name: Verifications
  - name: Signing Requests
  - name: Transactions
  - name: Payouts
  - name: Whitelist Recipients
  - name: Orders
  - name: Asset Chain Pairs
  - name: Quotes
  - name: Webhook Endpoints
  - name: Webhook Deliveries
  - name: Webhook Event Types
  - name: Features
  - name: Customer Onboarding
  - name: Markup
  - name: Sandbox
paths:
  /signing-requests/{id}/reject:
    post:
      tags:
        - Signing Requests
      summary: Reject a signing request with a machine stamp
      description: >-
        Submits a machine (api-key) stamp rejecting the payout or wallet setup.
        Built, verified and relayed exactly like an approval — same envelope,
        and the same rule that the envelope's `SIGNATURE_SCHEME_TK_API_*` value
        must be the scheme this signer is enrolled with — with
        `ACTIVITY_TYPE_REJECT_ACTIVITY` as the activity type. A rejection
        follows the signing provider's consensus semantics. Idempotent: a
        (re)submission against an already-resolved request returns its current
        state. Send an `Idempotency-Key` header (required on this money-moving
        route). See [Programmatic payout
        signing](/guides/machine-signer-stamping).
      operationId: SigningRequestsController_reject_v2
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
            example: vrf_1A2b3C4d5E6f7G8h9I0jKl
        - name: Idempotency-Key
          in: header
          description: >-
            Caller-generated unique key that lets the server safely replay this
            request. The original response is returned for 30 days on any retry
            with the same key from the same organization, with the response
            header `Idempotency-Replayed: true`. Required on every
            state-changing money-moving or resource-creating POST.
          required: true
          schema:
            type: string
            pattern: ^[A-Za-z0-9_.:-]{1,128}$
            minLength: 1
            maxLength: 128
            example: 01J7B3K2X9M8N5P6Q7R8S9T0V1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitSigningStampBodyDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PayoutSigningRequestResponseDto'
                  - $ref: '#/components/schemas/WalletSetupSigningRequestResponseDto'
                discriminator:
                  propertyName: kind
        '400':
          description: >-
            **INVALID_OID_FORMAT**: A path or query parameter expected a valid
            object identifier but received a value that does not match the
            expected format.


            **VALIDATION_ERROR**: The request body or query parameters failed
            validation. One or more fields have invalid values, missing required
            properties, or incorrect types. A required text field that holds
            only spaces counts as missing. Multipart file uploads that fail at
            the multipart-parser layer (unexpected form-field name, too many
            parts) carry an extra 'field' member naming the offending
            form-field.


            **MALFORMED_JSON**: The request body could not be parsed as JSON.
            Bodies declared as 'application/json' — and bodies with no
            Content-Type header, which are assumed to be JSON — must contain
            syntactically valid JSON.


            **IDEMPOTENCY_KEY_REQUIRED**: This endpoint requires an
            Idempotency-Key header to prevent duplicate processing. Generate a
            unique key per logical request and resend the request.


            **IDEMPOTENCY_KEY_INVALID**: The Idempotency-Key header value did
            not match the required shape (1-128 characters, letters / digits /
            underscore / dot / colon / hyphen).


            **IDEMPOTENCY_BODY_TOO_NESTED**: The request body exceeds the
            maximum nesting depth allowed by the idempotency fingerprint hasher.
            Deeply-nested arrays or objects are rejected as a malformed payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorDto'
              example:
                type: INVALID_OID_FORMAT
                title: Invalid Object ID Format
                status: 400
                detail: >-
                  A path or query parameter expected a valid object identifier
                  but received a value that does not match the expected format.
                resolution: >-
                  Verify that all IDs in the request URL and query parameters
                  are correctly formatted. IDs are typically prefixed strings
                  like 'cus_...', 'app_...', or 'doc_...'.
                docs: https://conduit-v2.mintlify.app/errors#invalid-oid-format
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '401':
          description: >-
            **API_KEY_MISSING**: The request did not include an API key. All API
            requests must be authenticated.


            **API_KEY_INVALID**: The provided API key is not recognized or has
            been revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: API_KEY_MISSING
                title: API Key Missing
                status: 401
                detail: >-
                  The request did not include an API key. All API requests must
                  be authenticated.
                resolution: >-
                  Include your API key in the 'x-api-key' header with every
                  request.
                docs: https://conduit-v2.mintlify.app/errors#api-key-missing
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '403':
          description: >-
            **ORGANIZATION_ACCESS_SUSPENDED**: Conduit has suspended this
            organization's access. Requests with the organization's API keys and
            from its users are refused until Conduit restores access.


            **API_KEY_READ_ONLY**: This API key has read-only access and cannot
            perform write operations. Read-only keys may make read requests
            (GET, HEAD, OPTIONS) only.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: ORGANIZATION_ACCESS_SUSPENDED
                title: Organization Access Suspended
                status: 403
                detail: >-
                  Conduit has suspended this organization's access. Requests
                  with the organization's API keys and from its users are
                  refused until Conduit restores access.
                resolution: Contact Conduit support.
                docs: >-
                  https://conduit-v2.mintlify.app/errors#organization-access-suspended
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '404':
          description: >-
            **SIGNING_REQUEST_NOT_FOUND**: No signing request with this id
            exists for your account. The same response is returned for an id
            that belongs to another account, so a 404 never confirms that an id
            exists elsewhere.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: SIGNING_REQUEST_NOT_FOUND
                title: Signing request not found
                status: 404
                detail: >-
                  No signing request with this id exists for your account. The
                  same response is returned for an id that belongs to another
                  account, so a 404 never confirms that an id exists elsewhere.
                resolution: >-
                  List your actionable signing requests with GET
                  /v2/signing-requests and use an id from that list. The
                  transaction.awaiting_signature webhook also delivers the id
                  directly as signingRequestId (programmatic mode).
                docs: >-
                  https://conduit-v2.mintlify.app/errors#signing-request-not-found
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '409':
          description: >-
            **IDEMPOTENCY_KEY_CONFLICT**: The idempotency key was previously
            used with a different request body, and that request succeeded or
            ended in a `5xx`. A `4xx` response does not bind the key.
            Idempotency keys are bound to the exact request shape — replays must
            match the original.


            **IDEMPOTENCY_KEY_REQUEST_IN_PROGRESS**: An earlier request with
            this idempotency key has not finished, or stopped before its result
            was recorded. In the second case it may or may not have completed
            its work.


            **SIGNING_MODE_NOT_PROGRAMMATIC**: This wallet's signing mode
            requires human passkey approval, so machine (api-key) stamps are not
            accepted. The signing-requests API only serves accounts whose
            signing mode is `programmatic` or `programmatic_unattended`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: IDEMPOTENCY_KEY_CONFLICT
                title: Idempotency Key Conflict
                status: 409
                detail: >-
                  The idempotency key was previously used with a different
                  request body, and that request succeeded or ended in a `5xx`.
                  A `4xx` response does not bind the key. Idempotency keys are
                  bound to the exact request shape — replays must match the
                  original.
                resolution: >-
                  Use a fresh idempotency key for the new request, or replay the
                  original request unchanged.
                docs: >-
                  https://conduit-v2.mintlify.app/errors#idempotency-key-conflict
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '415':
          description: >-
            **UNSUPPORTED_MEDIA_TYPE**: The request carries a body with a
            Content-Type this endpoint cannot parse. JSON endpoints accept
            'application/json'; a body with no Content-Type header at all is
            assumed to be JSON. File-upload endpoints accept only
            'multipart/form-data' — JSON or undeclared bodies are rejected
            there.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: UNSUPPORTED_MEDIA_TYPE
                title: Unsupported Media Type
                status: 415
                detail: >-
                  The request carries a body with a Content-Type this endpoint
                  cannot parse. JSON endpoints accept 'application/json'; a body
                  with no Content-Type header at all is assumed to be JSON.
                  File-upload endpoints accept only 'multipart/form-data' — JSON
                  or undeclared bodies are rejected there.
                resolution: >-
                  Send the request body with the 'Content-Type:
                  application/json' header. For file uploads, use 'Content-Type:
                  multipart/form-data' — upload endpoints accept no other body
                  type.
                docs: https://conduit-v2.mintlify.app/errors#unsupported-media-type
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '422':
          description: >-
            **SIGNING_STAMP_INVALID**: The submitted stamp could not be
            verified: it is not well-formed for the signer's registered scheme,
            its signature does not match the signed body, or the signed body
            does not authorize this exact signing request (its activity
            fingerprint, sub-organization, or request type does not match).


            **SIGNING_STAMP_SIGNER_UNKNOWN**: The stamp's public key does not
            resolve to an ACTIVE machine (api_key) signer on the wallet's
            roster. The signature verified, but the key is not one of this
            account's provisioned api-key signers.


            **SIGNING_STAMP_ATTRIBUTION_MISMATCH**: The stamp verified locally
            and resolved to one of your machine signers, but the signing
            provider did not record a vote for that signer — the vote was
            attributed elsewhere or not recorded. Conduit fails closed rather
            than counting a vote toward quorum that it cannot attribute to the
            signer you submitted.


            **SIGNER_CREDENTIAL_SCHEME_NOT_ADMISSIBLE**: A counted signer's
            approval was stamped with a credential that does not match the
            credential that signer is enrolled with: a passkey signer must stamp
            with their passkey, and a machine (api-key) signer must stamp with
            its api key using the exact scheme it was enrolled with.
            Substituting one for the other is rejected, as is any credential the
            wallet's signing mode does not permit at all — passkey-required
            wallets accept only passkey approvals, and no credential other than
            an enrolled passkey or provisioned machine api-key is ever
            admissible.


            **SIGNATURE_REJECTED**: The signing provider rejected the stamped
            request. The signer is authenticated, but the signature itself could
            not be applied: the assertion can target the wrong sub-organization,
            the activity can have completed or expired, or a policy denied the
            vote.


            **SIGNING_ACTIVITY_NOT_AT_PROVIDER**: The signing provider has no
            record of the activity this signing request points at, so it counted
            no vote. This is not a bad signature and not a rejection: the
            provider can no longer tell us whether this request was signed, and
            Conduit holds the payout rather than guessing. It usually means the
            provider-side activity expired or was cleared while the request was
            open.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: SIGNING_STAMP_INVALID
                title: Signing stamp is invalid
                status: 422
                detail: >-
                  The submitted stamp could not be verified: it is not
                  well-formed for the signer's registered scheme, its signature
                  does not match the signed body, or the signed body does not
                  authorize this exact signing request (its activity
                  fingerprint, sub-organization, or request type does not
                  match).
                resolution: >-
                  Re-fetch the signing request's approval material with GET
                  /v2/signing-requests/{id}, rebuild the approve/reject activity
                  body exactly as returned, and stamp it with your machine
                  signer's api key using the scheme it was registered with.
                docs: https://conduit-v2.mintlify.app/errors#signing-stamp-invalid
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '429':
          description: >-
            **RATE_LIMITED**: Too many requests. This error is returned by three
            independent checks: the per-organization bucket applied to every
            authenticated API request; the per-IP bucket applied to
            unauthenticated traffic before an API key is validated; and the
            per-IP bucket applied when repeated invalid API keys are submitted
            from the same address. Honor the Retry-After header (also exposed as
            retryAfterSeconds in the body) before retrying. Current limits and
            remaining budget are visible in X-RateLimit-Limit (the bucket size),
            X-RateLimit-Remaining, and X-RateLimit-Reset (seconds until the
            bucket refills) on every response once your API key is accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitedErrorDto'
              example:
                type: RATE_LIMITED
                title: Rate Limited
                status: 429
                detail: >-
                  Too many requests. This error is returned by three independent
                  checks: the per-organization bucket applied to every
                  authenticated API request; the per-IP bucket applied to
                  unauthenticated traffic before an API key is validated; and
                  the per-IP bucket applied when repeated invalid API keys are
                  submitted from the same address. Honor the Retry-After header
                  (also exposed as retryAfterSeconds in the body) before
                  retrying. Current limits and remaining budget are visible in
                  X-RateLimit-Limit (the bucket size), X-RateLimit-Remaining,
                  and X-RateLimit-Reset (seconds until the bucket refills) on
                  every response once your API key is accepted.
                resolution: >-
                  Sleep until Retry-After seconds have elapsed, then retry. For
                  sustained workloads exceeding the per-organization defaults,
                  request a rate-limit increase through your support contact.
                docs: https://conduit-v2.mintlify.app/errors#rate-limited
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
                retryAfterSeconds: 3
        '500':
          description: >-
            **INTERNAL_ERROR**: An unexpected error occurred while processing
            your request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: INTERNAL_ERROR
                title: Internal Error
                status: 500
                detail: An unexpected error occurred while processing your request.
                resolution: >-
                  Retry the request after a brief delay. If the error persists,
                  contact support and include the correlationId from the error
                  response for investigation.
                docs: https://conduit-v2.mintlify.app/errors#internal-error
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
        '502':
          description: >-
            **SIGNING_PROVIDER_UNAVAILABLE**: The signing provider returned a
            transient upstream error (network failure, timeout, rate limit, or
            5xx) rather than a definitive verdict on the stamped request. The
            signer is authenticated and the request itself is fine — the
            provider just couldn't be reached right now.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
              example:
                type: SIGNING_PROVIDER_UNAVAILABLE
                title: Signing Provider Unavailable
                status: 502
                detail: >-
                  The signing provider returned a transient upstream error
                  (network failure, timeout, rate limit, or 5xx) rather than a
                  definitive verdict on the stamped request. The signer is
                  authenticated and the request itself is fine — the provider
                  just couldn't be reached right now.
                resolution: >-
                  Retry the request after a brief delay. Do not re-authenticate
                  — the session is still valid.
                docs: >-
                  https://conduit-v2.mintlify.app/errors#signing-provider-unavailable
                instance: /v2/...
                correlationId: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
                timestamp: '2026-01-15T09:30:00.000Z'
components:
  schemas:
    SubmitSigningStampBodyDto:
      type: object
      properties:
        signedBody:
          type: string
          minLength: 1
          maxLength: 8192
          description: The exact activity body (JSON string) your machine signer stamped.
        stamp:
          type: string
          minLength: 1
          maxLength: 8192
          description: >-
            The signing provider's stamp header value: base64url({publicKey,
            scheme, signature}).
      required:
        - signedBody
        - stamp
      additionalProperties: false
    PayoutSigningRequestResponseDto:
      type: object
      properties:
        kind:
          type: string
          description: A payout the signers must approve.
          enum:
            - payout
        transactionId:
          type: string
          pattern: ^txn_[0-9A-Za-z]{22}$
          description: >-
            Payout this request authorizes. Each id has the form `txn_` followed
            by 22 alphanumeric characters.
        id:
          type: string
          pattern: ^vrf_[0-9A-Za-z]{22}$
          description: Signing request id (equals the pending verification id).
        customerId:
          type: string
          pattern: ^cus_[0-9A-Za-z]{22}$
          description: >-
            Customer whose signers must approve. Each id has the form `cus_`
            followed by 22 alphanumeric characters.
        status:
          type: string
          enum:
            - awaiting_signature
            - quorum_met
            - declined
            - expired
          description: >-
            `awaiting_signature`: still collecting stamps, so submit yours.
            `quorum_met`: enough stamps arrived and the request proceeds on its
            own. `declined`: a signer rejected it. `expired`: the signing window
            closed before quorum. Only `awaiting_signature` accepts a new stamp;
            the other three are final for this request.
        requiredApprovals:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            How many signer stamps this request needs. Fixed when the request
            was created, so it does not move while you collect.
        approvedCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            How many stamps have been accepted so far. Signing proceeds as soon
            as it reaches `requiredApprovals`, at which point `status` becomes
            `quorum_met`.
        expiresAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp
          example: '2026-01-15T09:30:00.000Z'
          nullable: true
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp
          example: '2026-01-15T09:30:00.000Z'
        approvalMaterial:
          type: object
          properties:
            version:
              type: string
              description: Approval-material shape version.
              enum:
                - '1'
            activityId:
              type: string
              description: Signing activity id being approved.
            fingerprint:
              type: string
              description: Activity fingerprint the stamped body must carry.
            subOrganizationId:
              type: string
              description: Signing sub-organization the stamp must target.
            outbound:
              type: object
              properties:
                toAddress:
                  type: string
                  description: Destination address of the value the signature moves.
                assetAmount:
                  type: object
                  properties:
                    code:
                      type: string
                      enum:
                        - USD
                        - EUR
                        - GBP
                        - CHF
                        - JPY
                        - CAD
                        - AUD
                        - NZD
                        - SGD
                        - HKD
                        - CNY
                        - KRW
                        - INR
                        - BRL
                        - MXN
                        - ARS
                        - CLP
                        - COP
                        - PEN
                        - ZAR
                        - NGN
                        - KES
                        - GHS
                        - EGP
                        - AED
                        - SAR
                        - ILS
                        - TRY
                        - PLN
                        - CZK
                        - HUF
                        - SEK
                        - NOK
                        - DKK
                        - THB
                        - IDR
                        - MYR
                        - PHP
                        - VND
                        - TWD
                        - USDC
                        - USDT
                        - DAI
                        - EURC
                        - PYUSD
                        - OUSD
                        - BTC
                        - ETH
                        - SOL
                        - TRX
                        - XLM
                        - POL
                      description: Asset code (USDC, USD, etc.)
                    chain:
                      description: Chain when the asset is on-chain; omitted for fiat.
                      type: string
                      enum:
                        - ethereum
                        - base
                        - solana
                        - polygon
                        - tron
                        - stellar
                        - tempo
                    amount:
                      type: string
                      description: Decimal string, asset-precision rounded
                  required:
                    - code
                    - amount
                  additionalProperties: false
              required:
                - toAddress
                - assetAmount
              additionalProperties: false
          required:
            - version
            - activityId
            - fingerprint
            - subOrganizationId
            - outbound
          additionalProperties: false
      required:
        - kind
        - transactionId
        - id
        - customerId
        - status
        - requiredApprovals
        - approvedCount
        - expiresAt
        - createdAt
        - approvalMaterial
    WalletSetupSigningRequestResponseDto:
      type: object
      properties:
        kind:
          type: string
          description: >-
            The one-time on-chain setup of a new wallet. It moves no customer
            funds; `approvalMaterial.outbound` is the setup's return of
            Conduit's funding to Conduit.
          enum:
            - wallet_setup
        walletId:
          type: string
          pattern: ^wlt_[0-9A-Za-z]{22}$
          description: >-
            Wallet this setup activates. Each id has the form `wlt_` followed by
            22 alphanumeric characters.
        id:
          type: string
          pattern: ^vrf_[0-9A-Za-z]{22}$
          description: Signing request id (equals the pending verification id).
        customerId:
          type: string
          pattern: ^cus_[0-9A-Za-z]{22}$
          description: >-
            Customer whose signers must approve. Each id has the form `cus_`
            followed by 22 alphanumeric characters.
        status:
          type: string
          enum:
            - awaiting_signature
            - quorum_met
            - declined
            - expired
          description: >-
            `awaiting_signature`: still collecting stamps, so submit yours.
            `quorum_met`: enough stamps arrived and the request proceeds on its
            own. `declined`: a signer rejected it. `expired`: the signing window
            closed before quorum. Only `awaiting_signature` accepts a new stamp;
            the other three are final for this request.
        requiredApprovals:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            How many signer stamps this request needs. Fixed when the request
            was created, so it does not move while you collect.
        approvedCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            How many stamps have been accepted so far. Signing proceeds as soon
            as it reaches `requiredApprovals`, at which point `status` becomes
            `quorum_met`.
        expiresAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp
          example: '2026-01-15T09:30:00.000Z'
          nullable: true
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp
          example: '2026-01-15T09:30:00.000Z'
        approvalMaterial:
          type: object
          properties:
            version:
              type: string
              description: Approval-material shape version.
              enum:
                - '1'
            activityId:
              type: string
              description: Signing activity id being approved.
            fingerprint:
              type: string
              description: Activity fingerprint the stamped body must carry.
            subOrganizationId:
              type: string
              description: Signing sub-organization the stamp must target.
            outbound:
              type: object
              properties:
                toAddress:
                  type: string
                  description: Destination address of the value the signature moves.
                assetAmount:
                  type: object
                  properties:
                    code:
                      type: string
                      enum:
                        - USD
                        - EUR
                        - GBP
                        - CHF
                        - JPY
                        - CAD
                        - AUD
                        - NZD
                        - SGD
                        - HKD
                        - CNY
                        - KRW
                        - INR
                        - BRL
                        - MXN
                        - ARS
                        - CLP
                        - COP
                        - PEN
                        - ZAR
                        - NGN
                        - KES
                        - GHS
                        - EGP
                        - AED
                        - SAR
                        - ILS
                        - TRY
                        - PLN
                        - CZK
                        - HUF
                        - SEK
                        - NOK
                        - DKK
                        - THB
                        - IDR
                        - MYR
                        - PHP
                        - VND
                        - TWD
                        - USDC
                        - USDT
                        - DAI
                        - EURC
                        - PYUSD
                        - OUSD
                        - BTC
                        - ETH
                        - SOL
                        - TRX
                        - XLM
                        - POL
                      description: Asset code (USDC, USD, etc.)
                    chain:
                      description: Chain when the asset is on-chain; omitted for fiat.
                      type: string
                      enum:
                        - ethereum
                        - base
                        - solana
                        - polygon
                        - tron
                        - stellar
                        - tempo
                    amount:
                      type: string
                      description: Decimal string, asset-precision rounded
                  required:
                    - code
                    - amount
                  additionalProperties: false
              required:
                - toAddress
                - assetAmount
              additionalProperties: false
          required:
            - version
            - activityId
            - fingerprint
            - subOrganizationId
            - outbound
          additionalProperties: false
      required:
        - kind
        - walletId
        - id
        - customerId
        - status
        - requiredApprovals
        - approvedCount
        - expiresAt
        - createdAt
        - approvalMaterial
    ValidationErrorDto:
      type: object
      properties:
        type:
          type: string
          description: Machine-readable error code
          example: CUSTOMER_NOT_FOUND
        title:
          type: string
          description: Human-readable error type label
          example: Customer Not Found
        status:
          type: number
          description: HTTP status code
          example: 404
        detail:
          type: string
          description: Human-readable explanation of this occurrence
          example: Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found
        resolution:
          type: string
          description: What the developer should do to resolve this error
          example: >-
            Verify the customer ID. Check you are using the correct API key for
            this organization.
        docs:
          type: string
          description: URL to error documentation
          example: https://conduit-v2.mintlify.app/errors#customer-not-found
        instance:
          type: string
          description: Request path that produced the error
          example: /v2/customers/cus_034A0gCCVsxdV2PjHLx9k1
        correlationId:
          description: Request correlation ID
          example: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
          type: string
        timestamp:
          type: string
          description: ISO 8601 UTC timestamp
          example: '2026-04-27T20:00:00.000Z'
        details:
          description: >-
            Additional structured data for domain-specific errors (e.g. missing
            field lists, pair info)
        errors:
          type: array
          items:
            type: object
            properties:
              pointer:
                type: string
                description: JSON pointer to the invalid field
                example: /email
              detail:
                type: string
                description: What is wrong with this field
                example: Invalid email format
              allowedValues:
                description: The values this field accepts, when it is a closed set
                example:
                  - ach
                  - fedwire
                  - rtp
                type: array
                items:
                  type: string
              category:
                description: >-
                  Class of blocker (requirements-validator output only). 'field'
                  = form-field gap, 'document' = missing or insufficient
                  document (including per-UBO document slots), 'individual' =
                  required person missing.
                example: field
                type: string
                enum:
                  - field
                  - document
                  - individual
            required:
              - pointer
              - detail
      required:
        - type
        - title
        - status
        - detail
        - resolution
        - docs
        - instance
        - timestamp
    ProblemDetailDto:
      type: object
      properties:
        type:
          type: string
          description: Machine-readable error code
          example: CUSTOMER_NOT_FOUND
        title:
          type: string
          description: Human-readable error type label
          example: Customer Not Found
        status:
          type: number
          description: HTTP status code
          example: 404
        detail:
          type: string
          description: Human-readable explanation of this occurrence
          example: Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found
        resolution:
          type: string
          description: What the developer should do to resolve this error
          example: >-
            Verify the customer ID. Check you are using the correct API key for
            this organization.
        docs:
          type: string
          description: URL to error documentation
          example: https://conduit-v2.mintlify.app/errors#customer-not-found
        instance:
          type: string
          description: Request path that produced the error
          example: /v2/customers/cus_034A0gCCVsxdV2PjHLx9k1
        correlationId:
          description: Request correlation ID
          example: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
          type: string
        timestamp:
          type: string
          description: ISO 8601 UTC timestamp
          example: '2026-04-27T20:00:00.000Z'
        details:
          description: >-
            Additional structured data for domain-specific errors (e.g. missing
            field lists, pair info)
      required:
        - type
        - title
        - status
        - detail
        - resolution
        - docs
        - instance
        - timestamp
    RateLimitedErrorDto:
      type: object
      properties:
        type:
          type: string
          description: Machine-readable error code
          example: CUSTOMER_NOT_FOUND
        title:
          type: string
          description: Human-readable error type label
          example: Customer Not Found
        status:
          type: number
          description: HTTP status code
          example: 404
        detail:
          type: string
          description: Human-readable explanation of this occurrence
          example: Customer with id cus_034A0gCCVsxdV2PjHLx9k1 not found
        resolution:
          type: string
          description: What the developer should do to resolve this error
          example: >-
            Verify the customer ID. Check you are using the correct API key for
            this organization.
        docs:
          type: string
          description: URL to error documentation
          example: https://conduit-v2.mintlify.app/errors#customer-not-found
        instance:
          type: string
          description: Request path that produced the error
          example: /v2/customers/cus_034A0gCCVsxdV2PjHLx9k1
        correlationId:
          description: Request correlation ID
          example: 00469ea4-52c1-4ffa-bd05-9f28b236a5fe
          type: string
        timestamp:
          type: string
          description: ISO 8601 UTC timestamp
          example: '2026-04-27T20:00:00.000Z'
        details:
          description: >-
            Additional structured data for domain-specific errors (e.g. missing
            field lists, pair info)
        retryAfterSeconds:
          type: integer
          minimum: 0
          exclusiveMinimum: true
          maximum: 9007199254740991
          description: Seconds to wait before retrying
          example: 3
      required:
        - type
        - title
        - status
        - detail
        - resolution
        - docs
        - instance
        - timestamp
        - retryAfterSeconds
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: x-api-key

````

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