> ## 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.

# Get an onboarding application

> Retrieves a specific application. By default returns lightweight status metadata only.
Use the `include` query parameter to request additional sections.

**Include values:**
- `entities` — business/individual applicant data
- `validation` — computed validation state (shows what's missing before submit)
- `edd` — enhanced due diligence data (if applicable)
- `attestations` — attestation records
- `all` — all of the above

Multiple values can be combined as a comma-separated list (e.g. `?include=entities,validation`).

**Authentication:** Accepts Application Token (X-Application-Token header).
Application tokens are scoped to a single application for use in public-facing flows.




## OpenAPI

````yaml /openapi.yaml get /applications/{application_id}
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}:
    get:
      tags:
        - Onboarding
      summary: Get an onboarding application
      description: >
        Retrieves a specific application. By default returns lightweight status
        metadata only.

        Use the `include` query parameter to request additional sections.


        **Include values:**

        - `entities` — business/individual applicant data

        - `validation` — computed validation state (shows what's missing before
        submit)

        - `edd` — enhanced due diligence data (if applicable)

        - `attestations` — attestation records

        - `all` — all of the above


        Multiple values can be combined as a comma-separated list (e.g.
        `?include=entities,validation`).


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

        Application tokens are scoped to a single application for use in
        public-facing flows.
      operationId: getApplication
      parameters:
        - name: application_id
          in: path
          required: true
          description: The unique identifier for the application
          schema:
            $ref: '#/components/schemas/KSUID'
        - name: include
          in: query
          required: false
          description: >-
            Comma-separated list of sections to include in the response
            (entities, validation, edd, attestations, all)
          schema:
            type: string
            example: entities,validation
      responses:
        '200':
          description: Application retrieved 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: Invalid request
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#invalid-request
                title: Invalid request
                status: 400
                detail: Invalid request
                instance: https://api.platform.dakota.xyz/applications/example-id
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '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
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
        '403':
          description: Forbidden
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
              example:
                type: https://docs.dakota.xyz/api-reference/errors#forbidden
                title: Forbidden
                status: 403
                detail: Forbidden
                instance: https://api.platform.dakota.xyz/applications/example-id
                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
                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
                request_id: req_01hzy6y7v8w9x0y1z2a3b4c5d6
      security:
        - ApplicationTokenAuth: []
      externalDocs:
        description: Read full guide in docs
        url: >-
          https://docs.dakota.xyz/api-reference/onboarding/get-an-onboarding-application
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'
    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'
    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
    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
    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
    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
  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.

````