Referencia de la API

Sincronización de documentos

Mantén tu propio sistema al día: qué cambió y cada documento en JSON, cXML o UBL.

Más sobre este recurso

Para un ERP o un sistema de facturación o de aplicación de cobros que sigue a Pleaxy sin que nadie vuelva a teclear nada. ListSyncEvents indica qué cambió desde tu última llamada (o un webhook te lo envía); luego lees el documento: una orden de compra como OrderRequest de cXML u Order de UBL, en qué estado está una factura, una factura como Invoice de UBL, y cada pago con su aviso de pago. Cada documento es la copia del proveedor, pida quien lo pida: nunca las notas internas del comprador, las aprobaciones ni quién registró un pago. El ERP o la conexión bancaria de un comprador registra pagos con RecordPayments.

Listar eventos de sincronización

Lista lo que cambió desde tu última llamada, del más antiguo al más reciente.

GET/v1/workspaces/{regionId}/sync/events

Parámetros

  • afterstring

    El nextCursor de tu última llamada (un id de evento). Omítelo para empezar por el evento más antiguo.

  • limitinteger

    1-500 eventos por llamada. Por defecto, 100.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

Qué cambió en este lado del espacio de trabajo, del más antiguo al más reciente. Un evento nombra un documento, nunca su contenido: lee el documento con la operación correspondiente, así siempre obtienes su versión actual. Devuelve nextCursor como after en tu siguiente llamada; mientras hasMore sea true, vuelve a llamar de inmediato. Los eventos se conservan 30 días y se entregan al menos una vez, así que el mismo cambio puede llegar dos veces; los 5 segundos más recientes esperan a la siguiente llamada. Un llamador proveedor recibe purchase_order.issued, changed, canceled y rejected; invoice.received, approved, rejected, paid, payment_withdrawn, remittance_sent y credit_applied; invoice.updated (un comprador puso la factura en espera para revisarla, o la liberó: lee GetInvoiceStatus); y credit_note.accepted y rejected. Un llamador comprador recibe invoice.received y credit_note.received (un proveedor envió uno); invoice.updated (una factura se aprobó, por una persona o automáticamente, o se rechazó, o su proveedor confirmó los datos bancarios o la reportó); invoice.payment (se registró o retiró un pago, un crédito saldó la factura, o un pago a través de Pleaxy se completó o falló: consulta GetInvoiceRemittance); purchase_order.updated (una orden se aprobó, se rechazó o se canceló); y purchase_order.confirmed y purchase_order.shipped (consulta GetPurchaseOrderFulfillment). Solo recibe los tipos de documento que su rol de compras puede ver.

Campos de la respuesta

  • events[].typestring

    Qué pasó, como <document>.<change>, p. ej. invoice.paid.

  • events[].buyerWorkspaceIdstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, para pasarlo como ?buyer= al leer el documento.

  • nextCursorstring

    Dónde empieza tu siguiente llamada. Ausente solo antes del primer evento.

  • hasMoreboolean

    Hay más eventos esperando: vuelve a llamar de inmediato.

Errores

  • 400 Bad Request - after no es un id de evento, o limit está fuera de rango.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/sync/events
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.supplier/sync/events?after=EV-mgx2k9a1-0c4f81d2" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
{
  "events": [
    { "id": "EV-mgx2kb7e-91a2c3d4", "at": "2026-10-23T10:02:11.402Z", "type": "invoice.paid", "documentType": "invoice", "documentId": "INV-3C9E71B2", "buyerWorkspaceId": "reg_01k5x8n2a7c4bq9wze0tkv3fjm.buyer" }
  ],
  "nextCursor": "EV-mgx2kb7e-91a2c3d4",
  "hasMore": false
}

Obtener documento de orden de compra

Devuelve una orden de compra emitida en cXML o UBL.

GET/v1/workspaces/{regionId}/purchase-orders/{poId}/document

Parámetros

  • poIdstringObligatorio

    El identificador de la orden de compra.

  • format"cxml" | "ubl"

    El formato del documento. Por defecto, cxml.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

Una orden de compra emitida como documento que tu sistema puede importar. format=cxml (el predeterminado) es un OrderRequest de cXML: tipo new, update a partir de la versión 2, delete una vez cancelada. format=ubl es un Order de UBL 2.1, o un OrderCancellation una vez cancelada. Ambas partes se identifican por sus IDs de espacio de trabajo. Es la copia del proveedor, pida quien la pida. Un proveedor cuyos compradores comparten un id de orden de compra agrega ?buyer=<buyer Workspace ID>.

Errores

  • 400 Bad Request - format no es cxml ni ubl.
  • 404 Not Found - Ninguna orden de compra con este id es tuya.
  • 409 Conflict - Código ORDER_NOT_ISSUED: un borrador, una orden en espera de aprobación o una rechazada nunca se envió a su proveedor.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/purchase-orders/{poId}/document
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/purchase-orders/{poId}/document" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
application/xml

Obtener documento de factura

Devuelve una factura como Invoice de UBL 2.1.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/document

