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

# Send DIAN Event (Single)

> Valida y encola un único evento DIAN (`030` Acuse de recibo, `031` Reclamo, `032` Recibo del bien, `033` Aceptación expresa, `034` Aceptación tácita) para el documento identificado por su CUFE (`document_fiscal_reference`).

El procesamiento es **asíncrono**: la respuesta `200` indica que el evento fue persistido localmente en estado `processing` y encolado en background — no que la DIAN ya lo haya aceptado. El estado final se puede consultar con `GET /documents?fields=invoice_reception_events` (más adelante también vía webhook).

Los eventos de **reclamo (`031`)** requieren `response_code_list_id` y `description_claim`, y **solo** pueden enviarse por este endpoint (no se aceptan en `/events/batch`).



## OpenAPI

````yaml POST /events/single
openapi: 3.1.0
info:
  title: Payana Accounts Payable API
  description: >-
    API pública para gestionar cuentas por pagar (payments) y beneficiarios
    (beneficiaries) en Payana, incluyendo notificaciones por webhooks cuando se
    procesan pagos.
  version: 1.0.0
servers:
  - url: https://api.prod.payana.cloud/public/api/v1
    description: Production
  - url: https://api.develop.payana.cloud/public/api/v1
    description: Develop
security:
  - apiKeyAuth: []
tags:
  - name: Payments
    description: Crear y listar pagos
  - name: Beneficiaries
    description: Crear, listar y consultar beneficiarios
  - name: Webhooks
    description: Eventos de webhooks enviados por Payana
  - name: Banks
    description: Listar y consultar bancos
  - name: Transactions In
    description: Transacciones entrantes (polling, mismo formato que webhooks)
  - name: Documents
    description: Listar, consultar y operar documentos (cuentas por pagar)
  - name: DIAN Events
    description: >-
      Encolar eventos DIAN (030 Acuse de recibo, 031 Reclamo, 032 Recibo del
      bien, 033 Aceptación expresa, 034 Aceptación tácita) para documentos
      identificados por CUFE. El procesamiento es asíncrono.
  - name: Fiscal Sync
    description: >-
      Disparar y consultar sincronización de documentos fiscales desde el SAT
      (México) o la DIAN (Colombia).
  - name: Workflow Steps
    description: >-
      Resolver el paso en que está parado un documento dentro de su flujo:
      aprobación, clasificación o etiquetado.
paths:
  /events/single:
    post:
      tags:
        - DIAN Events
      summary: Queue a single DIAN receipt event
      description: >-
        Valida y encola un único evento DIAN (`030` Acuse de recibo, `031`
        Reclamo, `032` Recibo del bien, `033` Aceptación expresa, `034`
        Aceptación tácita) para el documento identificado por su CUFE
        (`document_fiscal_reference`).


        El procesamiento es **asíncrono**: la respuesta `200` indica que el
        evento fue persistido localmente en estado `processing` y encolado en
        background — no que la DIAN ya lo haya aceptado. El estado final se
        puede consultar con `GET /documents?fields=invoice_reception_events`
        (más adelante también vía webhook).


        Los eventos de **reclamo (`031`)** requieren `response_code_list_id` y
        `description_claim`, y **solo** pueden enviarse por este endpoint (no se
        aceptan en `/events/batch`).
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SingleDianEventRequest'
            examples:
              acuse_recibo:
                summary: Acuse de recibo (030)
                value:
                  document_fiscal_reference: >-
                    9d3b1c0a8e2f4b6e9a8c7d1e2f3a4b5c6d7e8f901a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d
                  event_type: '030'
              reclamo:
                summary: Reclamo (031) con motivo y descripción
                value:
                  document_fiscal_reference: >-
                    9d3b1c0a8e2f4b6e9a8c7d1e2f3a4b5c6d7e8f901a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d
                  event_type: '031'
                  response_code_list_id: '02'
                  description_claim: Mercancía no entregada en su totalidad
      responses:
        '200':
          description: Evento aceptado y encolado para procesamiento asíncrono.
          content:
            application/json:
              schema:
                type: object
                properties:
                  document_fiscal_reference:
                    type: string
                    description: Mismo CUFE recibido en el request.
                  message:
                    type: string
                    example: receipt event sent successfully and is being processed
              example:
                document_fiscal_reference: >-
                  9d3b1c0a8e2f4b6e9a8c7d1e2f3a4b5c6d7e8f901a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d
                message: receipt event sent successfully and is being processed
        '400':
          description: >-
            Validación de schema fallida o `event_type=031` enviado sin
            `response_code_list_id` / `description_claim`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Header `api-key` ausente o inválido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            No existe ningún documento con ese CUFE en la compañía asociada a la
            API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                message: Document not found
                code: document_not_found
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    SingleDianEventRequest:
      type: object
      required:
        - document_fiscal_reference
        - event_type
      properties:
        document_fiscal_reference:
          $ref: '#/components/schemas/Cufe'
        event_type:
          $ref: '#/components/schemas/DianEventType'
        response_code_list_id:
          allOf:
            - $ref: '#/components/schemas/DianClaimReasonCode'
            - description: Requerido cuando `event_type=031`.
        description_claim:
          type: string
          description: Descripción libre del reclamo. Requerido cuando `event_type=031`.
    ErrorResponse:
      type: object
      required:
        - success
        - error
      properties:
        success:
          type: boolean
          const: false
        error:
          $ref: '#/components/schemas/ErrorObject'
      example:
        success: false
        error:
          code: VALIDATION_ERROR
          message: The request contains invalid data
          details:
            amount:
              - Amount must be greater than 0
            beneficiary_id:
              - Beneficiary does not exist
    Cufe:
      type: string
      description: >-
        CUFE (Código Único de Factura Electrónica) emitido por la DIAN. Hash
        SHA-384 representado como exactamente 96 caracteres hexadecimales.
      pattern: ^[a-fA-F0-9]{96}$
      minLength: 96
      maxLength: 96
      example: >-
        9d3b1c0a8e2f4b6e9a8c7d1e2f3a4b5c6d7e8f901a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d
    DianEventType:
      type: string
      enum:
        - '030'
        - '031'
        - '032'
        - '033'
        - '034'
      description: >-
        Código del evento DIAN: `030` Acuse de recibo, `031` Reclamo, `032`
        Recibo del bien o servicio, `033` Aceptación expresa, `034` Aceptación
        tácita.
    DianClaimReasonCode:
      type: string
      enum:
        - '01'
        - '02'
        - '03'
        - '04'
      description: >-
        Motivo del reclamo (solo aplica a `event_type=031`): `01` Documento con
        inconsistencias, `02` Mercancía no entregada en su totalidad, `03`
        Mercancía entregada parcialmente, `04` Servicio no prestado.
    ErrorObject:
      type: object
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
        message:
          type: string
        details:
          anyOf:
            - $ref: '#/components/schemas/ErrorDetails'
            - type: 'null'
    ErrorCode:
      type: string
      enum:
        - VALIDATION_ERROR
        - UNAUTHORIZED
        - FORBIDDEN
        - NOT_FOUND
        - CONFLICT
        - RATE_LIMITED
        - INTERNAL_ERROR
    ErrorDetails:
      type: object
      additionalProperties:
        type: array
        items:
          type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: api-key
      description: API key provista por Payana.

````