Saltar al contenido
Developer Docs

Endpoints de negocio

Catálogo común de endpoints compartidos por PagaFactu y ZertiPay para gestionar flujos, operaciones, pagos PSD2, cuentas beneficiarias y configuraciones.

Esta página agrupa los 18 endpoints comunes que usan tanto PagaFactu como ZertiPay. El único endpoint específico de producto es la creación de un flujo PagaFactu (POST/pagafactu/v1/flows/pagafactu), que se documenta en la página de implementación de PagaFactu.

Convenciones comunes

  • Base URL Sandbox: https://nc-api-sandbox.zertiban.com
  • Headers requeridos en todas las llamadas:
    • Authorization: Bearer {access_token}
    • x-tenant-id: {businessUuid}

Flujos

1. Crear flujo

POST/flow/v1/flows

Content-Type: multipart/form-data. El part payload debe llevar Content-Type: application/json; si no, el servidor responde 400. Para crear cobros PagaFactu existe el endpoint específico POST/pagafactu/v1/flows/pagafactu, documentado en su página de implementación.

shell
curl -X POST https://nc-api-sandbox.zertiban.com/flow/v1/flows \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}" \
  -F 'payload={ "externalId": "...", "countryCode": "ES", "operations": [...] };type=application/json'

Raíz del payload:

CampoTipoOblig.Descripción
externalIdStringNoTu ID del flujo
countryCodeStringISO 3166 (ej. "ES")
additionalLanguageStringNoISO 639-1
operationsArray1 operación
documentsArrayNoPDFs adjuntos (hasta 10)
labelsArrayNoEtiquetas clave-valor

Respuesta (201):

CampoDescripción
uuidUUID del flujo
externalIdTu externalId
operations[i].uuidUUID de la operación
operations[i].externalIdTu externalId de la operación
operations[i].idEl id local que enviaste
operations[i].urlEnlace de pago para el pagador

2. Listar flujos

GET/flow/v1/flows

shell
# Flujos completados en los últimos 7 días
curl "https://nc-api-sandbox.zertiban.com/flow/v1/flows?q_status=COMPLETED&q_fromCreatedAt=2026-04-15T00:00:00Z&sort_by=STATUS_UPDATED_AT&sort_dir=DESC" \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Query parameters:

ParámetroTipoDefaultDescripción
q_uuidUUIDFiltrar por UUID de flujo
q_externalIdStringFiltrar por externalId
q_statusCSVEstados del flujo
q_productLabelValueCSVFiltrar por valor de etiqueta de producto
q_fromCreatedAt / q_toCreatedAtISO-8601 InstantRango de creación
q_fromStatusUpdatedAt / q_toStatusUpdatedAtISO-8601 InstantRango de cambio de estado
offsetint0Posición inicial
limitint10Resultados por página (max 100)
sort_byStringCREATED_ATEXTERNAL_ID, STATUS, CREATED_AT, STATUS_UPDATED_AT
sort_dirStringDESCASC o DESC

Respuesta (200):

json
{
  "total": 150,
  "results": [
    {
      "uuid": "28ffd216-...",
      "externalId": "COBRO-2026-001",
      "status": "COMPLETED",
      "createdAt": "2026-04-22T09:00:00Z",
      "statusUpdatedAt": "2026-04-22T09:15:00Z",
      "operationsCount": 1,
      "labels": [{ "name": "pedido", "value": "12345" }]
    }
  ]
}

3. Detalle de flujo

GET/flow/v1/flows/{flowUuid}

Devuelve el flujo con el resumen de sus operaciones de pago.

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/flows/{flowUuid} \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

Respuesta (200):

