Cómo crear comprobantes
Esta página cubre los flujos de creación de comprobantes: individual y masivo.
Flujo individual
POST /v1/receivables
Authorization: Bearer eyJ...
Idempotency-Key: erp-fac-2026-05-15-00012345
Content-Type: application/json
{
"receivableAccountId": 4242,
"amount": 45000.00,
"currencyCode": "ARS",
"receivableType": "INVOICE",
"legalNumber": "0001-00012345",
"issueDate": "2026-05-15",
"dueDate": "2026-05-30",
"description": "Pedido 5678 - 12 cajas"
}
Campos del request
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
receivableAccountId | int64 | Sí | Cuenta sobre la que se emite |
amount | decimal positivo | Sí | Monto, siempre positivo. El signo contable lo da receivableType |
currencyCode | string | Sí | Debe coincidir con la moneda de la cuenta |
receivableType | enum | Sí | Ver tipos |
clientId | int64 | No | Default: el de la cuenta. Pasarlo solo si difiere |
associateId | int64 | No | Operador que registra. Si la cuenta no tiene operador, este valor lo vincula post-hoc |
parentReceivableId | int64 | Solo para tipos con signo negativo | Comprobante original que este modifica/cancela |
legalNumber | string | No | Número del comprobante AFIP |
description | string | No | Texto libre |
externalRoutingCode | string | No | Código de hoja de ruta |
issueDate | YYYY-MM-DD | No | Fecha del comprobante |
dueDate | YYYY-MM-DD | No | Vencimiento |
receivableDate | YYYY-MM-DD | No | Default: hoy |
attachmentUri | URL | No | Adjunto del comprobante |
invoiceData.* | object | No | Datos AFIP (versión, punto de venta, CAE, etc.) |
Respuesta
201 Created
Location: /v1/receivables/99001
Content-Type: application/json
{
"id": 99001,
"receivableAccountId": 4242,
"clientId": 1042,
"associateId": null,
"amount": 45000.00,
"currencyCode": "ARS",
"receivableType": "INVOICE",
"status": "PENDING",
"legalNumber": "0001-00012345",
"description": "Pedido 5678 - 12 cajas",
"issueDate": "2026-05-15",
"dueDate": "2026-05-30",
"receivableDate": "2026-05-15",
"creationDate": "2026-05-15T10:00:00-03:00",
"modificationDate": "2026-05-15T10:00:00-03:00"
}
Diagrama de secuencia
Vinculación post-hoc del operador
Si la cuenta está en Patrón A (solo clientId) y este es el primer comprobante que carga un chofer en esa cuenta, podés pasar associateId en el comprobante y la cuenta queda automáticamente vinculada al asociado (transición a Patrón C). Útil para flujos donde la asignación de chofer-cliente surge orgánicamente.
POST /v1/receivables
Idempotency-Key: ...
{
"receivableAccountId": 4242,
"amount": 45000.00,
"currencyCode": "ARS",
"receivableType": "INVOICE",
"associateId": 88
}
Ver más en vinculación post-hoc.
Casos relacionados
- Crear muchos comprobantes a la vez (cierre de jornada, importación inicial): ver Alta masiva de comprobantes.
- Notas de crédito, devoluciones, ajustes, retenciones: ver Registrar notas de crédito y ajustes.
- Imputar un cobro entrante a un comprobante: ver Imputar cobros entrantes a comprobantes.
Errores comunes
| Escenario | HTTP | code |
|---|---|---|
amount <= 0 | 400 | validation |
currencyCode no coincide con la cuenta | 422 | unmatching-receivable-currency-code |
receivableAccountId apunta a una cuenta de otro customer | 403 | resource-not-accessible |
| Cuenta no habilitada para comprobantes (es una MAIN/SUB) | 422 | current-account-not-receivable-enabled |
parentReceivableId requerido para tipos negativos pero no enviado | 422 | missing-parent-receivable |
clientId distinto al de la cuenta | 422 | unmatching-receivable-client-id |
| Mismo Idempotency-Key con body distinto | 409 | idempotency-key-reuse |
Modificaciones posteriores
Un comprobante en estado PENDING se puede modificar con PUT /v1/receivables/{id} (limitado a ciertos campos: description, dueDate, attachmentUri, externalRoutingCode).
Para cambiar el estado, usar PATCH /v1/receivables/{id}/status — ver Lifecycle.
Si el comprobante ya está en un estado terminal (PAID, SETTLED, EXPIRED, DISABLED), el PUT devuelve 422 updating-receivable-final-status.