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

# Submit an application for verification

> Submits an application for verification. The application must be complete with all required
information and documents before it can be submitted. If the application is not ready,
returns detailed error information about what is missing.

**Authentication:** Accepts Application Token (X-Application-Token header).




## OpenAPI

````yaml /openapi.yaml post /applications/{application_id}/submissions
openapi: 3.0.3
info:
  title: Dakota Platform API
  version: 1.0.0
  description: >-
    Combined API specification for Dakota Platform services:

    - Issuance API: Asset minting and burning operations

    - Onboarding API: Know Your Business/Customer verification

    - On/Off Ramp API: Managing on-ramp and off-ramp accounts

    - Recipients API: Managing destinations for KYB'd entities

    - Transactions API: Viewing transaction history across platform operations


    ## Authentication and API Headers


    All API endpoints require the following headers:


    - `x-idempotency-key`: Required for all POST endpoints to ensure request
    idempotency

    - `x-api-key`: Required for authentication across all endpoints


    Note: On /applications endpoints you need a token for authentication instead
    of a x-api-key

    - `x-application-token`: Required for authentication on public /applications
    endpoints (alternative to `x-api-key` where documented)



    ## Rate Limits


    Requests are rate limited per API key. Every response includes the following
    headers:


    | Header | Description |

    | --- | --- |

    | `X-RateLimit-Limit` | Maximum requests allowed in the current one-minute
    window. |

    | `X-RateLimit-Remaining` | Requests remaining in the current window. |

    | `X-RateLimit-Reset` | Absolute Unix timestamp (seconds since epoch) when
    the current rate-limit window resets. |


    When a request is throttled (`429`), responses also include `Retry-After`
    with seconds to wait before retrying.
servers:
  - url: https://api.platform.dakota.xyz
    description: Production environment
  - url: https://api.platform.sandbox.dakota.xyz
    description: Sandbox — safe for testing with simulated data
security:
  - ApiKeyAuth: []
tags:
  - name: Agentic Payments
    x-alpha: true
    description: >-
      Alpha — agent-driven payments: provision agents, draft and approve
      spending mandates, accept reviewed instructions, and manage scheduled
      payments.


      **Prerequisites:** Customer onboarded; signer groups attached for
      recognition.

      **Related:** Wallets, Signer Groups, Transactions
  - name: Mandates
    x-alpha: true
    description: >-
      Alpha — spending mandates: signed, signer-bound authorizations governing
      what may be spent, approved or cancelled by a second recognized signer (§8
      — the dual-control rule that every mandate mutation must be signed by a
      recognized signer OTHER than the bound one). Independent of agents and
      scheduled payments.


      **Prerequisites:** Signer groups attached for recognition.

      **Related:** Signer Groups, Transactions
  - name: Insights
    x-alpha: true
    description: >-
      Alpha — read-only account insight: a deterministic report over a
      customer's agentic activity (funding balances, upcoming obligations,
      failures, mandate headroom and expiry) plus an advisory chat that narrates
      it. Never moves money, never creates or changes anything.


      **Prerequisites:** Customer onboarded; insight is computed from the
      customer's scheduled payments, mandates, and wallets.

      **Related:** Agentic Payments, Mandates
  - name: Customers
    description: >-
      Manage customer entities representing businesses and organizations
      onboarded to Dakota.


      **Prerequisites:** Complete KYB via Onboarding endpoints before initiating
      money movement.

      **Related:** Onboarding, Recipients, Transactions, Accounts, Wallets
  - name: Wallets
    description: >-
      Manage wallets, balances, and wallet-to-signer-group relationships for
      custody and movement controls.


      **Prerequisites:** Customer must exist. Configure signer groups before
      policy-enforced workflows.

      **Related:** Signer Groups, Policies, Transactions, Customers
  - name: Transactions
    description: >-
      Create, cancel, and retrieve transaction records across account and wallet
      flows.


      **Prerequisites:** Accounts or destinations must be configured based on
      flow type.

      **Related:** Accounts, Recipients, Policies, Events
  - name: Recipients
    description: >-
      Manage recipient entities and destination rails used by customers for
      payouts and transfers.


      **Prerequisites:** Customer must be onboarded and active.

      **Related:** Customers, Transactions, Accounts, Onboarding
  - name: Accounts
    description: >-
      Manage account resources used for onramp, offramp, and swap operations.


      **Prerequisites:** Customer must be created and network/asset constraints
      must be known.

      **Related:** Customers, Transactions, Auto Transactions, Info
  - name: Auto Transactions
    description: >-
      Manage automated transaction configurations and execution history for
      account automation workflows.


      **Prerequisites:** Source account must exist and be configured for
      automation.

      **Related:** Accounts, Transactions, Events
  - name: Onboarding
    description: >-
      Manage KYB/KYC onboarding lifecycle, application documents, attestations,
      and verification steps.


      **Prerequisites:** Customer context and required entity/application
      metadata.

      **Related:** Customers, Exceptions, Recipients, Transactions
  - name: Policies
    description: >-
      Define and manage policy objects and rules used for transaction governance
      and risk controls.


      **Prerequisites:** Wallet and signer group resources should be configured
      for enforcement scenarios.

      **Related:** Wallets, Signer Groups, Transactions
  - name: Signer Groups
    description: >-
      Manage signer groups and signer assignments for multi-party authorization
      models.


      **Prerequisites:** Wallets should exist before linking signer groups.

      **Related:** Wallets, Policies, Transactions
  - name: Authentication
    description: >-
      Manage API authentication credentials and key lifecycle for platform
      access.


      **Prerequisites:** Client organization must be provisioned.

      **Related:** Users, Info
  - name: Users
    description: >-
      Manage client users, roles, and identity metadata for platform access
      control.


      **Prerequisites:** Auth credentials and client context must be
      established.

      **Related:** Authentication
  - name: Webhooks
    description: >-
      Manage outbound webhook targets and delivery configuration for event
      notifications.


      **Prerequisites:** Subscriber endpoint must be reachable and secured.

      **Related:** Events, Authentication
  - name: Payouts
    description: >-
      Manage where Dakota sends your accrued developer-fee payouts.


      **Prerequisites:** Auth credentials and client context must be
      established.

      **Related:** Events
  - name: Events
    description: >-
      Retrieve event records emitted by platform operations for audit and
      troubleshooting.


      **Prerequisites:** Requesting client must have access to referenced
      resources.

      **Related:** Webhooks, Transactions, Onboarding
  - name: Info
    description: >-
      Read platform capability metadata, such as supported rails, networks, and
      assets.


      **Prerequisites:** Valid authentication headers.

      **Related:** Accounts, Transactions
  - name: Sandbox
    description: >-
      Trigger sandbox-only simulation endpoints for safe end-to-end integration
      testing with synthetic data. The sandbox host
      (`https://api.platform.sandbox.dakota.xyz`) also accepts a family of
      `X-Sandbox-*` request headers on most write endpoints (`Customers`,
      `Accounts`, `Transactions`, simulate endpoints) that let integrators drive
      deterministic failure modes — pick a preset via `X-Sandbox-Scenario`, or
      compose a custom one with
      `X-Sandbox-Error-Step`/`X-Sandbox-Error-Status`/`X-Sandbox-Error-Message`.
      `X-Sandbox-Instant-Completion` collapses async flows to a single
      synchronous step, and `X-Sandbox-Skip-Auto-Approval` keeps newly created
      KYB applications in `pending` for manual-review testing. All `X-Sandbox-*`
      headers are ignored in production.


      **Prerequisites:** Sandbox environment and test customer data.

      **Related:** Customers, Accounts, Transactions, Onboarding