json
{
  "uuid": "28ffd216-5ee8-4e99-b1a9-511961e9c655",
  "externalId": "COBRO-2026-001",
  "status": "COMPLETED",
  "countryCode": "ES",
  "languageCode": "ES",
  "createdAt": "2026-04-22T09:00:00Z",
  "labels": [{ "name": "pedido", "value": "12345" }],
  "paymentOperations": [
    {
      "uuid": "d1faff9e-...",
      "externalId": "OP-2026-001",
      "status": "COMPLETED",
      "statusUpdatedAt": "2026-04-22T09:15:00Z",
      "expiresAt": "2026-05-22T09:00:00Z",
      "amount": 15075,
      "currency": "EUR"
    }
  ]
}
CampoDescripción
statusEstado del flujo (CREATED, IN_PROGRESS, COMPLETED, REJECTED, EXPIRED, CANCELLED)
paymentOperations[i].amountImporte en céntimos
labelsEtiquetas clave-valor enviadas al crear el flujo

4. Historial de estados de flujo

GET/flow/v1/flows/{flowUuid}/status-histories

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/flows/{flowUuid}/status-histories \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Respuesta (200): Array ordenado cronológicamente.

json
[
  { "previousStatus": null, "newStatus": "IN_PROGRESS", "changedAt": "2026-04-22T09:10:00Z" },
  { "previousStatus": "IN_PROGRESS", "newStatus": "COMPLETED", "changedAt": "2026-04-22T09:15:00Z" }
]

5. Estadísticas de flujos

GET/flow/v1/flows/statistics

shell
curl "https://nc-api-sandbox.zertiban.com/flow/v1/flows/statistics?q_fromCreatedAt=2026-04-01T00:00:00Z" \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Acepta los mismos filtros que GET/flow/v1/flows (sin paginación).

Respuesta (200):

json
{
  "summary": { "totalFlows": 42 },
  "groups": [
    { "key": "COMPLETED", "metrics": { "count": 38 } },
    { "key": "EXPIRED", "metrics": { "count": 3 } },
    { "key": "CANCELLED", "metrics": { "count": 1 } }
  ]
}

Operaciones

6. Listar operaciones

GET/flow/v1/operations

shell
# Operaciones completadas de un flujo concreto
curl "https://nc-api-sandbox.zertiban.com/flow/v1/operations?q_flowUuid={flowUuid}&q_status=COMPLETED" \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Query parameters:

ParámetroTipoDefaultDescripción
q_operationUuidUUIDFiltrar por UUID de operación
q_flowUuidUUIDFiltrar por UUID del flujo padre
q_externalIdStringFiltrar por externalId de la operación
q_statusCSVEstados: CREATED, OPENED, COMPLETED, REJECTED, EXPIRED, CANCELLED
q_typeCSVTipo de operación (PAYMENT, SIGNATURE)
q_invoiceExternalIdStringFiltrar por externalId de la factura
q_fromCreatedAtISO-8601 InstantCreada desde
q_toCreatedAtISO-8601 InstantCreada hasta
q_fromStatusUpdatedAtISO-8601 InstantÚltimo cambio de estado desde
q_toStatusUpdatedAtISO-8601 InstantÚltimo cambio de estado hasta
q_amountFromLongImporte mínimo (céntimos)
q_amountToLongImporte máximo (céntimos)
offsetint0Posición inicial
limitint10Resultados por página (max 100)
sort_byStringCREATED_ATEXTERNAL_ID, STATUS, CREATED_AT, STATUS_UPDATED_AT
sort_dirStringDESCASC o DESC

Respuesta (200):

json
{
  "total": 42,
  "results": [
    {
      "uuid": "d1faff9e-...",
      "externalId": "OP-2026-001",
      "status": "COMPLETED",
      "type": "PAYMENT",
      "createdAt": "2026-04-22T09:00:00Z",
      "statusUpdatedAt": "2026-04-22T09:15:00Z"
    }
  ]
}

7. Detalle de operación

GET/flow/v1/operations/{uuid}

Devuelve todos los datos de la operación, incluyendo los detalles del pago PSD2 y el paymentUuid necesario para consultar el detalle del pago una vez completado.

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid} \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

Respuesta (200):

