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

# Submit direct document KYC

> Step 3 of direct document KYC (Option C). Submit identity fields after uploading id_front and selfie (and id_back unless idType is PASSPORT). Apocor forwards the profile and documents to the card program — no identity-provider widget or share token. Poll GET /v1/applicants/{id}/kyc-status until issuerKycReady is true. US addresses require a 9-digit ssn. Applicant email is required.



## OpenAPI

````yaml /openapi.json post /v1/applicants/{id}/kyc-direct
openapi: 3.1.0
info:
  title: Apocor Core API
  version: 1.0.0
  description: >-
    The Apocor Cards API is the integration surface for issuing and managing
    cards. Authenticate with your Apocor API key, onboard applicants, run KYC,
    and issue virtual or physical cards — all through one white-labeled API.
  contact:
    name: Apocor Support
    url: https://apocor.ai
servers:
  - url: https://sandbox.apocor.ai
    description: Sandbox (live)
  - url: https://api.apocor.ai
    description: Production
  - url: http://localhost:4000
    description: Local development
security:
  - bearerAuth: []
tags:
  - name: Authentication
    description: Exchange Apocor API keys for a short-lived access token.
  - name: Applicants
    description: End-users and businesses, plus their identity verification (KYC).
  - name: KYC
    description: >-
      Identity verification settings, hosted sessions, BYOK share tokens, direct
      document upload, and issuer readiness.
    x-group: Identity verification (KYC)
  - name: Accounts
    description: Funding accounts that back issued cards.
  - name: Programs
    description: Card programs that define product type, currency, and BIN.
  - name: Cardholders
    description: Approved applicants turned into cardholders.
  - name: Cards
    description: Issue and manage virtual and physical cards.
  - name: Transactions
    description: Card transaction history from the issuer or local ledger.
  - name: Widget SDK
    description: >-
      Public Apocor-branded proxy for Method 1 Widget.js (no auth). PAN/CVV
      still render in issuer PCI iframes.
  - name: Card funding
    description: >-
      Fund prepaid cards with stablecoins: Apocor wallet service or
      bring-your-own (BYO) external wallet.
    x-group: Card funding
paths:
  /v1/applicants/{id}/kyc-direct:
    post:
      tags:
        - Applicants
        - KYC
      summary: Submit direct document KYC
      description: >-
        Step 3 of direct document KYC (Option C). Submit identity fields after
        uploading id_front and selfie (and id_back unless idType is PASSPORT).
        Apocor forwards the profile and documents to the card program — no
        identity-provider widget or share token. Poll GET
        /v1/applicants/{id}/kyc-status until issuerKycReady is true. US
        addresses require a 9-digit ssn. Applicant email is required.
      operationId: createApplicantsByIdKycDirect
      parameters:
        - $ref: '#/components/parameters/IdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - firstName
                - lastName
                - dateOfBirth
                - gender
                - nationality
                - nationalId
                - idType
                - issueDate
                - expiryDate
                - phoneCountryCode
                - phoneNumber
                - address
              properties:
                firstName:
                  type: string
                lastName:
                  type: string
                dateOfBirth:
                  type: string
                  description: YYYY-MM-DD
                  example: '1990-04-12'
                gender:
                  type: string
                  enum:
                    - M
                    - F
                nationality:
                  type: string
                  description: ISO 3166-1 alpha-2
                nationalId:
                  type: string
                  description: ID / passport number matching idType.
                idType:
                  type: string
                  enum:
                    - CN-RIC
                    - PASSPORT
                    - HK-HKID
                    - DLN
                    - Government-Issued ID Card
                    - EU Residency Permit
                    - UAE Residency Permit
                issueDate:
                  type: string
                  description: YYYY-MM-DD
                expiryDate:
                  type: string
                  description: YYYY-MM-DD
                phoneCountryCode:
                  type: string
                  description: 'Numeric country code without +. Example: 1'
                phoneNumber:
                  type: string
                address:
                  type: object
                  required:
                    - addressLine1
                    - city
                    - state
                    - country
                    - postalCode
                  properties:
                    addressLine1:
                      type: string
                    addressLine2:
                      type: string
                    city:
                      type: string
                    state:
                      type: string
                    country:
                      type: string
                      description: ISO 3166-1 alpha-2
                    postalCode:
                      type: string
                ssn:
                  type: string
                  description: 9-digit US SSN. Required when address.country is US.
                occupation:
                  type: string
                annualSalary:
                  type: string
                accountPurpose:
                  type: string
                expectedMonthlyVolume:
                  type: string
            example:
              firstName: Jane
              lastName: Doe
              dateOfBirth: '1990-04-12'
              gender: F
              nationality: US
              nationalId: A12345678
              idType: PASSPORT
              issueDate: '2020-01-15'
              expiryDate: '2030-01-14'
              phoneCountryCode: '1'
              phoneNumber: '4155550100'
              ssn: '123456789'
              address:
                addressLine1: 123 Main St
                city: New York
                state: NY
                country: US
                postalCode: '10001'
      responses:
        '200':
          description: >-
            Applicant with issuer KYC status. Poll kyc-status until
            issuerKycReady is true.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Applicant'
              example:
                data:
                  id: app_abc123
                  status: PENDING
                  issuerKycStatus: SUBMITTED
                  issuerKycReady: false
        '400':
          $ref: '#/components/responses/BadRequest'
components:
  parameters:
    IdPath:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: Resource identifier.
  schemas:
    Applicant:
      type: object
      description: >-
        An end-user or business. Provider-internal identity references are
        white-labeled away.
      properties:
        id:
          type: string
        orgId:
          type: string
        type:
          type: string
          enum:
            - PERSON
            - BUSINESS
        status:
          type: string
          enum:
            - PENDING
            - APPROVED
            - REVIEW
            - REJECTED
          description: >-
            Single verification verdict. APPROVED means the applicant has fully
            passed identity verification and cards can be issued. PENDING covers
            every in-progress stage; REVIEW means the application needs
            attention; REJECTED is terminal.
        email:
          type:
            - string
            - 'null'
        data:
          type: object
          additionalProperties: true
        createdAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable, machine-readable error code.
            message:
              type: string
              description: Human-readable explanation.
  responses:
    BadRequest:
      description: The request was invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: INVALID_REQUEST
              message: Applicant must be approved
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Bearer access token obtained from `POST /v1/oauth/token` using your
        Apocor API key.

````