Ir al contenido

Emite una boleta o una factura

POST
/v1/documents
curl https://api.boletura.com/v1/documents \
--request POST \
--header 'Authorization: Bearer bol_test_TU_CLAVE' \
--header 'Idempotency-Key: 2de20fe7-c22e-4c38-a6c1-c2945cb6db01' \
--header 'Content-Type: application/json' \
--data '{
"type": "boleta",
"external_id": "venta-98231",
"customer": {
"document_type": "dni",
"document_number": "45678912",
"name": "Juan Pérez"
},
"items": [
{
"description": "Estacionamiento 2 horas",
"quantity": 1,
"unit": "ZZ",
"unit_price": 12
}
],
"metadata": {
"placa": "ABC-123"
}
}'

Responde de inmediato con el número, el PDF y el QR; el envío a SUNAT es asíncrono, y su resultado se consulta en sunat_status y sunat.response_code, nunca como un error HTTP de esta operación. La plataforma recalcula todos los importes. Una solicitud rechazada no consume número.

Requiere el scope documents:write.

Idempotency-Key
obligatorio
string
<= 128 caracteres /^[A-Za-z0-9._:-]+$/

Identifica la operación para reintentarla sin duplicarla durante 24 horas desde la respuesta final; se recomienda un UUID. De 1 a 128 caracteres [A-Za-z0-9._:-]. Sin ella responde 400 idempotency_key_required, y con otro formato, 400 idempotency_key_invalid. La misma clave con otra solicitud responde 422 idempotency_key_reused, y con la primera aún en curso, 409 idempotency_in_progress.

Tipo de contenidoapplication/json

Boleta o factura por emitir. Las notas de crédito y de débito tienen su propia operación.

object
type
obligatorio

Tipo de comprobante. Otro valor responde 422 document_type_invalid.

  • factura: factura electrónica.
  • boleta: boleta de venta electrónica.
string
Valores admitidos: factura boleta
company_id

UUID de la empresa emisora; sale de GET /v1/companies. Se puede omitir si la clave tiene empresa por defecto (422 company_required si no). Una que no existe en la cuenta responde 422 company_not_found. Una empresa suspendida, o en live una que no está ready, responde 422 company_not_ready.

null | string format: uuid
establishment_code

Código del establecimiento. Normalmente no hace falta, porque la serie ya fija el establecimiento, y GET /v1/companies no devuelve este código. Por defecto, el de series si se envió; si no, el principal. Uno que no existe responde 422 establishment_not_found.

null | string
series

Serie, como B001. Por defecto, la serie por defecto del tipo en ese establecimiento y ambiente. No distingue mayúsculas. Una que no existe o no es del establecimiento responde 422 series_not_found; una de otro tipo, 422 series_type_mismatch; una cerrada, 422 series_closed; y una que llegó a su último número, 422 series_exhausted.

null | string
issue_date

Fecha de emisión; por defecto hoy en Lima. No futura, y hasta hoy menos 3 días en factura y menos 7 en boleta (422 issue_date_out_of_window).

null | string format: date
currency

Moneda; por defecto PEN, la única admitida (422 currency_not_supported).

  • PEN: soles.
null | string
Valores admitidos: PEN
customer

Cliente. Obligatorio en una factura y en una boleta de más de S/ 700 con IGV.

object
document_type
obligatorio

Tipo de documento. Otro valor responde 422 customer_document_type_invalid, salvo cuando el comprobante exige un tipo: una factura responde 422 customer_ruc_required, y una boleta de más de S/ 700 con IGV, 422 customer_document_required.

  • dni: documento nacional de identidad, de 8 dígitos.
  • ruc: RUC, de 11 dígitos con dígito verificador válido.
  • ce: carné de extranjería, de hasta 30 caracteres.
  • pasaporte: pasaporte, de hasta 30 caracteres.
  • otros: otro documento. Hoy ningún comprobante lo admite: una boleta responde 422 customer_document_type_not_supported y una factura exige ruc.
  • none: cliente sin documento, sin document_number.
