Cufy API
Notas de ajuste crédito POS

Admitir PosCreditNote

POST/v1/pos-credit-notes

Estado: parcial. Ambientes: qualification. Permisos: documents:write.

Alcance: Solo qualification, sobre un tiquete P.O.S. propio validado. Consecutivo interno del emisor (tipo pos_credit_note, clase note_sequence) con configuración SendBillSync. Referencia al tiquete por su CUDE con DocumentTypeCode 20; motivos del anexo 1 a 5. Conserva exactamente el comprador del tiquete. No admite customer_id (422 CUSTOMER_ID_NOT_SUPPORTED): el comprador debe repetir el del original.

202 admite una revisión de forma durable y reserva saldo. La DIAN responde después. Mismo Idempotency-Key o referencia equivalente recupera la admisión original sin nueva reserva, aunque el cliente guardado haya cambiado o se haya archivado después. No transmitir si la capability no está habilitada. Solo buyer completo: customer_id responde 422 CUSTOMER_ID_NOT_SUPPORTED porque el comprador debe coincidir con el del original.

Authorization

ClientApiKey
X-API-Key<token>

Secreto ligado a empresa, actor, permisos y ambiente. No admite cambiar empresa por body/header.

In: header

Header Parameters

Idempotency-Key*string

Obligatoria en mutaciones. Alcance: empresa/ambiente/operación/recurso destino. Retención mínima 90 días y mientras haya trabajo pendiente. Mismo contenido recupera resultado; contenido diferente produce 409.

Match^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$
Length1 <= length <= 128

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Nota de ajuste crédito al documento equivalente P.O.S. propio. original_document_id apunta a un tiquete validado, que se referencia por su CUDE. Se numera con la secuencia interna del emisor, sin autorización de numeración DIAN. Motivos del anexo: 1 devolución o no aceptación parcial, 2 anulación del documento equivalente, 3 rebaja o descuento, 4 ajuste de precio, 5 otros. No se aceptan documentos de otro emisor en este perfil.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/pos-credit-notes" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "document_type": "pos_credit_note",    "external_reference": "DEMO-POS-CREDIT-001",    "profile_id": "co-pos-adjustment-cop-v1",    "numbering_range_id": "00000000-0000-4000-8000-000000000014",    "issued_at": "2026-09-11T09:00:00-05:00",    "currency": "COP",    "buyer": {      "party_type": "person",      "identification": {        "type_code": "13",        "number": "1000000000"      },      "name": "Comprador de ejemplo",      "email": "comprador@example.com",      "tax_registration": {        "responsibility_codes": [          "R-99-PN"        ],        "tax_scheme_codes": [          "01"        ]      }    },    "lines": [      {        "id": "1",        "description": "Bandeja paisa, datos ficticios",        "product_identification": {          "scheme_code": "999",          "value": "DEMO-POS-001"        },        "quantity": "2",        "unit_code": "94",        "unit_price": "32000.00",        "price_base_quantity": "1",        "net_amount": "64000.00",        "adjustments": [],        "taxes": [          {            "code": "01",            "rate": "19",            "taxable_amount": "64000.00",            "amount": "12160.00"          }        ],        "withholdings": [],        "original_line_id": "1"      },      {        "id": "2",        "description": "Limonada de coco, datos ficticios",        "product_identification": {          "scheme_code": "999",          "value": "DEMO-POS-002"        },        "quantity": "2",        "unit_code": "94",        "unit_price": "9000.00",        "price_base_quantity": "1",        "net_amount": "18000.00",        "adjustments": [],        "taxes": [          {            "code": "01",            "rate": "19",            "taxable_amount": "18000.00",            "amount": "3420.00"          }        ],        "withholdings": [],        "original_line_id": "2"      }    ],    "adjustments": [],    "tax_totals": [      {        "code": "01",        "rate": "19",        "taxable_amount": "82000.00",        "amount": "15580.00"      }    ],    "withholding_totals": [],    "totals": {      "line_extension_amount": "82000.00",      "tax_exclusive_amount": "82000.00",      "tax_inclusive_amount": "97580.00",      "allowance_total_amount": "0.00",      "charge_total_amount": "0.00",      "prepaid_amount": "0.00",      "payable_rounding_amount": "0.00",      "payable_amount": "97580.00"    },    "payment": {      "terms": "cash",      "means_code": "10"    },    "delivery": {      "mode": "cufy_email",      "recipients": [        "comprador@example.com"      ]    },    "point_of_sale": {      "register_id": "CAJA-01",      "location": "Salón principal",      "cashier": "Cajero de ejemplo",      "register_type": "Caja principal",      "sale_code": "VENTA-000123"    },    "original_document_id": "00000000-0000-4000-8000-000000000022",    "discrepancy_reason": {      "code": "2",      "description": "Anulación de un tiquete P.O.S. de ejemplo"    },    "adjustment_scope": "total"  }'
{  "operation_id": "cb4ede3c-a5d1-45e3-a9d2-fe83accbce52",  "document_id": "b792e8ae-2cb4-4209-85b9-32be4c2fcdd6",  "revision": 1,  "version": 1,  "environment": "simulation",  "external_reference": "string",  "processing_status": "queued",  "dian_status": "not_sent",  "billing_status": "not_reserved",  "created_at": "2019-08-24T14:15:22Z",  "status_url": "../dictionary"}