Parámetros

  • invoiceIdstringObligatorio

    El identificador de la factura.

  • format"ubl"

    El único formato, y el predeterminado.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

Una factura como Invoice de UBL 2.1 (tipo 380, o 383 para una nota de débito), para que el ERP del comprador la contabilice o para el archivo del proveedor: sus líneas, descuentos y cargos a nivel de documento, impuestos y retenciones, anticipos, las instrucciones de pago del proveedor, y la orden de compra y el contrato que factura. Los totales cuadran con el importe de la factura. Es la vista del proveedor, pida quien la pida: sin conciliación, hallazgos ni aprobaciones.

Errores

  • 404 Not Found - Ninguna factura con este id es tuya.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/document
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/document" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
application/xml

Obtener estado de factura

Devuelve en qué estado está una factura, con los códigos de estado estándar.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/status

Parámetros

  • invoiceIdstringObligatorio

    El identificador de la factura.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

En qué estado está una factura, para el sistema que la envió o el que la paga, como un estado con los códigos que usan para ello los sistemas de facturación electrónica. Lo mismo en cXML o UBL es GetInvoiceStatusDocument. Es la vista del proveedor, pida quien la pida.

Campos de la respuesta

  • statusstring

    received: la conciliación no se ha ejecutado. in_process: en espera de aprobación. under_query: consulta queryReason. approved: aprobada e impagada. payment_in_progress: hay un pago a través de Pleaxy en curso. paid. rejected. duplicate: rechazada por duplicada.

  • responseCodestring

    El estado como UNCL4343, la lista de códigos del Invoice Response de Peppol.

  • queryReasonstring

    Por qué la factura está en consulta: no coincide con su orden de compra, o sus datos bancarios esperan confirmación o se reportaron.

  • rejectionobject

    Si se rechazó: el código de motivo (amount_incorrect, not_ordered_or_not_received, duplicate, missing_or_wrong_po, wrong_billing_entity, other) y la nota del comprador.

Errores

  • 404 Not Found - Ninguna factura con este id es tuya.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/status
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/status" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
{
   "invoiceId": "string",
   "invoiceNumber": "string",
   "documentType": "invoice" | "debit_note",
   "buyerWorkspaceId": "string",
   "purchaseOrderId": "string",
   "status": "received" | "in_process" | "under_query" | "approved" | "payment_in_progress" | "paid" | "rejected" | "duplicate",
   "responseCode": "AB" | "IP" | "UQ" | "AP" | "RE" | "PD",
   "cxmlStatus": "processing" | "reconciled" | "rejected" | "paying" | "paid",
   "queryReason": "discrepancy" | "bank_details_unconfirmed" | "bank_details_disputed",
   "rejection": { "reasonCode": "string", "reason": "string", "at": "string" },
   "issueDate": "string",
   "receivedAt": "string",
   "dueDate": "string",
   "total": { "amount": number, "currency": "string" },
   "amountDue": { "amount": number, "currency": "string" },
   "paid": boolean,
   "paidAt": "string"
}

Obtener documento de estado de factura

Devuelve el estado de una factura en cXML o UBL.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/status/document

Parámetros

  • invoiceIdstringObligatorio

    El identificador de la factura.

  • format"cxml" | "ubl"

    El formato del documento. Por defecto, cxml.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

GetInvoiceStatus como documento. format=cxml (el predeterminado) es un StatusUpdateRequest de cXML con un InvoiceStatus; format=ubl es un ApplicationResponse de UBL 2.1 con los códigos del Invoice Response de Peppol y, para un rechazo, su motivo.

Errores

  • 400 Bad Request - format no es cxml ni ubl.
  • 404 Not Found - Ninguna factura con este id es tuya.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/status/document
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/status/document" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
application/xml

Obtener aviso de pago de factura

Devuelve cómo y cuándo se pagó una factura, con sus avisos de pago.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance

Parámetros

  • invoiceIdstringObligatorio

    El identificador de la factura.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

La señal de pago de una factura, para la aplicación de cobros del proveedor: cómo y cuándo pagó el comprador, la referencia, qué se retuvo y qué llegó al proveedor, y los avisos de pago que envió el comprador (notas y comprobantes de pago; GetRemittanceFile descarga uno). Pleaxy registra lo que declara el comprador y no mueve dinero. Nunca quién lo registró del lado del comprador. Lo mismo en cXML o UBL es GetInvoiceRemittanceDocument.

Campos de la respuesta

  • statusstring

    unpaid, recorded (el comprador registró un pago hecho fuera de Pleaxy), processing o paid_through_pleaxy (un pago a través de Pleaxy), withdrawn (el comprador retiró su registro) o failed (solo para llamadores compradores: su último pago a través de Pleaxy falló, en failedAt).

  • payment.methodstring

    Cómo se pagó. credit: liquidada con notas de crédito; nothing_due: aprobada por 0.

  • payment.adviceVersionnumber

    1 para el primer registro; un número mayor reemplaza el aviso de pago anterior.

  • payment.netPaidobject

    Lo que llegó al proveedor, en la moneda del importe adeudado: el importe adeudado menos lo retenido.