json
{
  "uuid": "d1faff9e-bb8b-47bd-8b47-4f20f1a7912b",
  "externalId": "OP-2026-001",
  "flowUuid": "28ffd216-5ee8-4e99-b1a9-511961e9c655",
  "configurationUuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "type": "PAYMENT",
  "expirationOffset": "P30D",
  "expiresAt": "2026-05-22T09:00:00Z",
  "createdAt": "2026-04-22T09:00:00Z",
  "payment": {
    "paymentUuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "amount": 15075,
    "currency": "EUR",
    "concept": "Cobro 2026-001",
    "types": ["PSD2_PAYMENT"],
    "psd2Payment": {
      "type": "SINGLE_PAYMENT",
      "product": "SEPA_CREDIT_TRANSFER",
      "creditorAccount": { "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
    },
    "subject": { "name": "Ana", "lastName": "Martinez", "email": "[email protected]" }
  }
}
CampoDescripción
payment.paymentUuidUUID del pago PSD2. Disponible una vez el estado es COMPLETED. Úsalo para llamar a GET/payment/v1/payments/{uuid}
payment.amountImporte en céntimos
payment.subjectDatos del deudor tal como se enviaron al crear el flujo
expiresAtFecha de caducidad de la operación

8. Estado rápido de operación

GET /flow/v1/operations/{operationUuid}/status

Devuelve el estado actual de la operación con un payload mínimo. Ideal para polling frecuente cuando no necesitas el objeto completo.

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid}/status \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

Respuesta (200):

json
{
  "status": "COMPLETED",
  "actionCode": "INITIATED",
  "final": true
}
CampoTipoDescripción
statusStringEstado actual: CREATED, OPENED, COMPLETED, REJECTED, EXPIRED, CANCELLED
actionCodeStringCódigo de acción interno de la plataforma
finalbooleantrue cuando el estado es terminal (no hay más transiciones posibles)

9. Historial de estados de operación

GET/flow/v1/operations/{uuid}/status-histories

Devuelve la secuencia completa de transiciones de estado, útil para auditar el ciclo de vida de un cobro.

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid}/status-histories \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Respuesta (200): Array ordenado cronológicamente.

json
[
  { "previousStatus": null, "newStatus": "CREATED", "changedAt": "2026-04-22T09:00:00Z" },
  { "previousStatus": "CREATED", "newStatus": "OPENED", "changedAt": "2026-04-22T09:10:00Z" },
  { "previousStatus": "OPENED", "newStatus": "COMPLETED", "changedAt": "2026-04-22T09:15:00Z" }
]
CampoTipoDescripción
previousStatusStringEstado anterior (null para el estado inicial)
newStatusStringNuevo estado
changedAtInstantMomento de la transición

10. Estadísticas de operaciones

GET/flow/v1/operations/statistics

Permite obtener métricas agregadas: número total de operaciones y suma de importes, con los mismos filtros que el listado.

shell
# Total cobrado y desglose por estado del último mes
curl "https://nc-api-sandbox.zertiban.com/flow/v1/operations/statistics?q_fromCreatedAt=2026-03-22T00:00:00Z" \
  -H "Authorization: Bearer {access_token}" -H "x-tenant-id: {businessUuid}"

Acepta los mismos query parameters de filtrado que GET/flow/v1/operations (sin offset, limit, sort_by, sort_dir).

Respuesta (200):

json
{
  "summary": { "total": 42 },
  "groups": [
    { "key": "COMPLETED", "metrics": { "count": 38, "amount": 578450 } },
    { "key": "EXPIRED", "metrics": { "count": 3, "amount": 45000 } },
    { "key": "CANCELLED", "metrics": { "count": 1, "amount": 15075 } }
  ]
}
CampoDescripción
summary.totalTotal de operaciones que cumplen los filtros
groups[i].keyValor del agrupador (estado de la operación)
groups[i].metrics.countNúmero de operaciones en este grupo
groups[i].metrics.amountSuma de importes en céntimos en este grupo

11. Cancelar operación

PUT/flow/v1/operations/{operationUuid}/cancel

Cancela una operación que todavía no ha alcanzado un estado final.