Admitir PosReceipt POST

**Estado:** parcial. **Ambientes:** qualification. **Permisos:** `documents:write`. **Alcance:** Solo qualification (habilitación DIAN). Tiquete P.O.S. con CUDE sembrado con el PIN del software, pago de contado, adquiriente sin dirección y rango propio autorizado por la DIAN (tipo pos_equivalent, clase authorized_invoice). point_of_sale es obligatorio: sale en la extensión InformacionCajaVenta. La configuración DIAN del rango debe declarar provider_name y software_name (extensión FabricanteSoftware) y la autorización de firma debe incluir pos_equivalent. Alternativa AG-041: customer_id de un cliente guardado activo en lugar de buyer (nunca los dos: BUYER_SOURCE_CONFLICT; ninguno: VALIDATION_ERROR con BUYER_REQUIRED); el documento conserva la copia del comprador al admitirlo y un reintento recupera el mismo documento aunque el cliente cambie. 202 admite una revisión de forma durable y reserva saldo. La DIAN responde después. Mismo Idempotency-Key o referencia equivalente recupera la admisión original sin nueva reserva, aunque el cliente guardado haya cambiado o se haya archivado después. No transmitir si la capability no está habilitada. Acepta buyer completo o customer_id de un cliente guardado activo (nunca los dos): el documento conserva la copia del comprador al admitirlo. customer_id ajeno o inexistente: 404 CUSTOMER_NOT_FOUND; archivado: 409 CUSTOMER_ARCHIVED.

Admitir PosDebitNote POST

**Estado:** parcial. **Ambientes:** qualification. **Permisos:** `documents:write`. **Alcance:** Solo qualification, sobre un tiquete P.O.S. propio validado, con las mismas reglas de la nota débito de factura: sin nota crédito activa ni más de una débito sin resolver. Consecutivo interno del emisor (tipo pos_debit_note) con configuración SendBillSync. Sin prueba de extremo a extremo propia: comparte admisión y firma con la nota de ajuste crédito. No admite customer_id (422 CUSTOMER_ID_NOT_SUPPORTED): el comprador debe repetir el del original. 202 admite una revisión de forma durable y reserva saldo. La DIAN responde después. Mismo Idempotency-Key o referencia equivalente recupera la admisión original sin nueva reserva, aunque el cliente guardado haya cambiado o se haya archivado después. No transmitir si la capability no está habilitada. Solo buyer completo: customer_id responde 422 CUSTOMER_ID_NOT_SUPPORTED porque el comprador debe coincidir con el del original.