Errores

  • 404 Not Found - Ninguna factura con este id es tuya.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
{
   "invoiceId": "string",
   "invoiceNumber": "string",
   "status": "unpaid" | "recorded" | "processing" | "paid_through_pleaxy" | "withdrawn" | "failed",
   "failedAt": "string",
   "paid": boolean,
   "paidAt": "string",
   "amountDue": { "amount": number, "currency": "string" },
   "payment": {
      "method": "ach" | "wire" | "check" | "card" | "other" | "credit" | "nothing_due" | "stripe",
      "paymentDate": "string",
      "reference": "string",
      "adviceVersion": number,
      "withheld": [ { "description": "string", "amount": number, "rate": number } ],
      "netPaid": { "amount": number, "currency": "string" },
      "paidInOtherCurrency": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" }
   },
   "remittances": [ { "id": "string", "sentAt": "string", "note": "string", "file": { "fileName": "string", "contentType": "string", "sizeBytes": number } } ]
}

Obtener documento de aviso de pago de factura

Devuelve el pago de una factura en cXML o UBL.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance/document

Parámetros

  • invoiceIdstringObligatorio

    El identificador de la factura.

  • format"cxml" | "ubl"

    El formato del documento. Por defecto, cxml.

  • buyerstring

    Llamadores proveedores: el ID del espacio de trabajo del comprador, cuando dos compradores emitieron el mismo id.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

GetInvoiceRemittance como documento. format=cxml (el predeterminado) es un PaymentRemittanceRequest de cXML; format=ubl es un RemittanceAdvice de UBL 2.1.

Errores

  • 400 Bad Request - format no es cxml ni ubl.
  • 404 Not Found - Ninguna factura con este id es tuya.
  • 409 Conflict - Código NO_PAYMENT: todavía no se ha pagado ni registrado nada. GetInvoiceRemittance da el estado.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
  • 403 Forbidden - El token Bearer o la clave de API del llamador no da acceso a este espacio de trabajo (regionId), o no tiene el rol requerido.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance/document
Solicitud
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance/document" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Respuesta · 200 OK
application/xml

Registrar pagos

Registra pagos que tu ERP o tu banco ya hicieron, hasta 50 a la vez.

POST/v1/workspaces/{regionId}/invoices/payment-records

Cuerpo

  • paymentsArrayObligatorio

    1-50 pagos: { invoiceId, method, paymentDate, reference, note?, amount?, currency?, rate?, rateDate?, withholdings?, confirmReplaced? }, cada campo como en RecordPayment.

Devuelve

200 OK con el objeto que se muestra en la respuesta.

Más detalles

Registra pagos que tu ERP o tu conexión bancaria ya hicieron fuera de Pleaxy (transferencias, cheques, ACH, tarjeta), para que cada proveedor reciba su notificación de pago, su aviso de pago y su evento de sincronización sin que nadie lo vuelva a teclear. Esto no mueve dinero. Cada pago sigue las reglas de RecordPayment y se responde por separado; repetir uno es seguro (already_recorded). Una factura aprobada por una clave de API se sigue rechazando. note se convierte en una nota del aviso de pago para el proveedor; solo una persona puede adjuntar un comprobante de pago.

Solo clave de API de comprador con el ámbito payments:record, creada con un procurementRole que pueda editar facturas (administrator o finance). Una persona con sesión iniciada usa RecordPayment.

Campos de la respuesta

  • results[].outcomestring

    recorded, already_recorded (el mismo pago ya se había registrado) o rechazado con el estado, el código y el mensaje que habría dado RecordPayment.

Errores

  • 400 Bad Request - El cuerpo no es válido: no hay pagos, hay más de 50 o un campo que RecordPayment no acepta. No se registra nada.
  • 403 Forbidden - Código API_KEY_REQUIRED (una persona con sesión iniciada), API_KEY_SCOPE_MISSING (una clave sin payments:record) o un rol de compras que no puede editar facturas.
  • 429 Too Many Requests - Por pago, código RATE_LIMITED cuando la clave ya registró 500 pagos hoy (UTC). Cada llamada que registra un pago también genera una notificación payments_recorded_by_key en el espacio de trabajo, con la clave y las facturas.
  • 401 Unauthorized - No se presentó ninguna credencial, o el token Bearer o el valor de X-Api-Key falta, no es válido, caducó o fue revocado.
POST /v1/workspaces/{regionId}/invoices/payment-records
Solicitud
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/payment-records" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "payments": [
      { "invoiceId": "string", "method": "ach" | "wire" | "check" | "card" | "other", "paymentDate": "YYYY-MM-DD", "reference": "string", "note": "string" }
   ]
}
Respuesta · 200 OK
{
   "results": [
      { "invoiceId": "string", "outcome": "recorded" | "already_recorded" | "refused", "status": number, "code": "string", "message": "string" }
   ],
   "recorded": number,
   "alreadyRecorded": number,
   "refused": number
}
Habla con nosotros