paths:
  /applications/{application_id}/submissions:
    post:
      tags:
        - Onboarding
      summary: Submit an application for verification
      description: >
        Submits an application for verification. The application must be
        complete with all required

        information and documents before it can be submitted. If the application
        is not ready,

        returns detailed error information about what is missing.


        **Authentication:** Accepts Application Token (X-Application-Token
        header).
      operationId: createApplicationSubmission
      parameters:
        - name: application_id
          in: path
          required: true
          description: The unique identifier for the application
          schema:
            $ref: '#/components/schemas/KSUID'
        - $ref: '#/components/parameters/IdempotencyKeyHeader'
      responses:
        '200':
          description: Application submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              example:
                application_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                application_type: business
                application_status: pending
                application_created_at: '2024-01-15T10:30:00Z'
                application_updated_at: '2024-01-16T14:45:00Z'
                application_submitted_at: '2024-01-17T16:00:00Z'
                application_decision: approved
                entities:
                  business:
                    id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                    legal_name: Acme Corporation
                    country_of_incorporation: US
                    date_of_incorporation: '2020-01-15'
                    legal_structure: llc
                    registration_number: '123456789'
                    tax_id_number: 12-3456789
                    dba: Acme Inc
                    registered_address:
                      street1: 123 Main St
                      street2: Apt 4B
                      street3: Building C
                      city: San Francisco
                      region: California
                      postal_code: '94105'
                      country: US
                    operating_address:
                      street1: 123 Main St
                      street2: Apt 4B
                      street3: Building C
                      city: San Francisco
                      region: California
                      postal_code: '94105'
                      country: US
                    industry_code: '541511'
                    business_description: Software development and technology consulting services
                    purpose_of_account:
                      - first_party_payments
                      - business_expenses
                    average_monthly_revenue: 1_to_10m
                    expected_monthly_deposit: 100k_to_500k
                    expected_monthly_transaction_volume: 0_to_10
                    source_of_funds:
                      - proprietary_funds
                      - customer_funds
                    has_bearer_shares: false
                    transact_on_behalf_of_third_parties: false
                    website: https://www.acme.com
                    decision: approved
                    decision_reason: All verification checks passed
                    decision_by: admin@dakota.xyz
                    decision_at: 1705315800
                    sumsub_verification:
                      applicant_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                      provider_applicant_id: 65a1b2c3d4e5f6g7h8i9j0k1
                      entity_type: individual
                      type: individual
                      decision: approved
                      decision_reason: All verification checks passed
                      decision_by: admin@dakota.xyz
                      decision_at: 1705315800
                      review:
                        review_id: 65a1b2c3d4e5f6g7h8i9j0k1
                        attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                        attempt_cnt: 1
                        level_name: basic-kyc-level
                        create_date: '2024-01-15T10:30:00Z'
                        review_date: '2024-01-15T14:45:00Z'
                        review_status: completed
                        review_result:
                          review_answer: GREEN
                          reject_labels:
                            - DOCUMENT_TEMPLATE
                            - FRAUDULENT_PATTERNS
                          reject_type: FINAL
                          button_ids:
                            - approve
                          moderation_comment: All documents verified successfully
                          client_comment: Approved for onboarding
                      risk_labels:
                        device:
                          - EMULATOR
                          - VPN
                        cross_check:
                          - FAKE_ID
                          - BLACKLIST
                        attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                        created_at: '2024-01-15T10:30:00Z'
                  primary_individual:
                    id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                    first_name: John
                    last_name: Doe
                    date_of_birth: '1985-06-15'
                    nationalities:
                      - US
                    address:
                      street1: 123 Main St
                      street2: Apt 4B
                      street3: Building C
                      city: San Francisco
                      region: California
                      postal_code: '94105'
                      country: US
                    email_address: john.doe@example.com
                    phone_number: +1-555-123-4567
                    employment_status: employed
                    purpose_of_account:
                      - investing
                      - storage_of_funds_or_digital_assets
                    source_of_wealth:
                      - employment
                      - savings
                    decision: approved
                    decision_reason: All verification checks passed
                    decision_by: admin@dakota.xyz
                    decision_at: 1705315800
                    sumsub_verification:
                      applicant_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                      provider_applicant_id: 65a1b2c3d4e5f6g7h8i9j0k1
                      entity_type: individual
                      type: individual
                      decision: approved
                      decision_reason: All verification checks passed
                      decision_by: admin@dakota.xyz
                      decision_at: 1705315800
                      review:
                        review_id: 65a1b2c3d4e5f6g7h8i9j0k1
                        attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                        attempt_cnt: 1
                        level_name: basic-kyc-level
                        create_date: '2024-01-15T10:30:00Z'
                        review_date: '2024-01-15T14:45:00Z'
                        review_status: completed
                        review_result:
                          review_answer: GREEN
                          reject_labels:
                            - DOCUMENT_TEMPLATE
                            - FRAUDULENT_PATTERNS
                          reject_type: FINAL
                          button_ids:
                            - approve
                          moderation_comment: All documents verified successfully
                          client_comment: Approved for onboarding
                      risk_labels:
                        device:
                          - EMULATOR
                          - VPN
                        cross_check:
                          - FAKE_ID
                          - BLACKLIST
                        attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                        created_at: '2024-01-15T10:30:00Z'
                  associated_individuals:
                    - id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                      first_name: John
                      last_name: Doe
                      date_of_birth: '1985-06-15'
                      nationalities:
                        - US
                      address:
                        street1: 123 Main St
                        street2: Apt 4B
                        street3: Building C
                        city: San Francisco
                        region: California
                        postal_code: '94105'
                        country: US
                      email_address: john.doe@example.com
                      phone_number: +1-555-123-4567
                      employment_status: employed
                      purpose_of_account:
                        - investing
                        - storage_of_funds_or_digital_assets
                      source_of_wealth:
                        - employment
                        - savings
                      decision: approved
                      decision_reason: All verification checks passed
                      decision_by: admin@dakota.xyz
                      decision_at: 1705315800
                      sumsub_verification:
                        applicant_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                        provider_applicant_id: 65a1b2c3d4e5f6g7h8i9j0k1
                        entity_type: individual
                        type: individual
                        decision: approved
                        decision_reason: All verification checks passed
                        decision_by: admin@dakota.xyz
                        decision_at: 1705315800
                        review:
                          review_id: 65a1b2c3d4e5f6g7h8i9j0k1
                          attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                          attempt_cnt: 1
                          level_name: basic-kyc-level
                          create_date: '2024-01-15T10:30:00Z'
                          review_date: '2024-01-15T14:45:00Z'
                          review_status: completed
                          review_result:
                            review_answer: GREEN
                            reject_labels:
                              - DOCUMENT_TEMPLATE
                              - FRAUDULENT_PATTERNS
                            reject_type: FINAL
                            button_ids:
                              - approve
                            moderation_comment: All documents verified successfully
                            client_comment: Approved for onboarding
                        risk_labels:
                          device:
                            - EMULATOR
                            - VPN
                          cross_check:
                            - FAKE_ID
                            - BLACKLIST
                          attempt_id: 65a1b2c3d4e5f6g7h8i9j0k2
                          created_at: '2024-01-15T10:30:00Z'
                      roles:
                        - ubo
                        - control_person
                      ownership_percentage: 25.5
                      title: CEO
                edd:
                  account_usage_description: Processing payments for e-commerce transactions
                  top_customer_countries:
                    - US
                    - GB
                    - CA
                  is_token_issuer: false
                  will_conduct_token_sale: false
                  token_sale_amount_usd: 1000000
                  token_sale_availability: Public sale to accredited investors
                  token_sale_registration_status: Registered with SEC
                  is_regulated: true
                  unregulated_justification: Operating in exempt category under local regulations
                  country_of_regulation: US
                  regulatory_license_type: Money Services Business (MSB)
                  verifies_customer_identity: true
                  has_transaction_monitoring: true
                  subject_to_aml_audits: true
                  last_audit_date: '2024-06-30'
                  id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                  business_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                  document_info:
                    uploaded_documents:
                      - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                        document_type: passport
                        status: uploaded
                        uploaded_at: '2025-01-15T10:30:00Z'
                    missing_documents:
                      - purpose: business_formation
                        accepted_types:
                          - articles_of_incorporation
                        description: >-
                          Articles of Incorporation or equivalent formation
                          document
                  created_at: '2025-01-15T10:30:00Z'
                  updated_at: '2025-01-15T14:45:00Z'
                attestations:
                  information_accuracy:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                  terms_of_service:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                  privacy_policy:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                  funds_transfer_agreement:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                  lead_bank_privacy_policy:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                  e_sign:
                    attested_at: '2024-01-17T15:30:00Z'
                    attested_by: John Doe
                validation:
                  ready: false
                  status_message: >-
                    Waiting on: business documents, 2 individuals' documents,
                    and attestations
                  business:
                    id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                    ready: false
                    details:
                      ready: false
                      missing_fields:
                        - legal_structure
                        - date_of_incorporation
                        - business_description
                    documents:
                      uploaded_documents:
                        - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                          document_type: passport
                          status: uploaded
                          uploaded_at: '2025-01-15T10:30:00Z'
                      missing_documents:
                        - purpose: business_formation
                          accepted_types:
                            - articles_of_incorporation
                          description: >-
                            Articles of Incorporation or equivalent formation
                            document
                      ready: false
                  primary_individual:
                    id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                    ready: false
                    details:
                      ready: false
                      missing_fields:
                        - email_address
                        - date_of_birth
                    documents:
                      uploaded_documents:
                        - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                          document_type: passport
                          status: uploaded
                          uploaded_at: '2025-01-15T10:30:00Z'
                      missing_documents:
                        - purpose: individual_identity
                          accepted_types:
                            - passport
                            - drivers_license_front
                          description: Government-issued photo ID
                      ready: false
                    individual_name: John Doe
                  associated_individuals:
                    - id: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
                      ready: false
                      details:
                        ready: false
                        missing_fields:
                          - email_address
                          - date_of_birth
                      documents:
                        uploaded_documents:
                          - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                            document_type: passport
                            status: uploaded
                            uploaded_at: '2025-01-15T10:30:00Z'
                        missing_documents:
                          - purpose: individual_identity
                            accepted_types:
                              - passport
                              - drivers_license_front
                            description: Government-issued photo ID
                        ready: false
                      individual_name: John Doe
                  edd:
                    id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                    required: true
                    ready: false
                    details:
                      ready: false
                      missing_fields:
                        - legal_structure
                        - date_of_incorporation
                        - business_description
                    documents:
                      uploaded_documents:
                        - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                          document_type: passport
                          status: uploaded
                          uploaded_at: '2025-01-15T10:30:00Z'
                      missing_documents:
                        - purpose: business_formation
                          accepted_types:
                            - articles_of_incorporation
                          description: >-
                            Articles of Incorporation or equivalent formation
                            document
                      ready: false
                  attestations:
                    completed:
                      - type: information_accuracy
                        attested_at: '2024-01-17T15:30:00Z'
                        attested_by: John Doe
                    missing:
                      - terms_of_service
                      - privacy_policy
                risk_rating:
                  score: 7
                  num_factors: 4
                  percentage: 62.5
                  level: high
                  factors:
                    - name: country_risk
                      value: 3
                      level: high
                      input: US
                      description: Country risk based on incorporation country
                      reason: United States is a low-risk jurisdiction
                      prohibited: false
                  edd_required: true
                  prohibited: false
                  prohibited_reason: Sanctioned country
                  version: v1
                  data_version: '2026-01-07'
                  config:
                    threshold_low: 25
                    threshold_high: 50
                  calculated_at: '2024-01-15T10:30:00Z'
        '400':
          description: Application cannot be submitted (not ready or invalid status)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationNotReadyError'
              example:
                code: application_not_ready
                application_id: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
                status_message: >-
                  Application cannot be submitted because some or all applicants
                  haven't uploaded documents.
                edd:
                  required: true
                  edd_id: 2KPQgUCj09jSdGSdYMqaS3Z3C8r
                  ready: false
                  document_info:
                    uploaded_documents:
                      - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                        document_type: passport
                        status: uploaded
                        uploaded_at: '2025-01-15T10:30:00Z'
                    missing_documents:
                      - purpose: business_formation
                        accepted_types:
                          - articles_of_incorporation
                        description: >-
                          Articles of Incorporation or equivalent formation
                          document
                incomplete_applicants:
                  - applicant_type: individual
                    applicant_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                    legal_name: Acme Corporation
                    first_name: John
                    last_name: Doe
                    ready: true
                    document_info:
                      uploaded_documents:
                        - document_id: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
                          document_type: passport
                          status: uploaded
                          uploaded_at: '2025-01-15T10:30:00Z'
                      missing_documents:
                        - purpose: business_formation
                          accepted_types:
                            - articles_of_incorporation
                          description: >-
                            Articles of Incorporation or equivalent formation
                            document
                missing_attestations:
                  - information_accuracy
                  - terms_of_service
        '401':
          description: Unauthorized
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: >-
                  https://docs.dakota.xyz/api-reference/errors#authentication-error
                title: Unauthorized
                status: 401
                detail: Unauthorized
                instance: >-
                  https://api.platform.dakota.xyz/applications/example-id/submissions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '402':
          description: Insufficient self-serve credits to perform this submission.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsufficientCreditsError'
              example:
                error: insufficient_credits
                message: >-
                  Insufficient credits to submit this application. Required 2500
                  cents, balance 500 cents.
                required_cents: 2500
                balance_cents: 500
        '403':
          description: Forbidden - application not owned by client
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#forbidden
                title: Forbidden - application not owned by client
                status: 403
                detail: Forbidden - application not owned by client
                instance: >-
                  https://api.platform.dakota.xyz/applications/example-id/submissions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '404':
          description: Application not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#not-found
                title: Application not found
                status: 404
                detail: Application not found
                instance: >-
                  https://api.platform.dakota.xyz/applications/example-id/submissions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        default:
          description: Unexpected error
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#internal-error
                title: Unexpected error
                status: 500
                detail: Unexpected error
                instance: >-
                  https://api.platform.dakota.xyz/applications/example-id/submissions
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
      security:
        - ApplicationTokenAuth: []
      externalDocs:
        description: Read full guide in docs
        url: >-
          https://docs.dakota.xyz/api-reference/onboarding/submit-an-application-for-verification