string
Valores admitidos: dni ruc ce pasaporte otros none
document_number

Número de documento. DNI de 8 dígitos (422 dni_invalid), RUC de 11 dígitos con dígito verificador válido (422 ruc_invalid), carné de extranjería o pasaporte de hasta 30 caracteres (422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters). No admite |, y con none no se envía (422 customer_document_number_invalid). Se recorta en los extremos.

null | string
name

Nombre o razón social, de 3 a 200 caracteres (422 field_too_short, 422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters). Obligatorio si el cliente tiene documento (422 field_required). En test, los valores SIMULAR RECHAZO, SIMULAR OBSERVACIONES, SIMULAR TIMEOUT y SIMULAR VENCIMIENTO simulan ese resultado sin ir a SUNAT beta; en live son un nombre cualquiera. En una boleta, el caso actúa sobre su resumen diario: SIMULAR OBSERVACIONES y SIMULAR TIMEOUT alcanzan a todas las boletas del resumen, y SIMULAR RECHAZO devuelve las demás a pending.

null | string
address

Dirección, de hasta 500 caracteres (422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters).

null | string
email

Correo, de hasta 254 caracteres (422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters).

null | string
items
obligatorio

Líneas del comprobante, de 1 a 200 (422 items_required, 422 items_too_many).

Array<object>

Línea del comprobante. Lleva exactamente uno entre unit_price y unit_value: ninguno responde 422 unit_amount_required y ambos, 422 unit_amount_ambiguous. Un ítem que suma 0.00 responde 422 amount_invalid. Una factura también responde 422 amount_invalid si sus importes no cuadran con la tolerancia de SUNAT; una boleta en ese caso se emite, porque SUNAT solo la observa.

object
description
obligatorio

Descripción de la línea, de hasta 500 caracteres, sin saltos de línea ni tabuladores (422 field_too_long, 422 field_invalid_characters).

string
quantity
obligatorio

Cantidad mayor que 0, con hasta 12 enteros y 3 decimales (422 quantity_invalid). Va como número JSON, nunca entre comillas (400 invalid_json).

number
unit

Código de unidad de medida del catálogo 03 de SUNAT; por defecto NIU. Para servicios, ZZ. No distingue mayúsculas. Uno que no existe responde 422 unit_invalid.

null | string
unit_price

Precio unitario con IGV incluido, mayor que 0, con hasta 12 enteros y 10 decimales (422 amount_invalid).

null | number
unit_value

Valor unitario sin IGV, mayor que 0, con hasta 12 enteros y 10 decimales (422 amount_invalid).

null | number
tax_affectation

Afectación al IGV; por defecto gravado. Otro valor responde 422 tax_affectation_invalid.

  • gravado: paga IGV.
  • exonerado: exonerado de IGV.
  • inafecto: inafecto al IGV.
null | string
Valores admitidos: gravado exonerado inafecto
product_code

Código interno del integrador, de hasta 30 caracteres (422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters).

null | string
notes

Observación visible en el PDF, de hasta 500 caracteres, sin saltos de línea ni tabuladores (422 field_too_long, 422 field_invalid_characters).

null | string
payment_terms

Forma de pago; por defecto al contado.

object
type
obligatorio

Tipo de pago. Otro valor responde 422 payment_terms_not_supported.

  • contado: pago al contado, sin installments (422 installments_not_allowed).
  • credito: el total o una parte se cobra después de la emisión. Solo en facturas: una boleta responde 422 payment_terms_not_supported.
string
Valores admitidos: contado credito
installments

Cuotas de una factura al crédito, de 1 a 999 (422 installments_required, 422 installments_too_many), cada una con amount y due_date (422 field_required). Su suma es el monto neto pendiente y no supera el total menos la detracción, si la lleva (422 installments_exceed_total); puede ser menor si el cliente retiene una parte.

Array<object> | null

Cuota de una factura al crédito.

object
amount
obligatorio

Monto de la cuota en soles, mayor que cero, con hasta 12 enteros y 2 decimales (422 installment_amount_invalid).

