Smile Identity Enhanced KYC API

The Enhanced KYC API from Smile Identity — 1 operation(s) for enhanced kyc.

OpenAPI Specification

smile-identity-enhanced-kyc-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Smile ID V3 Authentication Enhanced KYC API
  version: 1.0.0
  description: 'Smile ID V3 identity verification API for Africa: Biometric KYC, Document Verification, Enhanced KYC/Doc Verification, SmartSelfie enrollment/authentication/compare, plus core service and user resources. Assembled verbatim from the per-endpoint OpenAPI fragments published in the Smile ID GitBook API reference (docs.usesmileid.com/api-reference).'
  contact:
    name: Smile ID Support
    url: https://docs.usesmileid.com/
  x-logo:
    url: https://smileidentity.com
servers:
- url: https://api.smileidentity.com
  description: Production
- url: https://api.sandbox.smileidentity.com
  description: Sandbox
security:
- SmileIDToken: []
tags:
- name: Enhanced KYC
paths:
  /v3/enhanced_kyc:
    post:
      operationId: submitEnhancedKyc
      tags:
      - Enhanced KYC
      summary: Submit Enhanced KYC verification
      description: Allows submission of Enhanced KYC verification requests and processes the verification asynchronously against the relevant ID authority. Results are delivered via callback URL.
      parameters:
      - name: SmileID-Source-SDK
        in: header
        required: false
        description: Source SDK identifier.
        schema:
          type: string
      - name: SmileID-Source-SDK-Version
        in: header
        required: false
        description: Source SDK version.
        schema:
          type: string
      - name: SmileID-Timestamp
        in: header
        required: false
        description: ISO 8601 timestamp used as the salt when computing SmileID-Request-Signature. Required when your Smile ID account is configured to use SDK/partner secret HMAC authentication.
        schema:
          type: string
          format: date-time
      - name: SmileID-Request-Signature
        in: header
        required: false
        description: HMAC signature of the raw HTTP request body, computed with your SDK/partner secret and the value of SmileID-Timestamp as salt. Required when your Smile ID account is configured to use SDK/partner secret HMAC authentication.
        schema:
          type: string
      - name: User-ID
        in: header
        required: false
        description: Partner-provided user identifier. If omitted, a TypeID is generated automatically.
        schema:
          type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/EnhancedKycRequest'
      responses:
        '202':
          description: Accepted — verification submitted for async processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptedResponse'
        '400':
          description: Bad Request — validation error in request body or headers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized — invalid or missing authentication credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: Payment Required — insufficient wallet balance.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden — partner not authorized for this product, ID type, or IP.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Content Too Large — an uploaded file exceeds the size limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '415':
          description: Unsupported Media Type — request must be multipart/form-data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too Many Requests — rate limit exceeded for this ID number.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    Consent:
      type: object
      required:
      - granted
      - granted_at
      - notice_language
      - notice_privacy_policy_url
      properties:
        granted:
          type: boolean
          enum:
          - true
        granted_at:
          type: string
          format: date-time
        notice_language:
          type: string
          minLength: 2
          maxLength: 2
          pattern: ^[A-Z]{2}$
        notice_privacy_policy_url:
          type: string
          format: uri
    AcceptedResponse:
      type: object
      properties:
        status:
          type: string
          enum:
          - Accepted
        message:
          type: string
        job_id:
          type: string
        user_id:
          type: string
        created_at:
          type: string
          format: date-time
    EnhancedKycRequest:
      type: object
      required:
      - country
      - id_type
      - id_number
      - user_details
      - consent
      properties:
        country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2 country code (uppercase).
        id_type:
          type: string
          description: ID document type (e.g., NIN, BVN, DRIVERS_LICENSE).
        id_number:
          type: string
          description: ID document number. Must match the regex format for the country/id_type.
        user_details:
          type: object
          required:
          - given_names
          - last_name
          description: Consumer-stated PII fields for the user. Either email or phone_number must be provided.
          properties:
            given_names:
              type: string
              minLength: 1
              description: Given names of the individual.
            last_name:
              type: string
              minLength: 1
              description: Last name / surname of the individual.
            email:
              type: string
              format: email
              nullable: true
              description: Email address. At least one of email or phone_number is required.
            phone_number:
              type: string
              pattern: ^\+[1-9]\d{6,14}$
              nullable: true
              description: Phone number in E.164 format (must start with +). At least one of email or phone_number is required.
        consent:
          $ref: '#/components/schemas/Consent'
        callback_url:
          type: string
          format: uri
          description: URL to receive the async result callback. Falls back to partner default if omitted. Must be on the partner's allowed callback domains list.
        bank_code:
          type: string
          description: Bank code (required for certain ID types like BANK_ACCOUNT).
        operator:
          type: string
          description: Telecom operator (required for certain ID types).
        partner_params:
          type: object
          additionalProperties:
            type: string
          description: Arbitrary key-value metadata for partner reference.
        metadata:
          type: array
          description: Additional metadata entries.
          items:
            type: object
            required:
            - name
            - value
            properties:
              name:
                type: string
                maxLength: 100
              value:
                type: string
                maxLength: 1000
    ErrorResponse:
      type: object
      required:
      - status
      - message
      properties:
        status:
          type: string
          description: HTTP status text.
        message:
          type: string
          description: Human-readable error message.
  securitySchemes:
    SmileIDToken:
      type: apiKey
      in: header
      name: SmileID-Token
      description: JWT token obtained from `POST /v3/token`.