shell
curl -X PUT https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid}/cancel \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

No hay body en la petición.

Respuesta exitosa: 204 No Content

CódigoCausa
409La operación ya está en un estado final (COMPLETED, REJECTED, EXPIRED, CANCELLED)
409La operación está en estado OPENED y el pagador tiene un pago en curso (transacción pendiente)

Si el flujo tenía esta operación como la única activa, el flujo pasará también a CANCELLED.

12. Ampliar caducidad de operación

PATCH /flow/v1/operations/{operationUuid}/expiration

Recalcula la fecha de caducidad de la operación sumando la duración indicada al momento de la llamada (expiresAt = now + duration).

shell
curl -X PATCH https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid}/expiration \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}" \
  -H "Content-Type: application/json" \
  -d '{ "duration": "P7D" }'

Request body:

CampoTipoDescripción
durationStringDuración ISO 8601 en días únicamente (ej. "P7D" = 7 días, "P30D" = 30 días). Solo se admite el designador D.

Respuesta exitosa: 204 No Content

Restricciones:

  • La operación debe estar en un estado no final (CREATED u OPENED).
  • La duración mínima es 1 día (P1D).
  • El campo duration solo admite el designador de días (D). No se admiten horas (H) ni minutos.

13. Descargar documento de pago adjunto

GET/flow/v1/operations/{operationUuid}/payment-documents/{paymentDocumentUuid}/content

Descarga el contenido binario de un documento PDF que fue adjuntado al crear el flujo. El documentUuid se obtiene del array payment.documents en el detalle de la operación.

shell
curl https://nc-api-sandbox.zertiban.com/flow/v1/operations/{operationUuid}/payment-documents/{documentUuid}/content \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}" \
  -o documento.pdf

Respuesta: binario application/pdf con header Content-Disposition: attachment; filename="<nombre-del-fichero>". Si no hay nombre disponible, el servidor usa payment-document.pdf.

Pago PSD2

14. Detalle del pago PSD2

GET/payment/v1/payments/{uuid}

El paymentUuid está disponible en GET/flow/v1/operations/{uuid} → campo payment.paymentUuid, una vez la operación alcanza el estado COMPLETED.

shell
curl https://nc-api-sandbox.zertiban.com/payment/v1/payments/{paymentUuid} \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

Respuesta (200):

json
{
  "psd2Payment": {
    "uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "status": { "code": "ACSC", "status": "AcceptedSettlementCompleted" },
    "instructedAmount": { "amount": 15075, "currency": "EUR" },
    "remittanceInformationUnstructured": "Cobro 2026-001",
    "executionDate": "2026-04-22T09:14:00Z",
    "requestedExecutionDate": null,
    "bankPaymentId": "BANKA12345678",
    "creditorAccount": {
      "ownerName": "Mi Empresa S.L.",
      "accountNumber": "ES91210004183401234567",
      "bic": "CAIXESBBXXX",
      "country": "ES",
      "type": "IBAN"
    },
    "debtorAccount": {
      "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "accountNumber": "ES8020484097908424975543",
      "type": "IBAN",
      "currency": "EUR",
      "psuName": "Ana Martinez",
      "ownerName": "Ana Martinez",
      "bic": "BBVAESMMXXX"
    }
  }
}
CampoDescripción
psd2Payment.status.codeCódigo ISO 20022 del estado del pago (ej. ACSC = liquidado)
psd2Payment.instructedAmountImporte exacto que se movió
psd2Payment.remittanceInformationUnstructuredConcepto / referencia del pago
psd2Payment.executionDateMomento en que el banco procesó el pago
psd2Payment.requestedExecutionDateSolo presente en pagos programados (FUTURE_PAYMENT)
psd2Payment.bankPaymentIdIdentificador del pago asignado por el banco
psd2Payment.creditorAccountCuenta beneficiaria donde se recibió el dinero
psd2Payment.debtorAccountCuenta del pagador que realizó la transferencia

Cuentas beneficiarias

Documentación detallada de campos y filtros en Cuentas beneficiarias.