number
due_date
obligatorio

Fecha de pago de la cuota, posterior a la fecha de emisión (422 installment_due_date_invalid).

string format: date
detraction

Detracción, solo en facturas sujetas.

object
code
obligatorio

Código de la operación sujeta; quien emite declara si aplica. Solo facturas, con un total de más de S/ 700 con IGV y todos los ítems gravados. Otro código responde 422 detraction_code_invalid; una boleta, 422 detraction_not_allowed; un total menor, 422 detraction_amount_too_low; un ítem no gravado, 422 detraction_items_not_taxed; y una empresa sin cuenta de detracciones, 422 detraction_account_required.

  • 022: otros servicios empresariales.
  • 037: demás servicios gravados con el IGV.
string
Valores admitidos: 022 037
metadata

Objeto JSON libre de hasta 4 KB. Se devuelve el mismo objeto, aunque el orden de sus claves y los espacios pueden cambiar. Otro valor, o uno con U+0000, responde 422 metadata_invalid.

object | null
external_id

Identificador del integrador, de hasta 64 caracteres (422 field_too_long), sin saltos de línea ni tabuladores (422 field_invalid_characters), único por empresa y ambiente entre los documentos no rechazados. Repetirlo responde 409 external_id_conflict con el document_id del existente; tras un rechazo se puede reutilizar para la reemisión.

null | string
replaces_document_id

Documento rechazado que este reemplaza, de la misma empresa y ambiente (422 replaced_document_not_rejected). Cada rechazado se reemplaza una sola vez: otro intento responde 409 document_already_replaced con el document_id del reemplazo.

null | string format: uuid

Ejemplos

Boleta

{
"type": "boleta",
"external_id": "venta-98231",
"customer": {
"document_type": "dni",
"document_number": "45678912",
"name": "Juan Pérez"
},
"items": [
{
"description": "Estacionamiento 2 horas",
"quantity": 1,
"unit": "ZZ",
"unit_price": 12
}
],
"metadata": {
"placa": "ABC-123"
}
}

Documento emitido y numerado. Con Idempotent-Replayed: true, es la respuesta guardada de la solicitud original.

Tipo de contenidoapplication/json

Comprobante electrónico: una boleta, una factura, una nota de crédito o una nota de débito.

object
id
obligatorio

UUID del documento.

string format: uuid
object
obligatorio

Siempre document.

string
environment
obligatorio

Ambiente del documento. Uno de test no se ve con una clave live, ni al revés.

Valores admitidos: test live
company_id
obligatorio

UUID de la empresa emisora.

string format: uuid
type
obligatorio

Tipo de comprobante.

Valores admitidos: factura boleta nota_credito nota_debito
series
obligatorio

Serie, como B001.

string
number
obligatorio

Correlativo dentro de la serie.

integer format: int64
full_number
obligatorio

Serie y correlativo, como B001-125.

string
issue_date
obligatorio

Fecha de emisión, en fecha civil de Lima.

string format: date
currency
obligatorio

Moneda; hoy siempre PEN.

string
customer
obligatorio

Cliente del comprobante.

object
document_type
obligatorio

Tipo de documento del cliente.

Valores admitidos: dni ruc ce pasaporte otros none
document_number
obligatorio

Número de documento; nulo si el cliente no tiene.

null | string
name
obligatorio

Nombre o razón social.

null | string
address
obligatorio

Dirección.

null | string
email
obligatorio

Correo.

null | string
items

Líneas del comprobante. No aparece en el listado.

Array<object> | null

Línea del comprobante, con los importes calculados por la plataforma.

object
line_number
obligatorio

Número de línea, desde 1.

integer format: int32
product_code
obligatorio

Código interno del integrador; nulo si el ítem no lo trajo.

null | string
description
obligatorio

Descripción de la línea.

string
quantity
obligatorio

Cantidad, sin ceros finales.

number
unit
obligatorio

Código de unidad de medida.

string
unit_price
obligatorio

