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

> ## Agent Instructions
> Money amounts are always major-unit decimal strings (e.g. "1000.00"), never floats and never minor units, in every request, response, and webhook payload.
> Authentication is OAuth 2.0 client credentials: exchange the Client ID and Client Secret at the Token URL for a 24-hour JWT and cache it; do not request a token per call.
> Set a unique clientRef on every money-moving request; it is the idempotency key, and retries return the original resource.
> Quotes are single-use, intent-locked, and expire fast: always read expiresAt, consume the quote with the executor matching its intent, and re-quote on expiry instead of retrying.
> Prefer webhooks over polling for payout, order, and deposit status tracking.
> Use the sandbox (api.sandbox.zuba.com) with its deterministic magic values before touching production.

# Submit (or resubmit) an application for review

> The single explicit state transition: draft → under_review, or resubmit of a more_info_requested application.



## OpenAPI

````yaml /openapi.json post /v2/applications/{id}/submit
openapi: 3.0.0
info:
  contact: {}
  description: >-
    Comprehensive payment platform API supporting fiat and crypto payments,
    currency conversion, and compliance management
  title: Zuba Payment Platform API
  version: '1.0'
servers: []
security: []
tags:
  - description: Manage M2M API keys and credentials
    name: API Keys
  - description: Internal ledger accounts and transactions
    name: Ledger
  - description: Handle incoming payments and deposits
    name: Pay-ins
  - description: Manage payouts, beneficiaries, and SEPA transfers
    name: Payouts
  - description: Manage outbound webhook endpoints and deliveries
    name: Webhooks
paths:
  /v2/applications/{id}/submit:
    post:
      tags:
        - Applications (v2)
      summary: Submit (or resubmit) an application for review
      description: >-
        The single explicit state transition: draft → under_review, or resubmit
        of a more_info_requested application.
      operationId: ApplicationV2Controller_submit
      parameters:
        - in: path
          name: id
          required: true
          schema:
            format: uuid
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationDto'
          description: ''
        '403':
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/GenericErrorResponseDto'
                  - $ref: '#/components/schemas/IncompleteStepsErrorResponseDto'
                  - $ref: '#/components/schemas/MissingDocumentsErrorResponseDto'
          description: >-
            The application is not ready to submit. `error` carries the reason:
            incomplete_steps (body adds `missingSteps`) or missing_documents
            (body adds `missingCompanyDocuments` and `personsWithoutDocuments`).
            An unacknowledged provider disclosure and an application belonging
            to another account both return a generic body.
        '404':
          description: Not found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericErrorResponseDto'
          description: Invalid state transition
      security:
        - bearer: []
components:
  schemas:
    ApplicationDto:
      properties:
        accountId:
          description: The account this application belongs to (self or sub-account).
          format: uuid
          type: string
        applicationType:
          enum:
            - business
            - individual
          type: string
        createdAt:
          format: date-time
          type: string
        editableSections:
          description: >-
            When status is more_info_requested, the sections you may edit and
            resubmit. `applicant` / `businessInfo` / `businessActivity` /
            `individualActivity` are edited via PATCH; `persons` via the
            /persons sub-resource (and covers that person’s own documents);
            `documents` is company-level documents via the /documents
            sub-resource. Empty otherwise.
          items:
            type: string
          type: array
        id:
          format: uuid
          type: string
        moreInfoReason:
          description: >-
            When status is more_info_requested, the reviewer’s notes describing
            what needs to change. Null otherwise.
          type: string
        riskLevel:
          enum:
            - low
            - medium
            - high
            - prohibited
          type: string
        screeningStatus:
          enum:
            - pending
            - in_progress
            - clear
            - flagged
            - failed
            - timed_out
          type: string
        status:
          enum:
            - draft
            - under_review
            - approved
            - more_info_requested
            - rejected
          type: string
      required:
        - id
        - accountId
        - applicationType
        - status
        - createdAt
      type: object
    GenericErrorResponseDto:
      properties:
        error:
          description: Error type identifier
          example: BAD_REQUEST
          type: string
        message:
          description: Error message
          example: Bad Request
          type: string
        path:
          description: Request path that generated the error
          example: /v1/beneficiaries
          type: string
        statusCode:
          description: HTTP status code
          example: 400
          type: number
        timestamp:
          description: ISO timestamp when the error occurred
          example: '2024-01-15T10:30:00.000Z'
          type: string
      required:
        - statusCode
        - message
        - error
        - timestamp
        - path
      type: object
    IncompleteStepsErrorResponseDto:
      properties:
        error:
          description: Error type identifier
          example: incomplete_steps
          type: string
        message:
          description: Error message
          example: Bad Request
          type: string
        missingSteps:
          description: Required onboarding steps that are not complete
          example:
            - documents
            - directors_shareholders
          items:
            type: string
          type: array
        path:
          description: Request path that generated the error
          example: /v1/beneficiaries
          type: string
        statusCode:
          description: HTTP status code
          example: 400
          type: number
        timestamp:
          description: ISO timestamp when the error occurred
          example: '2024-01-15T10:30:00.000Z'
          type: string
      required:
        - statusCode
        - message
        - error
        - timestamp
        - path
        - missingSteps
      type: object
    MissingDocumentsErrorResponseDto:
      properties:
        error:
          description: Error type identifier
          example: missing_documents
          type: string
        message:
          description: Error message
          example: Bad Request
          type: string
        missingCompanyDocuments:
          description: Required company document types that have not been uploaded
          example:
            - certificate_of_incorporation
          items:
            type: string
          type: array
        path:
          description: Request path that generated the error
          example: /v1/beneficiaries
          type: string
        personsWithoutDocuments:
          description: Applicant-owned person records missing required documents
          items:
            $ref: '#/components/schemas/PersonMissingDocumentsDto'
          type: array
        statusCode:
          description: HTTP status code
          example: 400
          type: number
        timestamp:
          description: ISO timestamp when the error occurred
          example: '2024-01-15T10:30:00.000Z'
          type: string
      required:
        - statusCode
        - message
        - error
        - timestamp
        - path
        - missingCompanyDocuments
        - personsWithoutDocuments
      type: object
    PersonMissingDocumentsDto:
      properties:
        personId:
          description: Applicant-owned person record missing required documents
          format: uuid
          type: string
      required:
        - personId
      type: object
  securitySchemes:
    bearer:
      bearerFormat: JWT
      description: Enter Auth0 JWT token
      scheme: bearer
      type: http

````