15. Listar cuentas beneficiarias

GET/business-creditor-account/v1/business-creditor-accounts

shell
curl "https://nc-api-sandbox.zertiban.com/business-creditor-account/v1/business-creditor-accounts?offset=0&limit=10" \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"
ParámetroTipoDefaultDescripción
offsetint0Posición inicial
limitintResultados por página
q_statusenum (ACTIVE / DISABLED)Filtra por estado. Sin valor devuelve todas.
q_isDefaultbooleanFiltra por si es la cuenta por defecto.

16. Detalle de cuenta beneficiaria

GET/business-creditor-account/v1/business-creditor-accounts/{uuid}

shell
curl "https://nc-api-sandbox.zertiban.com/business-creditor-account/v1/business-creditor-accounts/{uuid}" \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"
CampoTipoDescripción
uuidUUIDcreditorAccountUuid a usar al crear flujos
accountNumberStringNúmero de cuenta (enmascarado)
typeStringTipo de cuenta. Valor posible: IBAN
aliasStringNombre identificativo
statusStringACTIVE o DISABLED. Solo las ACTIVE aceptan pagos
isDefaultBooleanSi es la cuenta beneficiaria por defecto del negocio
aspsp.commercialNameStringNombre comercial del banco

Configuraciones de flujo

Documentación detallada de campos y filtros en Configuración de flujo.

17. Listar configuraciones

GET/flow-customization/v1/configurations

shell
curl "https://nc-api-sandbox.zertiban.com/flow-customization/v1/configurations?offset=0&limit=10" \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

18. Detalle de configuración

GET/flow-customization/v1/configurations/{configurationUuid}

shell
curl https://nc-api-sandbox.zertiban.com/flow-customization/v1/configurations/{configurationUuid} \
  -H "Authorization: Bearer {access_token}" \
  -H "x-tenant-id: {businessUuid}"

Tabla resumen

Base URL Sandbox: https://nc-api-sandbox.zertiban.com

#MétodoEndpointDescripción
1POST/flow/v1/flowsCrear flujo
2GET/flow/v1/flowsListar flujos
3GET/flow/v1/flows/{uuid}Detalle de flujo
4GET/flow/v1/flows/{uuid}/status-historiesHistorial de estados de flujo
5GET/flow/v1/flows/statisticsEstadísticas de flujos
6GET/flow/v1/operationsListar operaciones
7GET/flow/v1/operations/{uuid}Detalle de operación
8GET/flow/v1/operations/{uuid}/statusEstado rápido de operación
9GET/flow/v1/operations/{uuid}/status-historiesHistorial de estados de operación
10GET/flow/v1/operations/statisticsEstadísticas de operaciones
11PUT/flow/v1/operations/{uuid}/cancelCancelar operación
12PATCH/flow/v1/operations/{uuid}/expirationAmpliar caducidad
13GET/flow/v1/operations/{uuid}/payment-documents/{docUuid}/contentDescargar PDF adjunto
14GET/payment/v1/payments/{paymentUuid}Detalle del pago PSD2
15GET/business-creditor-account/v1/business-creditor-accountsListar cuentas beneficiarias
16GET/business-creditor-account/v1/business-creditor-accounts/{uuid}Detalle de cuenta beneficiaria
17GET/flow-customization/v1/configurationsListar configuraciones
18GET/flow-customization/v1/configurations/{uuid}Detalle de configuración

Errores frecuentes

CódigoCausa típicaSolución
400Payload inválido: campo faltante, formato incorrecto, parámetro mal tipadoRevisa la validación en la sección de referencia
401Token expirado o credenciales inválidasSolicita un nuevo token con Basic Auth
403x-tenant-id incorrecto o permisos de credencial insuficientesVerifica businessUuid y los permisos de las credenciales
404UUID de configuración, cuenta, operación, flujo o pago no encontradoVerifica con los endpoints GET
409Conflicto de estado (cancelar operación finalizada, configuración inactiva)Consulta el estado actual antes de la acción