Precio unitario con IGV, sin ceros finales.

number
unit_value
obligatorio

Valor unitario sin IGV, sin ceros finales.

number
tax_affectation
obligatorio

Afectación al IGV.

Valores admitidos: gravado exonerado inafecto
igv_rate
obligatorio

Tasa del IGV en porcentaje, como 18.

number
line_value
obligatorio

Valor de la línea sin IGV, con 2 decimales.

number
igv_amount
obligatorio

IGV de la línea, con 2 decimales.

number
line_total
obligatorio

Total de la línea con IGV, con 2 decimales.

number
totals
obligatorio

Totales calculados por la plataforma.

object
taxable
obligatorio

Total de operaciones gravadas, sin IGV.

number
exempt
obligatorio

Total de operaciones exoneradas.

number
unaffected
obligatorio

Total de operaciones inafectas.

number
discount
obligatorio

Total de descuentos; hoy siempre 0.00.

number
igv
obligatorio

IGV total.

number
total
obligatorio

Importe total con IGV.

number
amount_in_words
obligatorio

Importe total en letras.

string
status
obligatorio

Estado interno.

Valores admitidos: issued void_requested voided expired
sunat_status
obligatorio

Estado fiscal. Es el campo que dice si el documento es válido.

Valores admitidos: pending submitted accepted accepted_with_observations rejected deadline_missed
delivery_status
obligatorio

Estado de la entrega por webhook.

Valores admitidos: none pending delivered failed
sunat
obligatorio

Detalle del envío a SUNAT.

object
response_code
obligatorio

Código de respuesta de SUNAT; nulo hasta que responde.

null | string
description
obligatorio

Descripción de la respuesta de SUNAT; nula hasta que responde.

null | string
notes
obligatorio

Observaciones de SUNAT.

Array<string>
deadline_at
obligatorio

Fin del plazo de envío: la fecha de emisión más 3 días en facturas y sus notas, y más 7 en boletas y sus notas, al final del día de Lima. No limita la llegada del CDR.

string format: date-time
submitted_at
obligatorio

Envío a SUNAT; nulo si aún no se envió. Timestamp RFC 3339 en UTC, con seis decimales.

null | string format: date-time
accepted_at
obligatorio

Aceptación de SUNAT; nula si aún no se aceptó. Timestamp RFC 3339 en UTC, con seis decimales.

null | string format: date-time
reconciliation_required
obligatorio

true si hay un envío con resultado desconocido y se está recuperando el CDR o el ticket. No reemitas mientras dure.

boolean
hash
obligatorio

Valor de resumen de la firma del XML (DigestValue).

string
qr_text
obligatorio

Texto del QR del comprobante, con sus campos separados por |.

string
qr_image

PNG del QR como data URI. No aparece en el listado.

null | string
links
obligatorio

Enlaces de descarga.

object
pdf
obligatorio

Ruta del PDF.

null | string
xml
obligatorio

Ruta del XML firmado.

null | string
cdr
obligatorio

Ruta del CDR; nula hasta que SUNAT responde, y en una boleta confirmada con una revisión manual de su resumen, que no tiene CDR.

null | string
affected_document_id
obligatorio

En una nota de crédito o de débito, el documento que afecta; si no, nulo.

null | string format: uuid
credit_note
obligatorio

Motivo de la nota de crédito; nulo en los demás comprobantes.

object
reason_code
obligatorio

Motivo de la nota.

Valores admitidos: anulacion_operacion anulacion_error_ruc correccion_descripcion descuento_global descuento_item devolucion_total devolucion_item bonificacion disminucion_valor otros
reason
obligatorio

Descripción libre del motivo.

string
debit_note
obligatorio

Motivo de la nota de débito; nulo en los demás comprobantes.

object
reason_code
obligatorio

Motivo de la nota.

Valores admitidos: intereses_mora aumento_valor penalidades
reason
obligatorio

Descripción libre del motivo.

string
external_id
obligatorio

Identificador del integrador; nulo si no se envió.

null | string
replaces_document_id
obligatorio