components:
  schemas:
    KSUID:
      type: string
      title: KSUID
      description: >-
        KSUID is a 27-character globally unique ID that combines a timestamp
        with a random component. Used for all entity identifiers in the Dakota
        platform.
      pattern: ^[0-9A-Za-z]{27}$
      minLength: 27
      maxLength: 27
      example: 1NFHrqBHb3cTfLVkFSGmHZqdDPi
    Application:
      type: object
      description: Application response with separated entity data and validation state
      required:
        - application_id
        - application_type
        - application_status
        - application_created_at
        - application_updated_at
      properties:
        application_id:
          type: string
          format: ksuid
          description: Unique application identifier
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
        application_type:
          type: string
          description: Type of application
          enum:
            - business
            - individual
          example: business
        application_status:
          $ref: '#/components/schemas/ApplicationStatus'
          description: Current status of the application
        application_created_at:
          type: string
          format: date-time
          description: When the application was created
          example: '2024-01-15T10:30:00Z'
        application_updated_at:
          type: string
          format: date-time
          description: When the application was last updated
          example: '2024-01-16T14:45:00Z'
        application_submitted_at:
          type: string
          format: date-time
          nullable: true
          description: When the application was submitted (null if not yet submitted)
          example: '2024-01-17T16:00:00Z'
        application_decision:
          type: string
          enum:
            - approved
            - declined
            - withdrawn
          nullable: true
          description: >-
            Decision outcome for the application (only present after decision is
            made). Note: auto_declined is mapped to declined in the API
            response.
          example: approved
        decision_method:
          type: string
          enum:
            - manual
            - auto
            - override
          nullable: true
          description: >-
            How the decision was reached: 'manual' for operator-driven
            decisions, 'auto' for automated approvals, 'override' reserved for
            future escalation. Null if no decision has been made.
          example: manual
        decision_rule_version:
          type: string
          nullable: true
          description: >-
            Version identifier of the rule set that produced an automated
            decision. Null for manual decisions or when no decision has been
            made.
          example: v1.2
        entities:
          $ref: '#/components/schemas/ApplicationEntities'
          description: The people/businesses being onboarded
        edd:
          $ref: '#/components/schemas/EDDResponse'
          description: Enhanced Due Diligence data (if provided)
        attestations:
          $ref: '#/components/schemas/AttestationData'
          description: Attestations submitted for this application
        validation:
          $ref: '#/components/schemas/ApplicationValidation'
          description: Validation state computed at retrieval time
        risk_rating:
          $ref: '#/components/schemas/RiskRating'
          description: >-
            Risk rating. Present for users with compliance review-data access
            (compliance, compliance_admin, superadmin).
        poa_status:
          type: string
          nullable: true
          enum:
            - missing
            - submitted_pending_review
            - approved
            - rejected
          description: >
            Tracks the review state of the Proof of Address for individual
            applications.

            Null for business applications and for non-primary-individual rows.


            - `missing` — No Proof of Address has been submitted. The individual
            is subject
              to the $3,000 USD-equivalent rolling 7-day transaction limit.
            - `submitted_pending_review` — A PoA-equivalent document
            (proof_of_address,
              bank_statement, or utility_bill) has been uploaded and is awaiting compliance
              review. The individual remains subject to the transaction limit until the review
              concludes.
            - `approved` — The Proof of Address has been reviewed and approved.
            The individual
              is exempt from the $3,000 / 7-day rolling transaction threshold.
            - `rejected` — The submitted Proof of Address was rejected. The
            individual
              remains subject to the transaction limit and may re-upload a new document.
          example: missing
        is_frozen:
          type: boolean
          description: >
            Whether the customer's KYB is currently frozen (transactions held
            pending

            proof-of-address review). The authoritative source for the reviewer
            freeze

            badge. Present (true/false) only for individual applications; absent
            for

            business applications.
          example: true
        frozen_at:
          type: string
          format: date-time
          nullable: true
          description: >
            When the customer entered the current frozen state, from the KYB

            status-change log. Drives the days-frozen counter accurately (unlike

            application_updated_at, which unrelated edits bump). Null when the
            customer

            is not currently frozen, or when the freeze predates the
            status-change log.
          example: '2024-01-16T14:45:00Z'
        poa_on_file:
          type: boolean
          description: >
            Whether the customer has an approved Proof of Address on file (and
            is

            therefore exempt from the transaction-volume limit). Present only
            for

            individual applications; absent for business applications.
          example: false
        assignee:
          $ref: '#/components/schemas/ComplianceReviewer'
          description: >-
            The compliance reviewer this application is assigned to (its owner).
            Absent when unassigned.
        assigned_at:
          type: integer
          format: int64
          nullable: true
          description: >-
            Epoch seconds when the application was assigned to its current
            owner. Absent/null when unassigned.
          example: 1717423200
        outstanding_partner_attestations:
          type: array
          description: >
            Outstanding partner disclosure attestations the customer must accept

            to unlock a partner-gated capability (e.g. international wires),
            surfaced

            so the hosted onboarding flow can present them in the same
            attestations

            UI used for first-party attestations. Partner-agnostic: each item is
            keyed

            by an opaque terms key + version, never a partner identifier. Only
            present

            (and only computed) for an already-decided (approved) application
            that has

            outstanding partner onboarding — this is the re-engagement surface
            for an

            existing customer who lands on the hosted flow via their
            application_url.

            Empty/absent when nothing is outstanding or the partner declaration
            is

            unavailable. Accept each by POSTing to
            /applications/{id}/attestations with

            disclosure_id = key and disclosure_version = version.
          items:
            $ref: '#/components/schemas/PartnerAttestationRequirement'
    ApplicationNotReadyError:
      type: object
      description: >-
        Error response when application cannot be submitted because applicants
        are not ready
      required:
        - code
        - application_id
        - status_message
        - incomplete_applicants
        - missing_attestations
      properties:
        code:
          type: string
          description: Error code indicating the application is not ready
          example: application_not_ready
        application_id:
          $ref: '#/components/schemas/KSUID'
          description: The unique identifier for the application that cannot be submitted
        status_message:
          type: string
          description: >-
            Human-readable status message explaining why the application cannot
            be submitted
          example: >-
            Application cannot be submitted because some or all applicants
            haven't uploaded documents.
        edd:
          $ref: '#/components/schemas/EDDInfo'
          description: >-
            Enhanced Due Diligence information (only present for business
            applications)
        incomplete_applicants:
          type: array
          description: >-
            List of applicants that are not ready (only includes incomplete
            applicants, not all applicants)
          items:
            $ref: '#/components/schemas/ApplicationEntity'
        missing_attestations:
          type: array
          description: List of attestation types that are missing at the application level
          items:
            $ref: '#/components/schemas/AttestationType'
          example:
            - information_accuracy
            - terms_of_service
    ProblemDetails:
      type: object
      required:
        - type
        - title
        - status
      description: |
        Error response following RFC 9457 Problem Details.
        Public API error responses use this format.
      example:
        type: https://docs.dakota.xyz/api-reference/errors#not-found
        title: Customer Not Found
        status: 404
        detail: Customer cst_2abc123 was not found in your organization.
        instance: https://api.platform.dakota.xyz/customers/cst_2abc123
        request_id: req_7f3a8b2c
      properties:
        type:
          type: string
          format: uri
          description: |
            URI reference identifying the problem type.
            Resolves to human-readable documentation.
          example: https://docs.dakota.xyz/api-reference/errors#not-found
        title:
          type: string
          description: >-
            Short, human-readable summary of the problem type. Stable across
            occurrences.
          example: Customer Not Found
        status:
          type: integer
          description: HTTP status code for this occurrence.
          example: 404
        detail:
          type: string
          description: Human-readable explanation specific to this occurrence.
          example: Customer cst_2abc123 was not found in your organization.
        instance:
          type: string
          format: uri
          description: The request path that triggered this error.
          example: https://api.platform.dakota.xyz/customers/cst_2abc123
        request_id:
          type: string
          description: Unique request identifier. Include when contacting support.
          example: req_7f3a8b2c
        errors:
          type: array
          description: Field-level validation errors (present for validation failures).
          items:
            $ref: '#/components/schemas/ValidationError'
    InsufficientCreditsError:
      type: object
      description: >-
        Error response when a self-serve client lacks the credits required to
        perform an action.
      required:
        - error
        - message
        - required_cents
        - balance_cents
      properties:
        error:
          type: string
          enum:
            - insufficient_credits
          description: Stable machine-readable error code.
          example: insufficient_credits
        message:
          type: string
          description: >-
            Human-readable explanation including the required and current
            amounts.
          example: >-
            Insufficient credits to submit this application. Required 2500
            cents, balance 500 cents.
        required_cents:
          type: integer
          format: int64
          description: Amount of credits required to perform this action, in USD cents.
          example: 2500
        balance_cents:
          type: integer
          format: int64
          description: Caller's current credit balance, in USD cents.
          example: 500
    ApplicationStatus:
      type: string
      title: Application Status
      description: >
        Current status of an application in the onboarding flow.


        Status flow:

        - `pending` - Initial state, not yet submitted

        - `submitted` - Submitted for verification

        - `under_review` - Being reviewed by compliance team

        - `request_for_information` - Admin requesting additional info/documents
        from applicant

        - `admin_revision` - Admin making corrections to application data

        - `approved` - Application approved

        - `declined` - Application declined

        - `completed` - Legacy status (deprecated, use approved/declined
        instead)

        - `compliance_review` - Application is awaiting compliance review of a
        Proof of Address
          document. Set when an individual applicant uploads a PoA-equivalent document
          (proof_of_address, bank_statement, or utility_bill) after their application has
          already been approved or completed. The customer remains active but is subject to
          the $3,000 USD-equivalent rolling 7-day transaction limit until the review concludes.
      enum:
        - pending
        - submitted
        - under_review
        - request_for_information
        - admin_revision
        - approved
        - declined
        - completed
        - compliance_review
      example: submitted
    ApplicationEntities:
      type: object
      description: The entities (people/businesses) being onboarded in this application
      properties:
        business:
          $ref: '#/components/schemas/BusinessEntity'
          description: Business entity (only present for business applications)
        primary_individual:
          $ref: '#/components/schemas/IndividualEntity'
          description: Primary individual (only present for individual applications)
        associated_individuals:
          type: array
          description: Associated individuals (only present for business applications)
          items:
            $ref: '#/components/schemas/AssociatedIndividualEntity'
    EDDResponse:
      allOf:
        - $ref: '#/components/schemas/EDDRequest'
        - type: object
          required:
            - id
            - business_id
            - created_at
            - updated_at
          properties:
            id:
              $ref: '#/components/schemas/KSUID'
              description: Unique identifier for the EDD record
            business_id:
              $ref: '#/components/schemas/KSUID'
              description: ID of the business this EDD record belongs to
            document_info:
              $ref: '#/components/schemas/DocumentInfo'
              description: >-
                Information about uploaded and missing documents for this EDD
                record (only included when getting EDD directly)
            created_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the EDD record was created
              example: '2025-01-15T10:30:00Z'
            updated_at:
              type: string
              format: date-time
              description: ISO 8601 timestamp when the EDD record was last updated
              example: '2025-01-15T14:45:00Z'
    AttestationData:
      type: object
      description: Attestation records showing what has been attested to
      properties:
        information_accuracy:
          type: object
          description: Information accuracy attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
        terms_of_service:
          type: object
          description: Terms of service attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
        privacy_policy:
          type: object
          description: Privacy policy attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
        funds_transfer_agreement:
          type: object
          description: Funds transfer agreement attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
        lead_bank_privacy_policy:
          type: object
          description: Lead Bank privacy policy attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
        e_sign:
          type: object
          description: E-sign attestation (if completed)
          required:
            - attested_at
            - attested_by
          properties:
            attested_at:
              type: string
              format: date-time
              description: When the attestation was made
              example: '2024-01-17T15:30:00Z'
            attested_by:
              type: string
              description: Name of person who made the attestation
              example: John Doe
    ApplicationValidation:
      type: object
      description: >-
        Complete validation state for an application (computed at retrieval
        time)
      required:
        - ready
        - status_message
        - attestations
      properties:
        ready:
          type: boolean
          description: Whether the application is ready for submission
          example: false
        status_message:
          type: string
          description: Human-readable status message explaining what's needed
          example: >-
            Waiting on: business documents, 2 individuals' documents, and
            attestations
        business:
          $ref: '#/components/schemas/EntityValidation'
          description: Business entity validation (only present for business applications)
        primary_individual:
          $ref: '#/components/schemas/IndividualEntityValidation'
          description: >-
            Primary individual validation (only present for individual
            applications)
        associated_individuals:
          type: array
          description: >-
            Associated individual validations (only present for business
            applications)
          items:
            $ref: '#/components/schemas/IndividualEntityValidation'
        edd:
          $ref: '#/components/schemas/EDDValidation'
          description: EDD validation (only present if EDD is required)
        attestations:
          $ref: '#/components/schemas/AttestationValidation'
          description: Attestation validation
    RiskRating:
      type: object
      description: Risk rating assessment for an application
      required:
        - score
        - num_factors
        - percentage
        - level
        - factors
        - edd_required
        - prohibited
        - version
        - calculated_at
        - data_version
        - config
      properties:
        score:
          type: integer
          description: Sum of all factor values
          example: 7
        num_factors:
          type: integer
          description: Number of factors evaluated
          example: 4
        percentage:
          type: number
          format: double
          description: Risk percentage (0-100)
          example: 62.5
        level:
          type: string
          description: Risk level classification
          enum:
            - low
            - medium
            - high
          example: high
        factors:
          type: array
          description: Detailed breakdown of risk factors
          items:
            type: object
            required:
              - name
              - value
              - level
              - input
              - description
              - reason
              - prohibited
            properties:
              name:
                type: string
                description: Factor name (e.g., 'country_risk', 'industry_risk')
                example: country_risk
              value:
                type: integer
                description: Risk factor value (1=low, 2=medium, 3=high)
                enum:
                  - 1
                  - 2
                  - 3
                example: 3
              level:
                type: string
                description: Risk level for this factor
                enum:
                  - low
                  - medium
                  - high
                example: high
              input:
                type: string
                description: Actual input value (country code, NAICS, etc.)
                example: US
              description:
                type: string
                description: Human-readable description of the factor
                example: Country risk based on incorporation country
              reason:
                type: string
                description: Explanation for this risk level
                example: United States is a low-risk jurisdiction
              prohibited:
                type: boolean
                description: Whether this factor value is prohibited
                example: false
        edd_required:
          type: boolean
          description: Whether Enhanced Due Diligence is required (true if level is high)
          example: true
        prohibited:
          type: boolean
          description: >-
            Whether this entity is prohibited from onboarding (true if any
            factor is prohibited)
          example: false
        prohibited_reason:
          type: string
          description: Reason for prohibition if prohibited is true
          example: Sanctioned country
        version:
          type: string
          description: Risk rating calculation version
          example: v1
        data_version:
          type: string
          description: Risk data version (which CSV files were used)
          example: '2026-01-07'
        config:
          $ref: '#/components/schemas/RiskConfig'
        calculated_at:
          type: string
          format: date-time
          description: When the risk rating was calculated
          example: '2024-01-15T10:30:00Z'
    ComplianceReviewer:
      type: object
      description: A compliance reviewer who can own (be assigned) applications.
      required:
        - user_id
        - first_name
        - last_name
        - email
      properties:
        user_id:
          type: string
          format: ksuid
          description: client_user ID of the reviewer
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3d
        first_name:
          type: string
          example: Priya
        last_name:
          type: string
          example: Shah
        email:
          type: string
          format: email
          example: priya@dakota.xyz
    PartnerAttestationRequirement:
      type: object
      description: >
        A single outstanding partner disclosure the customer must accept online,

        keyed by an opaque terms key + version — never a partner identifier.
        Rendered

        in the hosted attestations UI; accepted via POST
        /applications/{id}/attestations

        with disclosure_id = key and disclosure_version = version.
      required:
        - disclosure_id
        - disclosure_version
        - title
      properties:
        disclosure_id:
          type: string
          description: >-
            The partner disclosure terms key to accept (the opaque join key the
            provider declared, e.g. partner_disclosures). Never a partner name.
          example: partner_disclosures
        disclosure_version:
          type: string
          description: >-
            The version of the disclosure being accepted. Pass back verbatim as
            disclosure_version.
          example: 2026-06
        title:
          type: string
          description: Human-readable label for the disclosure to show the customer.
          example: Partner Disclosures
        url:
          type: string
          description: >
            Optional. Where the disclosure content / acceptance lives — the
            token-gated

            hosted onboarding URL for this application (a real redirect target).
            Absent

            when no usable link is resolvable.
          example: >-
            https://apply.dakota.xyz/applications/2hCjxJzUAW6JVRkZqaF9E0KpM3a/attestations
    EDDInfo:
      type: object
      description: Enhanced Due Diligence information for business applications
      required:
        - required
        - ready
        - document_info
      properties:
        required:
          type: boolean
          description: Whether EDD is required for this application
          example: true
        edd_id:
          type: string
          description: EDD record ID (null if EDD information not yet provided)
          nullable: true
          example: 2KPQgUCj09jSdGSdYMqaS3Z3C8r
        ready:
          type: boolean
          description: Whether EDD is complete (both form fields and documents)
          example: false
        document_info:
          $ref: '#/components/schemas/DocumentInfo'
    ApplicationEntity:
      type: object
      description: >-
        An entity (business or individual) associated with an application,
        including document status
      required:
        - applicant_type
        - applicant_id
        - document_info
        - ready
      properties:
        applicant_type:
          type: string
          description: Type of applicant
          enum:
            - business
            - individual
          example: individual
        applicant_id:
          type: string
          format: ksuid
          description: ID of the business or individual
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
        legal_name:
          type: string
          description: Legal name (present when applicant_type = business)
          example: Acme Corporation
        first_name:
          type: string
          description: First name (present when applicant_type = individual)
          example: John
        last_name:
          type: string
          description: Last name (present when applicant_type = individual)
          example: Doe
        ready:
          type: boolean
          description: Whether this applicant has met all document requirements
          example: true
        document_info:
          $ref: '#/components/schemas/DocumentInfo'
    AttestationType:
      type: string
      description: Type of attestation being submitted
      enum:
        - information_accuracy
        - terms_of_service
        - privacy_policy
        - funds_transfer_agreement
        - lead_bank_privacy_policy
        - e_sign
      example: information_accuracy
    ValidationError:
      type: object
      required:
        - field
        - message
      properties:
        field:
          type: string
          description: Field path using dot notation for nested fields.
          example: bank_account.routing_number
        message:
          type: string
          description: Human-readable description of the field error.
          example: Routing number must be exactly 9 digits
        code:
          type: string
          description: Machine-readable error code for this field.
          example: invalid_format
    BusinessEntity:
      type: object
      description: Business entity data (entity information only, no validation)
      required:
        - id
        - legal_name
        - country_of_incorporation
        - date_of_incorporation
        - legal_structure
        - registration_number
        - registered_address
        - industry_code
        - business_description
        - purpose_of_account
        - average_monthly_revenue
        - expected_monthly_deposit
        - expected_monthly_transaction_volume
        - source_of_funds
      properties:
        id:
          type: string
          format: ksuid
          description: >-
            Business applicant identifier (this is the applicant_id, NOT the
            internal business entity ID)
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
        legal_name:
          type: string
          description: Legal name of the business entity
          example: Acme Corporation
        country_of_incorporation:
          type: string
          description: ISO 3166-1 alpha-2 country code where the business is incorporated
          minLength: 2
          maxLength: 2
          example: US
        date_of_incorporation:
          type: string
          format: date
          description: Date when the business was incorporated
          example: '2020-01-15'
        legal_structure:
          type: string
          description: Legal entity type of the business
          enum:
            - corporation
            - llc
            - general_partnership
            - llp
            - non_profit_foundation
            - trust
            - government_entity
            - sole_proprietorship
          example: llc
        registration_number:
          type: string
          description: Business registration number
          example: '123456789'
        tax_id_number:
          type: string
          description: Tax identification number (optional, required for US entities)
          example: 12-3456789
        dba:
          type: string
          description: Doing Business As name (optional)
          example: Acme Inc
        registered_address:
          $ref: '#/components/schemas/Address'
          description: Registered business address
        operating_address:
          $ref: '#/components/schemas/Address'
          description: Operating business address (optional, if different from registered)
        industry_code:
          type: string
          description: Industry classification code (NAICS or crypto code)
          example: '541511'
        business_description:
          type: string
          description: Detailed description of business activities
          example: Software development and technology consulting services
        purpose_of_account:
          type: array
          description: Intended purposes for the account
          items:
            type: string
          example:
            - first_party_payments
            - business_expenses
        average_monthly_revenue:
          type: string
          description: Expected average monthly revenue range
          example: 1_to_10m
        expected_monthly_deposit:
          type: string
          description: Expected monthly deposit range
          example: 100k_to_500k
        expected_monthly_transaction_volume:
          type: string
          description: Expected monthly transaction volume range
          example: 0_to_10
        source_of_funds:
          type: array
          description: Sources of funds for the business
          items:
            type: string
          example:
            - proprietary_funds
            - customer_funds
        has_bearer_shares:
          type: boolean
          description: Whether the company issues bearer shares
          example: false
        transact_on_behalf_of_third_parties:
          type: boolean
          description: >-
            Whether the business will transact (trading or transmitting funds)
            on behalf of third parties. Triggers EDD requirement if true.
          example: false
        owned_by_foundation:
          type: boolean
          description: Whether the business is owned by a foundation
          example: false
        website:
          type: string
          format: uri
          description: Business website URL (optional)
          example: https://www.acme.com
        business_email:
          type: string
          format: email
          description: Primary business contact email address (optional)
          example: contact@acmecorp.com
        decision:
          type: string
          enum:
            - approved
            - declined
            - auto_declined
            - withdrawn
          nullable: true
          description: Decision on this business entity (if made)
          example: approved
        decision_reason:
          type: string
          nullable: true
          description: Reason for the decision
          example: All verification checks passed
        decision_by:
          type: string
          nullable: true
          description: Email of admin who made the decision
          example: admin@dakota.xyz
        decision_at:
          type: integer
          format: int64
          nullable: true
          description: Unix timestamp when decision was made
          example: 1705315800
        sumsub_verification:
          $ref: '#/components/schemas/SumsubReviewData'
          description: Sumsub verification data for this business entity
    IndividualEntity:
      type: object
      description: Individual entity data (entity information only, no validation)
      required:
        - id
        - first_name
        - last_name
        - date_of_birth
        - nationalities
        - address
        - email_address
      properties:
        id:
          type: string
          format: ksuid
          description: >-
            Individual applicant identifier (this is the applicant_id, NOT the
            internal individual entity ID)
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
        first_name:
          type: string
          description: First name
          example: John
        last_name:
          type: string
          description: Last name
          example: Doe
        date_of_birth:
          type: string
          format: date
          description: Date of birth
          example: '1985-06-15'
        nationalities:
          type: array
          description: ISO 3166-1 alpha-2 country codes for nationalities
          minItems: 1
          items:
            type: string
            minLength: 2
            maxLength: 2
          example:
            - US
        address:
          $ref: '#/components/schemas/Address'
          description: Residential address
        email_address:
          type: string
          format: email
          description: Email address
          example: john.doe@example.com
        phone_number:
          type: string
          description: Phone number (optional)
          example: +1-555-123-4567
        employment_status:
          type: string
          description: Employment status (for individual person type only)
          enum:
            - employed
            - self_employed
            - unemployed
            - student
            - retired
          example: employed
        purpose_of_account:
          type: array
          description: Intended purposes for the account (for individual person type only)
          items:
            type: string
            enum:
              - investing
              - sending_and_receiving_payments
              - storage_of_funds_or_digital_assets
              - making_online_payments
              - trading_on_other_platforms
          example:
            - investing
            - storage_of_funds_or_digital_assets
        source_of_wealth:
          type: array
          description: Sources of wealth (for individual person type only)
          items:
            type: string
            enum:
              - investments
              - employment
              - court_settlement
              - lottery_winnings
              - retirement_income
              - savings
              - sale_of_assets
              - family_funds
              - gambling_winnings
              - gift
              - inheritance
              - insurance_claim
              - loan
              - redundancy_severance
              - benefits
          example:
            - employment
            - savings
        ssn:
          type: string
          description: >-
            Social Security Number (only present for US persons, format
            XXX-XX-XXXX)
          pattern: ^\d{3}-\d{2}-\d{4}$
          example: 123-45-6789
        decision:
          type: string
          enum:
            - approved
            - declined
            - auto_declined
            - withdrawn
          nullable: true
          description: Decision on this individual entity (if made)
          example: approved
        decision_reason:
          type: string
          nullable: true
          description: Reason for the decision
          example: All verification checks passed
        decision_by:
          type: string
          nullable: true
          description: Email of admin who made the decision
          example: admin@dakota.xyz
        decision_at:
          type: integer
          format: int64
          nullable: true
          description: Unix timestamp when decision was made
          example: 1705315800
        sumsub_verification:
          $ref: '#/components/schemas/SumsubReviewData'
          description: Sumsub verification data for this individual entity
    AssociatedIndividualEntity:
      allOf:
        - $ref: '#/components/schemas/IndividualEntity'
        - type: object
          description: >-
            Individual associated with a business (extends IndividualEntity with
            role information)
          required:
            - roles
          properties:
            roles:
              type: array
              description: Role(s) of this individual in relation to the business
              items:
                type: string
                enum:
                  - ubo
                  - control_person
                  - authorized_representative
                  - applicant
              minItems: 1
              example:
                - ubo
                - control_person
            ownership_percentage:
              type: number
              format: double
              description: Ownership percentage (optional, typically provided for UBO role)
              minimum: 0
              maximum: 100
              example: 25.5
            title:
              type: string
              description: Job title
              example: CEO
    EDDRequest:
      type: object
      description: Request to create or update an Enhanced Due Diligence (EDD) record
      required:
        - account_usage_description
      properties:
        account_usage_description:
          type: string
          description: Required description of how the account will be used
          example: Processing payments for e-commerce transactions
        top_customer_countries:
          type: array
          description: List of countries where the majority of customers are located
          items:
            type: string
            description: ISO 3166-1 alpha-2 country code
            minLength: 2
            maxLength: 2
          example:
            - US
            - GB
            - CA
        is_token_issuer:
          type: boolean
          description: Whether the business issues tokens
          example: false
        will_conduct_token_sale:
          type: boolean
          description: Whether the business will conduct a token sale
          example: false
        token_sale_amount_usd:
          type: number
          format: double
          description: Amount to be raised in token sale (USD)
          example: 1000000
        token_sale_availability:
          type: string
          description: Description of token sale availability
          example: Public sale to accredited investors
        token_sale_registration_status:
          type: string
          description: Registration status with relevant authorities
          example: Registered with SEC
        is_regulated:
          type: boolean
          description: Whether the business is regulated by financial authorities
          example: true
        unregulated_justification:
          type: string
          description: >-
            Justification for why the business is not regulated (required if
            is_regulated=false)
          example: Operating in exempt category under local regulations
        country_of_regulation:
          type: string
          description: ISO 3166-1 alpha-2 country code where the business is regulated
          minLength: 2
          maxLength: 2
          example: US
        regulatory_license_type:
          type: string
          description: Type of regulatory license held (required if is_regulated=true)
          example: Money Services Business (MSB)
        verifies_customer_identity:
          type: boolean
          description: Whether the business verifies customer identity (KYC)
          example: true
        has_transaction_monitoring:
          type: boolean
          description: Whether the business has transaction monitoring in place
          example: true
        subject_to_aml_audits:
          type: boolean
          description: Whether the business is subject to AML audits
          example: true
        last_audit_date:
          type: string
          format: date
          description: Date of the last AML audit in YYYY-MM-DD format
          example: '2024-06-30'
          nullable: true
    DocumentInfo:
      type: object
      description: Document status information for an applicant entity
      required:
        - uploaded_documents
        - missing_documents
      properties:
        uploaded_documents:
          type: array
          description: List of documents that have been uploaded for this entity
          items:
            $ref: '#/components/schemas/UploadedDocument'
        missing_documents:
          type: array
          description: List of required documents that haven't been uploaded yet
          items:
            $ref: '#/components/schemas/MissingDocument'
    EntityValidation:
      type: object
      description: Validation state for a business or individual entity
      required:
        - ready
        - details
        - documents
      properties:
        id:
          type: string
          format: ksuid
          description: Applicant ID for matching with entity data
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
        ready:
          type: boolean
          description: Whether this entity is complete (details AND documents)
          example: false
        details:
          $ref: '#/components/schemas/DetailsValidation'
          description: Form field validation status
        documents:
          $ref: '#/components/schemas/DocumentValidation'
          description: Document validation details
    IndividualEntityValidation:
      allOf:
        - $ref: '#/components/schemas/EntityValidation'
        - type: object
          description: >-
            Validation state for an individual entity (includes identifier for
            lookup)
          required:
            - individual_name
          properties:
            individual_name:
              type: string
              description: Name of the individual for display purposes
              example: John Doe
    EDDValidation:
      type: object
      description: Enhanced Due Diligence validation state
      required:
        - required
        - ready
        - details
        - documents
      properties:
        id:
          $ref: '#/components/schemas/KSUID'
          description: EDD record ID (only present if EDD exists)
        required:
          type: boolean
          description: Whether EDD is required for this application
          example: true
        ready:
          type: boolean
          description: Whether EDD is complete (form fields AND documents)
          example: false
        details:
          $ref: '#/components/schemas/DetailsValidation'
          description: EDD form field validation status
        documents:
          $ref: '#/components/schemas/DocumentValidation'
          description: EDD document validation details
    AttestationValidation:
      type: object
      description: Attestation validation state
      required:
        - completed
        - missing
      properties:
        completed:
          type: array
          description: Attestations that have been completed with details
          items:
            $ref: '#/components/schemas/CompletedAttestation'
        missing:
          type: array
          description: Attestation types that are still missing
          items:
            $ref: '#/components/schemas/AttestationType'
          example:
            - terms_of_service
            - privacy_policy
    RiskConfig:
      type: object
      description: Configuration parameters used during risk calculation
      required:
        - threshold_low
        - threshold_high
      properties:
        threshold_low:
          type: number
          format: double
          description: Low to medium risk threshold percentage
          example: 25
        threshold_high:
          type: number
          format: double
          description: Medium to high risk threshold percentage
          example: 50
    Address:
      type: object
      title: Address
      description: >-
        Standardized physical address format used throughout the Dakota platform
        for user and entity addresses.
      required:
        - street1
        - city
        - country
      properties:
        street1:
          type: string
          description: Primary street address line
          example: 123 Main St
        street2:
          type: string
          description: >-
            Secondary address information such as apartment, suite, or unit
            number
          example: Apt 4B
        street3:
          type: string
          description: Additional address information like building name or floor
          example: Building C
        city:
          type: string
          description: City or locality name
          example: San Francisco
        region:
          type: string
          description: Full name of state, province, or region
          example: California
        postal_code:
          type: string
          description: Postal or ZIP code
          example: '94105'
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code (two-letter country code)
          example: US
          minLength: 2
          maxLength: 2
    SumsubReviewData:
      type: object
      description: Sumsub review information for a specific entity
      required:
        - applicant_id
        - provider_applicant_id
        - entity_type
      properties:
        applicant_id:
          type: string
          format: ksuid
          description: >-
            Dakota applicant ID (business_applicant_id or
            individual_applicant_id)
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3b
        provider_applicant_id:
          type: string
          description: Sumsub's applicant ID
          example: 65a1b2c3d4e5f6g7h8i9j0k1
        entity_type:
          type: string
          enum:
            - business
            - individual
          description: Type of entity
          example: individual
        type:
          type: string
          description: Sumsub applicant type (e.g., 'company', 'individual')
          example: individual
        decision:
          type: string
          enum:
            - approved
            - declined
            - auto_declined
            - withdrawn
          nullable: true
          description: Current decision from Dakota database
          example: approved
        decision_reason:
          type: string
          nullable: true
          description: Reason for the decision
          example: All verification checks passed
        decision_by:
          type: string
          nullable: true
          description: Email of user who made the decision
          example: admin@dakota.xyz
        decision_at:
          type: integer
          format: int64
          nullable: true
          description: Unix timestamp when decision was made
          example: 1705315800
        review:
          $ref: '#/components/schemas/SumsubReview'
          description: Sumsub verification review details
        risk_labels:
          $ref: '#/components/schemas/SumsubRiskLabels'
          description: Risk labels identified by Sumsub
    UploadedDocument:
      type: object
      description: Simplified document information for application entities
      required:
        - document_id
        - document_type
        - status
        - uploaded_at
      properties:
        document_id:
          type: string
          format: ksuid
          description: Unique document identifier
          example: 2hCjxJzUAW6JVRkZqaF9E0KpM3a
        document_type:
          type: string
          description: Type of document
          enum:
            - articles_of_incorporation
            - certificate_of_good_standing
            - corporate_registry_extract
            - shareholder_registry
            - source_of_funds
            - bank_reference_letter
            - operating_agreement
            - certificate_of_incorporation
            - passport
            - drivers_license_front
            - drivers_license_back
            - residence_permit_front
            - residence_permit_back
            - source_of_wealth
            - bank_statement
            - regulatory_license
            - aml_audit_report
          example: passport
        status:
          type: string
          description: Upload/verification status
          enum:
            - uploaded
            - pending_verification
            - verified
            - rejected
          example: uploaded
        uploaded_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the EDD record was created
          example: '2025-01-15T10:30:00Z'
    MissingDocument:
      type: object
      description: >-
        Information about a missing document the applicant has not yet uploaded.
        Includes both required documents (whose absence blocks readiness) and
        optional ones (e.g. Proof of Address for individuals when the
        PoA-optional flow is enabled — surfaced so the UI can render an upload
        affordance without gating submission).
      required:
        - purpose
        - accepted_types
        - description
      properties:
        purpose:
          type: string
          description: The purpose this document serves in the onboarding requirements
          enum:
            - business_formation
            - business_bylaws
            - business_proof_of_address
            - business_source_of_funds
            - business_nature_of_business
            - business_shareholder_registry
            - individual_identity
            - individual_proof_of_address
            - individual_source_of_wealth
            - edd_regulatory_license
            - edd_financial_docs
            - edd_aml_audit
          example: business_formation
        accepted_types:
          type: array
          description: >-
            Document type identifiers that can satisfy this requirement.
            Single-option requirements have one element, multi-option
            requirements have multiple.
          items:
            type: string
            enum:
              - articles_of_incorporation
              - certificate_of_good_standing
              - corporate_registry_extract
              - shareholder_registry
              - source_of_funds
              - bank_reference_letter
              - operating_agreement
              - certificate_of_incorporation
              - proof_of_address
              - utility_bill
              - pitch_deck
              - marketing_material
              - business_plan
              - memorandum
              - articles_of_association
              - crypto_statement
              - investment_statement
              - subscription_agreement
              - safe_agreement
              - convertible_note
              - loan_agreement
              - promissory_note
              - passport
              - drivers_license_front
              - drivers_license_back
              - residence_permit_front
              - residence_permit_back
              - source_of_wealth
              - bank_statement
              - regulatory_license
              - aml_audit_report
              - payslip
              - employment_contract
              - shareholders_agreement
              - income_verification_letter
              - savings_statement
          example:
            - articles_of_incorporation
        description:
          type: string
          description: Human-readable description of the document requirement
          example: Articles of Incorporation or equivalent formation document
        required:
          type: boolean
          description: >-
            Whether this document must be uploaded for the application to be
            ready for review. When false, the document is optional — typically
            because an alternative gating mechanism applies (e.g. the
            post-onboarding $3,000 / 7-day rolling-window threshold for Proof of
            Address on individual applications under the PoA-optional flow).
          example: true
    DetailsValidation:
      type: object
      description: Form field validation status
      required:
        - ready
        - missing_fields
      properties:
        ready:
          type: boolean
          description: Whether all required form fields are filled and valid
          example: false
        missing_fields:
          type: array
          description: Field names that are invalid or missing
          items:
            type: string
          example:
            - legal_structure
            - date_of_incorporation
            - business_description
    DocumentValidation:
      type: object
      description: Document validation status for an entity
      required:
        - uploaded_documents
        - missing_documents
        - ready
      properties:
        uploaded_documents:
          type: array
          description: Documents that have been uploaded
          items:
            $ref: '#/components/schemas/UploadedDocument'
        missing_documents:
          type: array
          description: >-
            Documents that are still required (grouped by purpose with accepted
            types)
          items:
            $ref: '#/components/schemas/MissingDocument'
        ready:
          type: boolean
          description: Whether all required documents have been uploaded
          example: false
    CompletedAttestation:
      type: object
      description: Details of a completed attestation
      required:
        - type
        - attested_at
        - attested_by
      properties:
        type:
          $ref: '#/components/schemas/AttestationType'
        attested_at:
          type: string
          format: date-time
          description: When the attestation was made
          example: '2024-01-17T15:30:00Z'
        attested_by:
          type: string
          description: Name of person who made the attestation
          example: John Doe
    SumsubReview:
      type: object
      description: Sumsub verification review details
      properties:
        review_id:
          type: string
          description: Unique review identifier
          example: 65a1b2c3d4e5f6g7h8i9j0k1
        attempt_id:
          type: string
          description: Verification attempt identifier
          example: 65a1b2c3d4e5f6g7h8i9j0k2
        attempt_cnt:
          type: integer
          description: Number of verification attempts
          example: 1
        level_name:
          type: string
          description: Verification level name
          example: basic-kyc-level
        create_date:
          type: string
          description: When review was created (ISO 8601)
          example: '2024-01-15T10:30:00Z'
        review_date:
          type: string
          nullable: true
          description: When review was completed (ISO 8601)
          example: '2024-01-15T14:45:00Z'
        review_status:
          type: string
          enum:
            - init
            - pending
            - prechecked
            - queued
            - completed
            - onHold
          description: Current status of the review
          example: completed
        review_result:
          $ref: '#/components/schemas/SumsubReviewResult'
          description: Sumsub review result details
    SumsubRiskLabels:
      type: object
      description: Risk labels identified by Sumsub
      properties:
        device:
          type: array
          items:
            type: string
          description: Device-related risk indicators
          example:
            - EMULATOR
            - VPN
        cross_check:
          type: array
          items:
            type: string
          description: Cross-check risk indicators
          example:
            - FAKE_ID
            - BLACKLIST
        attempt_id:
          type: string
          description: Associated attempt ID
          example: 65a1b2c3d4e5f6g7h8i9j0k2
        created_at:
          type: string
          description: When risk labels were created
          example: '2024-01-15T10:30:00Z'
    SumsubReviewResult:
      type: object
      description: Sumsub review result details
      properties:
        review_answer:
          type: string
          enum:
            - GREEN
            - RED
            - YELLOW
          description: Review outcome (GREEN = passed, RED = failed, YELLOW = needs review)
          example: GREEN
        reject_labels:
          type: array
          items:
            type: string
          description: Reasons for rejection if review_answer is RED
          example:
            - DOCUMENT_TEMPLATE
            - FRAUDULENT_PATTERNS
        reject_type:
          type: string
          description: Type of rejection
          example: FINAL
        button_ids:
          type: array
          items:
            type: string
          description: IDs of buttons clicked during review
          example:
            - approve
        moderation_comment:
          type: string
          description: Comment from Sumsub moderator
          example: All documents verified successfully
        client_comment:
          type: string
          description: Client comment on the review
          example: Approved for onboarding
  parameters:
    IdempotencyKeyHeader:
      name: x-idempotency-key
      in: header
      required: true
      description: >-
        Unique key to ensure request idempotency. If the same key is used within
        a certain time window, the original response will be returned instead of
        executing the request again.
      schema:
        type: string
        format: uuid
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    ApplicationTokenAuth:
      type: apiKey
      in: header
      name: X-Application-Token
      description: >
        Application-specific token for public URL access. Generated when a
        customer is created.

        Provides access to a single application without requiring an API key.

        Token is valid for 30 days and rate-limited to 250 requests per hour.

````