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

# Submit a KYB business verification for a given tier

> Passthrough to AI Prise. Reuses the business profile from the org's first
uploadKybDocument call, or creates one, then runs subsequent tiers against
it. Business data is forwarded directly and never persisted by Redcoast;
documents are referenced by uploadKybDocument ids. Returns only the
session ID, result, and tier.




## OpenAPI

````yaml https://app.dynamic.xyz/api-docs/public-api.yaml post /organizations/{organizationId}/kyb/verify
openapi: 3.0.1
info:
  title: Dashboard API
  description: Dashboard API documentation
  version: 1.0.0
servers:
  - url: https://app.dynamicauth.com/api/v0
  - url: https://app.dynamic.xyz/api/v0
  - url: http://localhost:3333/api/v0
security: []
tags:
  - name: Analytics
    description: Query usage analytics and event counts for your environment.
  - name: SDK
    description: SDK-facing endpoints consumed by embedded Dynamic clients.
  - name: Server
    description: Server-side SDK endpoints authenticated by environment API tokens.
  - name: Organizations
    description: >-
      Manage organizations — the top-level container for all environments and
      projects.
  - name: Projects
    description: Manage projects that group related environments under an organization.
  - name: Environments
    description: >-
      Manage environments (live and sandbox) where your authentication
      configuration lives.
  - name: Users
    description: List, search, and manage authenticated users within an environment.
  - name: Invites
    description: >-
      Manage invitation links that grant specific external users access to your
      environment.
  - name: Tokens
    description: >-
      Create and manage API tokens used to authenticate requests to the Dynamic
      API.
  - name: Origins
    description: >-
      Configure allowed origins (CORS) for SDK and API access to your
      environment.
  - name: Allowlists
    description: >-
      Manage allowlists to control which wallet addresses or email addresses can
      access your environment.
  - name: Wallets
    description: View and manage wallets linked to users in your environment.
  - name: Members
    description: Manage team members and their roles within an organization.
  - name: Sessions
    description: View and revoke active user sessions within an environment.
  - name: Settings
    description: Read and update environment-level configuration settings.
  - name: Exchanges
    description: >-
      Configure exchange integrations (Coinbase, Binance, etc.) for fiat on-ramp
      within your environment.
  - name: Yield
    description: List yield vaults registered for your environment.
  - name: Providers
    description: >-
      List, enable, disable, and configure authentication providers (OAuth,
      email, wallet, SMS, etc.) for your environment.
  - name: Captcha
    description: >-
      Configure captcha verification (provider, site key, secret key) for your
      environment.
  - name: Gates
    description: >-
      Define access gates that restrict environment entry to users who meet
      specific criteria.
  - name: Chains
    description: >-
      Manage the blockchain networks available for wallet connection in your
      environment.
  - name: Exports
    description: Export user and wallet data from your environment as downloadable files.
  - name: Events
    description: Browse the event log of actions performed within your environment.
  - name: Webhooks
    description: >-
      Create and manage webhooks to receive real-time events (user.created,
      wallet.linked, etc.) at your endpoint.
  - name: Custom Fields
    description: >-
      Define and manage custom metadata fields collected from users at sign-up
      or login.
  - name: MfaSettings
    description: >-
      Configure multi-factor authentication (MFA) policies for your
      organization.
  - name: Mfa
    description: Manage MFA enrollment and verification for individual users.
  - name: CustomHostnames
    description: >-
      Configure custom hostnames for white-labeling the Dynamic authentication
      experience.
  - name: TestAccount
    description: >-
      Manage test accounts used for automated testing and QA within an
      environment.
  - name: NameServices
    description: >-
      Configure name service integrations (ENS, Unstoppable Domains, etc.) for
      human-readable wallet addresses.
  - name: GlobalWallets
    description: >-
      Manage global wallets shared across multiple environments in an
      organization.
  - name: GlobalWalletConnections
    description: Configure which environments can access and use global wallets.
  - name: GlobalWalletAccessControl
    description: Control which users and roles can access and operate global wallets.
  - name: UserApiTokens
    description: >-
      Create and manage user-scoped API tokens for programmatic access on behalf
      of a user.
  - name: Waas
    description: Wallet-as-a-Service endpoints for creating and managing embedded wallets.
  - name: WalletConnect
    description: Configure WalletConnect integration settings for your environment.
  - name: Checkout
    description: >-
      Accept crypto payments and deposits from any wallet. Settle in any token
      you choose.
  - name: Flow
    description: >-
      Accept crypto payments, deposits, and withdrawals. Amount and destination
      are fixed server-side at create; the post-create lifecycle is driven with
      a capability session token.
  - name: FlowAnalytics
    description: >-
      Query aggregated analytics and paginated transaction lists for the Flow
      product.
  - name: Gasless
    description: >-
      Query billing summaries and paginated transaction lists for sponsored
      (gasless) transactions.
  - name: Custom Networks
    description: >-
      Add and manage custom EVM-compatible networks beyond the built-in chain
      list.
  - name: Chainalysis
    description: >-
      Configure Chainalysis integration for blockchain address screening and
      risk assessment.
  - name: Visits
    description: Track and query user visit activity within your environment.
  - name: ExternalJwt
    description: >-
      Configure external JWT providers so existing auth tokens can be used with
      Dynamic.
  - name: SDK Views
    description: >-
      Manage SDK view configurations that customize the appearance of Dynamic
      modals and flows.
  - name: DeeplinkUrls
    description: Configure deep link URLs for mobile app integration with the Dynamic SDK.
  - name: OrganizationSettings
    description: >-
      Read and update organization-level settings such as approval workflow
      configuration.
  - name: AdminActions
    description: >-
      Manage admin action requests that require approval from another
      administrator.
  - name: ClientGrant
    description: |
      OAuth 2.0 Device Authorization Grant flow (RFC 8628) used by first-party
      Dynamic clients (CLI, MCP server, demo apps, IDE plugins) to obtain a
      revocable, 30-day client JWT without ever seeing the user's dashboard
      session token.
  - name: AuthorizedClients
    description: |
      Manage first-party clients (CLI / MCP / demo / IDE plugins) authorized
      to act as a dashboard user. Surfaced under Profile → Authorized Clients.
  - name: Kyb
    description: >-
      Verify a business's identity via AI Prise passthrough and check KYB tier
      status.
  - name: BusinessAccounts
    description: >-
      Administer the business accounts (multi-operator wallet containers) that
      end users create in an environment.
  - name: ScreeningPolicies
    description: >
      Author per-provider address screening policies that map TRM and
      Chainalysis

      signals to block, alert, or allow, plus per-address exceptions. The

      sanctions floor sits underneath every policy and is not configurable.