Documento rechazado que este reemplaza; nulo si no reemplaza a ninguno.

null | string format: uuid
metadata
obligatorio

El objeto que envió el integrador; nulo si no envió ninguno.

object | null
created_at
obligatorio

Creación. Timestamp RFC 3339 en UTC, con seis decimales.

string format: date-time
updated_at
obligatorio

Última modificación. Timestamp RFC 3339 en UTC, con seis decimales.

string format: date-time

Ejemplos

Boleta

{
"id": "0192f1a2-7c3e-7d4b-9a8f-2b6c1d0e4f5a",
"object": "document",
"environment": "test",
"company_id": "0192f0b1-2d4c-7a1e-8b3f-1c2d3e4f5a6b",
"type": "boleta",
"series": "B001",
"number": 125,
"full_number": "B001-125",
"issue_date": "2026-10-09",
"currency": "PEN",
"customer": {
"document_type": "dni",
"document_number": "45678912",
"name": "Juan Pérez",
"address": null,
"email": null
},
"items": [
{
"line_number": 1,
"product_code": null,
"description": "Estacionamiento 2 horas",
"quantity": 1,
"unit": "ZZ",
"unit_price": 12,
"unit_value": 10.1694915254,
"tax_affectation": "gravado",
"igv_rate": 18,
"line_value": 10.17,
"igv_amount": 1.83,
"line_total": 12
}
],
"totals": {
"taxable": 10.17,
"exempt": 0,
"unaffected": 0,
"discount": 0,
"igv": 1.83,
"total": 12,
"amount_in_words": "DOCE CON 00/100 SOLES"
},
"status": "issued",
"sunat_status": "pending",
"delivery_status": "none",
"sunat": {
"response_code": null,
"description": null,
"notes": [],
"deadline_at": "2026-10-17T04:59:59.000000Z",
"submitted_at": null,
"accepted_at": null,
"reconciliation_required": false
},
"hash": "2/tssig+2hIBSmZyIT0CWMhsTMnRKmApc0tdWRsDs4U=",
"qr_text": "20100066603|03|B001|125|1.83|12.00|2026-10-09|1|45678912|2/tssig+2hIBSmZyIT0CWMhsTMnRKmApc0tdWRsDs4U=",
"qr_image": "data:image/png;base64,iVBORw0KGgo=",
"links": {
"pdf": "/v1/documents/0192f1a2-7c3e-7d4b-9a8f-2b6c1d0e4f5a/pdf",
"xml": "/v1/documents/0192f1a2-7c3e-7d4b-9a8f-2b6c1d0e4f5a/xml",
"cdr": null
},
"affected_document_id": null,
"credit_note": null,
"debit_note": null,
"external_id": "venta-98231",
"replaces_document_id": null,
"metadata": {
"placa": "ABC-123"
},
"created_at": "2026-10-09T14:03:21.482913Z",
"updated_at": "2026-10-09T14:03:21.482913Z"
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

Idempotent-Replayed
string

true cuando la respuesta es la guardada de una solicitud anterior con la misma Idempotency-Key.

Solicitud mal formada. Códigos: invalid_json, bad_request, idempotency_key_required, idempotency_key_invalid. No se reintenta sin corregirla.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemploidempotency_key_required

idempotency_key_required

{
"error": {
"type": "bad_request",
"code": "idempotency_key_required",
"message": "Falta la cabecera Idempotency-Key.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

Sin una API key válida. Códigos: unauthorized, invalid_api_key, revoked_api_key, expired_api_key.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemploinvalid_api_key

invalid_api_key

{
"error": {
"type": "unauthorized",
"code": "invalid_api_key",
"message": "La API key no es válida.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

La clave no puede operar. Códigos: forbidden (no tiene el scope), tenant_suspended, plan_without_api (el plan de la cuenta no incluye la API), account_not_activated (emisión en live de una cuenta que Boletura todavía no activó).

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemploforbidden

forbidden

{
"error": {
"type": "forbidden",
"code": "forbidden",
"message": "La API key no tiene el scope documents:write que exige este endpoint.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

Conflicto con un documento existente. idempotency_in_progress se reintenta con la misma clave unos segundos después. external_id_conflict no se reintenta: document_id señala el documento existente. document_already_replaced tampoco: document_id señala el reemplazo.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemploidempotency_in_progress

idempotency_in_progress

{
"error": {
"type": "conflict",
"code": "idempotency_in_progress",
"message": "La solicitud con esta Idempotency-Key todavía se está procesando. Reintente en unos segundos.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

payload_too_large: el cuerpo supera 256 KiB.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemplopayload_too_large

payload_too_large

{
"error": {
"type": "payload_too_large",
"code": "payload_too_large",
"message": "El cuerpo supera el tamaño máximo: 256 KiB, o 2 MiB al subir un certificado, un logo o un CDR.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

unsupported_media_type: el cuerpo no llega con Content-Type: application/json.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemplounsupported_media_type

unsupported_media_type

{
"error": {
"type": "unsupported_media_type",
"code": "unsupported_media_type",
"message": "El cuerpo debe enviarse con Content-Type application/json.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

Datos no válidos: error.param señala el campo y errors lista todos los problemas si hay varios. El cuerpo corregido se envía con la misma Idempotency-Key, salvo en idempotency_key_reused: esa clave ya es de otra solicitud y repetirla devuelve el mismo error, así que se envía el cuerpo original o se usa una clave nueva.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemplocustomer_document_required

customer_document_required

{
"error": {
"type": "validation_error",
"code": "customer_document_required",
"message": "Una boleta mayor a S/ 700.00 requiere identificar al cliente con un documento admitido.",
"param": "customer.document_number",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

rate_limited: se superó el límite de 600 solicitudes por minuto por clave o 1200 por IP. Se reintenta después de Retry-After.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemplorate_limited

rate_limited

{
"error": {
"type": "rate_limited",
"code": "rate_limited",
"message": "Demasiadas solicitudes. Reintente después de los segundos que indica Retry-After.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.

Retry-After
integer

Segundos que conviene esperar antes de reintentar.

Falla transitoria, como database_unavailable, storage_unavailable o encryption_unavailable. Se reintenta con la misma Idempotency-Key y una espera creciente.

Tipo de contenidoapplication/json

Formato único de los errores de la API.

object
error
obligatorio

El error principal.

object
type
obligatorio

Familia del error, como validation_error, conflict o unavailable.

string
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador. Puede cambiar: no se programa contra él.

string
param

Ruta del campo en el JSON, con índices entre corchetes, como items[2].unit_price. Solo cuando el error apunta a un campo.

null | string
request_id
obligatorio

Identificador de la solicitud, el mismo de X-Request-Id. Inclúyelo al escribir a soporte.

string
document_id

Documento con el que choca la solicitud. Solo en external_id_conflict y document_already_replaced.

null | string format: uuid
errors

Todos los problemas. Solo aparece cuando hay varios.

Array<object> | null

Uno de los problemas de la solicitud.

object
code
obligatorio

Código estable, para programar contra él.

string
message
obligatorio

Mensaje en español, apto para mostrar a un operador.

string
param

Ruta del campo en el JSON, si el error apunta a uno.

null | string

Ejemplos

Ejemplodatabase_unavailable

database_unavailable

{
"error": {
"type": "unavailable",
"code": "database_unavailable",
"message": "La base de datos no está disponible. Reintente en unos segundos.",
"request_id": "req_0192f1a27c3e7d4b9a8f2b6c1d0e4f5a"
}
}
X-Request-Id
string

El del cliente si tiene de 1 a 128 caracteres [A-Za-z0-9._-]; si no, uno generado. Es el request_id de los errores.

RateLimit-Limit
integer

Solicitudes admitidas en la ventana de un minuto, de la clave o de la IP.

RateLimit-Remaining
integer

Solicitudes que quedan en la ventana.

RateLimit-Reset
integer

Segundos hasta la ventana siguiente.