dLocal KYC Verifications API

Create and manage KYC verifications across remittance, payouts-on-hold, payins-on-hold, and standalone flows. Receives asynchronous status updates via webhook.

dLocal KYC Verifications API is one of 9 APIs that dLocal publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include KYC, Compliance, and Verifications. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, sample payloads, and 1 Naftiko capability spec.

OpenAPI Specification

d-local-kyc-verifications-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: dLocal KYC Verifications API
  version: '1.0'
  description: |
    Create and manage KYC verifications across payment flows: remittances,
    payouts on hold, payins on hold, and standalone verifications.
    Verification results are delivered asynchronously via webhook.
servers:
  - url: https://api.dlocal.com
    description: Production
  - url: https://sandbox.dlocal.com
    description: Sandbox
tags:
  - name: Verifications
    description: Create and inspect KYC verifications.
  - name: Documents
    description: Upload and retrieve verification documents.
paths:
  /verifications:
    post:
      tags: [Verifications]
      operationId: createVerification
      summary: Create A Verification
      description: Submit a KYC verification (remitter, beneficiary, or standalone).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerificationRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/VerificationRequest'
      responses:
        '200':
          description: Verification created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Verification'
        '400':
          description: Invalid request format
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
  /verifications/{verification_id}:
    get:
      tags: [Verifications]
      operationId: getVerification
      summary: Get A Verification
      parameters:
        - name: verification_id
          in: path
          required: true
          schema: { type: string, format: uuid }
      responses:
        '200':
          description: Verification returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Verification'
  /verifications/{verification_id}/state:
    patch:
      tags: [Verifications]
      operationId: updateVerificationState
      summary: Update Verification State
      parameters:
        - name: verification_id
          in: path
          required: true
          schema: { type: string, format: uuid }
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                state: { type: string }
      responses:
        '200':
          description: Verification state updated
  /verifications/{verification_id}/documents:
    get:
      tags: [Documents]
      operationId: getVerificationDocuments
      summary: Get Verification Documents
      parameters:
        - name: verification_id
          in: path
          required: true
          schema: { type: string, format: uuid }
      responses:
        '200':
          description: Documents returned
  /verifications/{verification_id}/documents/{document_id}:
    patch:
      tags: [Documents]
      operationId: updateVerificationDocument
      summary: Update A Verification Document
      parameters:
        - name: verification_id
          in: path
          required: true
          schema: { type: string, format: uuid }
        - name: document_id
          in: path
          required: true
          schema: { type: string }
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file: { type: string, format: binary }
      responses:
        '200':
          description: Document updated
components:
  schemas:
    VerificationRequest:
      type: object
      required: [type, notification_url, attributes]
      properties:
        type:
          type: string
          enum: [REMITTANCE, STANDALONE]
        notification_url:
          type: string
          format: uri
        attributes:
          type: object
          description: Client information attributes (name, document, country, etc.)
        flow:
          type: string
          enum: [remitter, beneficiary, standalone]
    Verification:
      type: object
      properties:
        id: { type: string, format: uuid }
        type: { type: string }
        status:
          type: string
          enum: [PENDING, APPROVED, REJECTED, EXPIRED]
        status_detail: { type: string }
        created_date: { type: string, format: date-time }
        expiration_date: { type: string, format: date-time }
        attributes: { type: object }
  securitySchemes:
    dLocalSignature:
      type: apiKey
      in: header
      name: Authorization
security:
  - dLocalSignature: []