paths:
  /organizations/{organizationId}/kyb/verify:
    post:
      tags:
        - Kyb
      summary: Submit a KYB business verification for a given tier
      description: >
        Passthrough to AI Prise. Reuses the business profile from the org's
        first

        uploadKybDocument call, or creates one, then runs subsequent tiers
        against

        it. Business data is forwarded directly and never persisted by Redcoast;

        documents are referenced by uploadKybDocument ids. Returns only the

        session ID, result, and tier.
      operationId: submitKybVerification
      parameters:
        - $ref: '#/components/parameters/organizationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KybVerifyRequest'
      responses:
        '200':
          description: Verification submitted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KybVerifyResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: >-
            A KYB verification for this org+tier is already in progress or
            already approved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KybAlreadyInProgressResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '502':
          $ref: '#/components/responses/BadGateway'
      security:
        - bearerAuth: []
components:
  parameters:
    organizationId:
      in: path
      name: organizationId
      required: true
      description: ID of organization
      schema:
        $ref: '#/components/schemas/uuid'
  schemas:
    KybVerifyRequest:
      type: object
      additionalProperties: false
      required:
        - tier
      properties:
        tier:
          type: string
          description: Tier slug defined in kybTiers.ts (e.g. "basic").
        businessData:
          type: object
          additionalProperties: false
          description: >-
            Business identity data forwarded to AI Prise. Not stored by
            Redcoast.
          properties:
            name:
              type: string
            taxIdentificationNumber:
              type: string
            businessEntityId:
              type: string
            countryCode:
              type: string
              pattern: ^$|^[a-zA-Z]{2}$
              description: 2-letter ISO country code or an empty string when not provided.
            stateCode:
              type: string
            formationDate:
              type: string
              description: >-
                YYYY-MM-DD or an empty string when not provided. Final format
                validation happens in the controller.
            website:
              type: string
              maxLength: 2048
              description: >-
                Website URL. The controller normalizes bare domains to https://
                and rejects non-HTTP(S) schemes.
            addresses:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  addressStreet1:
                    type: string
                  addressStreet2:
                    type: string
                    nullable: true
                  addressCity:
                    type: string
                  addressState:
                    type: string
                  addressZipCode:
                    type: string
                  addressCountry:
                    type: string
            phoneNumbers:
              type: array
              items:
                type: string
            emailAddresses:
              type: array
              items:
                type: string
            entityType:
              type: string
              description: >-
                Optional business entity type. Currently only
                SOLE_PROPRIETORSHIP is supported; omit for a registered
                business. AI Prise has no entity_type field, so this is mapped
                to a `tags` entry instead.
              enum:
                - SOLE_PROPRIETORSHIP
        documentIds:
          type: array
          description: >-
            AI Prise document ids returned by uploadKybDocument. Upload each
            document first, then reference its id here.
          maxItems: 5
          items:
            type: string
        officers:
          type: array
          description: >-
            Business officers/directors. Not stored by Redcoast — each entry
            registers a related person and starts their own KYC verification
            session.
          maxItems: 50
          items:
            type: object
            required:
              - fullName
              - role
            additionalProperties: false
            properties:
              fullName:
                type: string
              emailAddress:
                type: string
              role:
                type: string
                description: One of DIRECTOR | BENEFICIAL_OWNER | OFFICER | SECRETARY.
        additionalInfo:
          type: array
          description: >-
            Officer PII and document references forwarded to AI Prise. Not
            stored by Redcoast.
          maxItems: 5
          items:
            type: object
            required:
              - additionalInfoType
              - additionalInfoData
            additionalProperties: false
            properties:
              additionalInfoType:
                type: string
              additionalInfoData:
                $ref: '#/components/schemas/KybAdditionalInfoData'
    KybVerifyResponse:
      type: object
      required:
        - verificationSessionId
        - verificationResult
        - tier
      properties:
        verificationSessionId:
          type: string
        verificationResult:
          $ref: '#/components/schemas/KybVerificationResultEnum'
        tier:
          type: string
    KybAlreadyInProgressResponse:
      type: object
      required:
        - error
        - code
      additionalProperties: false
      properties:
        error:
          type: string
          description: >-
            Human-readable message identifying why a new KYB submission for this
            org+tier was rejected.
        code:
          type: string
          enum:
            - KYB_ALREADY_IN_PROGRESS
            - KYB_ALREADY_APPROVED
    uuid:
      type: string
      pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
      minLength: 36
      maxLength: 36
      example: 95b11417-f18f-457f-8804-68e361f9164f
    KybAdditionalInfoData:
      type: object
      description: >-
        Text or document value for an additional info entry. Forwarded to AI
        Prise; not stored by Redcoast.
      additionalProperties: false
      properties:
        value:
          type: string
          description: Plain text value (e.g. officer name/email).
          maxLength: 1000
        fileId:
          type: string
          description: >-
            AI Prise document id returned by uploadKybDocument, for an entry
            whose value is a document rather than text.
    KybVerificationResultEnum:
      type: string
      enum:
        - APPROVED
        - DECLINED
        - DRAFT
        - REVIEW
        - PENDING
        - REOPENED
        - UNKNOWN
    BadRequest:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
        code:
          description: >-
            Machine-readable reason for the 400, set only by endpoints that
            distinguish rejections.
          type: string
          example: exchange_currency_unsupported
    Unauthorized:
      type: object
      properties:
        error:
          description: Human-readable error message describing the authentication failure
          type: string
          example: No jwt provided!
    Forbidden:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Access Forbidden
        code:
          description: >-
            Machine-readable reason for the 403, set only by endpoints that
            distinguish rejections. Flow endpoints use sanctions_blocked,
            session_token_invalid and risk_blocked.
          type: string
          example: sanctions_blocked
    NotFound:
      type: object
      required:
        - error
        - code
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Not Found
        code:
          description: >-
            Machine-readable error code. Flow endpoints use not_found when the
            flow doesn't exist in the environment, and exchange_not_configured
            when the requested exchange isn't set up for the environment.
          type: string
          example: not_found
    TooManyRequests:
      type: object
      properties:
        error:
          description: Human-readable error message indicating rate limit exceeded
          type: string
          example: Too Many Requests
    InternalServerError:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Internal Server Error
    BadGateway:
      type: object
      properties:
        error:
          description: Human-readable error message
          type: string
          example: Error from Snowflake service
        code:
          description: >-
            Machine-readable reason for the 502, set only by endpoints that
            distinguish rejections. Flow endpoints use exchange_unavailable.
          type: string
          example: exchange_unavailable
      required:
        - error
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequest'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Forbidden'
    NotFound:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'
    TooManyRequests:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequests'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
    BadGateway:
      description: Bad Gateway
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadGateway'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

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