Saltar al contenido principal

API Products (1.0.0)

Download OpenAPI specification:Download

API para integraciones con SPIDI.

Navegación en Móvil

Si estás en un dispositivo móvil, recuerda usar el menú de hamburguesa en la esquina superior izquierda para ver todos los endpoints disponibles.

Entornos

Para información detallada sobre entornos (Sandbox y Producción), consulta la página dedicada:

Entornos

Webhooks

SPIDI utiliza webhooks para notificar en tiempo real sobre eventos importantes (pagos completados, sesiones expiradas, etc.). Para información completa sobre:

  • Eventos disponibles
  • Estructura de webhooks
  • Reintentos automáticos
  • Seguridad y validación
  • Ejemplos de implementación

Consulta la página dedicada:

Webhooks

Endpoints Comunes

Endpoints que siempre se deben utilizar

Login

Permite autenticar un usuario en el sistema SPIDI utilizando credenciales de acceso. Este endpoint es fundamental para obtener el token de autorización necesario para realizar operaciones posteriores en la API.

Funcionalidades principales:

  • Autenticación segura: Valida las credenciales del usuario (short_name y password).
  • Generación de token JWT: Retorna un token de acceso que debe utilizarse en requests posteriores.
  • Control de sesión: El token tiene un tiempo de expiración definido para mayor seguridad.

Casos de uso típicos:

  • Inicio de sesión de usuarios comercio.
  • Obtención de token para operaciones API.
  • Renovación de credenciales de acceso.
  • Autenticación en aplicaciones integradas.

Una vez autenticado exitosamente, el token JWT debe incluirse en el header Authorization: Bearer {token} de todas las requests posteriores a la API.

Request Body schema: application/json
required
short_name
required
string

Nombre de usuario o identificador único del comercio.

password
required
string

Contraseña de acceso del usuario.

Responses

Request samples

Content type
application/json
{
  • "short_name": "spidiusuario1",
  • "password": "clavesecreta"
}

Response samples

Content type
application/json
{
  • "token": "eyJhbGciOiJlUzI1NilsInR5cCI6IkpXVCJ9.eyJzaG9ydF9uYW1lljoiZGInaXRlbClslmlhdCI6MTc2MDY0NTU4OCwiZXhwljoxNzYwNjQ2MTg4fQ.ZZaXHRfa57i4frCFIKLsRHU9Z7tI7JfU_o-TbEcwkN8"
}

Crear Acuerdo de Pago

Permite crear un nuevo agreement de pago que define las reglas de distribución y liquidación de las transacciones.


⚙️ Funcionalidades principales

  • Distribución de pagos (Split): Define cómo se repartirán los fondos entre el comercio (owner) y sus partners o afiliados. El owner siempre existe y recibe automáticamente la diferencia no asignada a terceros.
  • Liquidación bancaria inteligente: Permite dirigir los pagos hacia distintas cuentas bancarias de destino dependiendo del banco de origen del pagador.
  • Medios de pago configurables: Determina qué tipos de pago acepta el acuerdo (immediate_debit, crypto, mobile_payment).
  • split:
    • false: No aplica distribución; el owner recibe el 100 % del pago.
    • true: Usa porcentajes predefinidos que se aplican de manera uniforme en todas las transacciones. Solo se definen las participaciones de los terceros receptores; la diferencia restante se asigna automáticamente al owner, quien siempre debe recibir una parte del pago.

Casos de uso típicos

  • Comercios que trabajan con partners y necesitan distribuir comisiones automáticamente.
  • Marketplaces que deben dividir los pagos entre vendedores y la plataforma.
  • Servicios que liquidan fondos en distintas cuentas según el banco de origen.
  • Plataformas que requieren flexibilidad para definir la distribución por cada transacción.

Reutilización

Una vez creado, el agreement puede emplearse en múltiples sesiones de pago, asegurando consistencia en la distribución, control sobre la liquidación bancaria, y trazabilidad completa en todos los movimientos de fondos.

Authorizations:
None
Request Body schema: application/json
required
title
required
string

Título visible.

description
string or null <= 500 characters

Descripción del acuerdo o del concepto de pago asociado a una sesión.

required
object
default_bank_account_id
required
string <uuid>

UUID de la cuenta bancaria por defecto que se utilizará para la liquidación.

Array of objects or null

(En Desarrollo) Reglas de acuerdo. En caso de usar origin_bank_code y destination_bank_account_id, se aplicará una regla de ruteo por banco de origen. Cada regla define a qué cuenta bancaria se debe enviar el dinero según el banco del pagador.

split
required
boolean

Modo de split: false (sin distribución) o true (permite split por sesión).

Responses

Request samples

Content type
application/json
Example
{
  • "title": "Acuerdo sin Split",
  • "description": "Sin distribución de fondos",
  • "split": false,
  • "payment_methods": {
    },
  • "default_bank_account_id": "uuid_sofitasa_001",
  • "rules": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "data": {
    }
}

Endpoints Botón

Endpoints relacionados con los botones de pago

Crear Sesión

Permite crear una sesión de pago a través del botón de pago de SPIDI.Incluye el agreement_id para determinar las reglas de liquidación y split.

Authorizations:
None
Request Body schema: application/json
required
agreement_id
required
string or null <uuid>

Identificador único del acuerdo de liquidación. Debe ser UUID v4.

amount_reference
required
number <double>

Monto de referencia en la moneda especificada en currencyReference con 2 decimales.

currency_reference
required
string
Enum: "USD" "EUR" "COP" "USDT" "VES"

Moneda de referencia que se fija para el pago. Usada para calcular el monto en bolívares con la tasa vigente.

identifier_label
required
string or null

Etiqueta que indica cómo debe interpretarse el valor enviado en identifier (ej. 'Nro de orden').

identifier
required
string

Identificador del pagador, interpretado según el valor de identifier_label. Ejemplo: Nro de orden, Nombre, etc.

description
required
string or null <= 500 characters

Descripción del acuerdo o del concepto de pago asociado a una sesión.

success_url
required
string or null <uri> ^[a-z1-9]+://[^\s]*$

URL de redirección que se utiliza cuando un intento de pago es exitoso.

failure_url
required
string or null <uri> ^[a-z1-9]+://[^\s]*$

URL de redirección que se utiliza cuando un intento de pago falle.

webhook_url
string or null <uri>

URL para recibir notificaciones de webhook.

object or null

Configuración de división de pagos (Request) / Eco del request del split (Response).

Array of objects

Configuración dinámica opcional para personalizar la experiencia comercial del botón de pago.

duration_minutes
integer or null [ 5 .. 20 ]

Duración en minutos de la sesión.

Responses

Request samples

Content type
application/json
Example
{}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "Payment session created successfully.",
  • "data": {
    }
}

Consultar Sesión

Este endpoint permite consultar el estado actual de una sesión de pago y sus datos esenciales, generada mediante una solicitud de pago o botón de pago.

Este endpoint es la fuente oficial y confiable para verificar si la sesión de pago fue completada con éxito (paid), rechazada (failed), expirada (expired) o está pendiente (pending).

Origen de la Sesión

Una sesión de pago puede crearse mediante un Botón de pago o una Solicitud de pago, cada una con su propio endpoint de creación. Sin embargo, para consultar una sesión de pago —sin importar cómo haya sido creada— se utiliza el mismo endpoint de consulta. En la respuesta, existe un campo session_origin que revelará si fue creada por botón de pago (button) o por solicitud (request).

En los casos donde la sesión fue creada a través de un Botón de pago, el campo status puede tener un valor adicional: failed.

Notas Importantes

Verificación de Pagos (Backend Obligatorio)

No asumas paid solo por redirección; consulta este endpoint desde tu servidor antes de liberar servicios o productos.

Liquidación al Receptor

Tras paid, la liquidación al receptor puede tardar unos segundos; en ese caso receiver_credits y receiver_credits_summary pueden venir null temporalmente.

Independientemente de si la liquidación al receptor aún no ha ocurrido, se considera en todo su concepto amplio que el pago fue realizado exitosamente, por lo que se debe continuar con la entrega del servicio o producto sin ningún problema.

La liquidación al receptor es un proceso interno y, aunque puede demorar pocos segundos o hasta 2 minutos, no existe riesgo de fallo. En los términos y condiciones se especifica esta garantía, que constituye un derecho causado e irrevocable según los términos acordados.

Por lo tanto: En caso de que tengas control, no retengas ni retrases la prestación del servicio al pagador mientras esperas la liquidación.

Consulta de Datos de Liquidación

Si necesitas mostrar o procesar datos de la liquidación, consulta el endpoint de status periódicamente hasta que los campos de receiver_credits estén presentes.

Opcionalmente, si implementaste un webhook, recibirás una notificación automática en tu API cuando la liquidación se haya completado y los datos estén disponibles (eventos payment.paid / payment.settled).

URL del Comprobante

Recuerda que se incluye el URL del comprobante exitoso (spidi_transaction_url), que debe ser mostrado al usuario de una forma u otra.

Pagos con Criptomonedas

  • Si payment_method es "crypto", el objeto crypto_details contendrá información específica del pago cripto
  • Si payment_method es distinto a "crypto", entonces crypto_details será null
  • En caso de pago con crypto, si está en "paid_pending", entonces los objetos payment_details, receiver_credits y receiver_credits_summary estarán presentes con valores null

Split de Pagos

  • Si no se generó un split, entonces el objeto de receiver_credits tiene un solo elemento
  • Si existió el split, deben haber al menos dos elementos en receiver_credits

Estados Vigentes

  • pending: Sesión creada, esperando que el usuario complete el pago
  • paid: Pago completado exitosamente
  • expired: Sesión expirada por inactividad o manualmente
  • failed: Pago fallido (solo para sesiones creadas con botón de pago)
Authorizations:
None
path Parameters
session_id
required
string <uuid>
Example: 3ddc4cfb-c09a-43de-92c1-e4a069732e90

ID de la sesión de pago generada

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "Successful query.",
  • "data": {
    }
}

Endpoints Solicitud

Endpoints relacionados con las solicitudes de pago

Consultar Sesión

Este endpoint permite consultar el estado actual de una sesión de pago y sus datos esenciales, generada mediante una solicitud de pago o botón de pago.

Este endpoint es la fuente oficial y confiable para verificar si la sesión de pago fue completada con éxito (paid), rechazada (failed), expirada (expired) o está pendiente (pending).

Origen de la Sesión

Una sesión de pago puede crearse mediante un Botón de pago o una Solicitud de pago, cada una con su propio endpoint de creación. Sin embargo, para consultar una sesión de pago —sin importar cómo haya sido creada— se utiliza el mismo endpoint de consulta. En la respuesta, existe un campo session_origin que revelará si fue creada por botón de pago (button) o por solicitud (request).

En los casos donde la sesión fue creada a través de un Botón de pago, el campo status puede tener un valor adicional: failed.

Notas Importantes

Verificación de Pagos (Backend Obligatorio)

No asumas paid solo por redirección; consulta este endpoint desde tu servidor antes de liberar servicios o productos.

Liquidación al Receptor

Tras paid, la liquidación al receptor puede tardar unos segundos; en ese caso receiver_credits y receiver_credits_summary pueden venir null temporalmente.

Independientemente de si la liquidación al receptor aún no ha ocurrido, se considera en todo su concepto amplio que el pago fue realizado exitosamente, por lo que se debe continuar con la entrega del servicio o producto sin ningún problema.

La liquidación al receptor es un proceso interno y, aunque puede demorar pocos segundos o hasta 2 minutos, no existe riesgo de fallo. En los términos y condiciones se especifica esta garantía, que constituye un derecho causado e irrevocable según los términos acordados.

Por lo tanto: En caso de que tengas control, no retengas ni retrases la prestación del servicio al pagador mientras esperas la liquidación.

Consulta de Datos de Liquidación

Si necesitas mostrar o procesar datos de la liquidación, consulta el endpoint de status periódicamente hasta que los campos de receiver_credits estén presentes.

Opcionalmente, si implementaste un webhook, recibirás una notificación automática en tu API cuando la liquidación se haya completado y los datos estén disponibles (eventos payment.paid / payment.settled).

URL del Comprobante

Recuerda que se incluye el URL del comprobante exitoso (spidi_transaction_url), que debe ser mostrado al usuario de una forma u otra.

Pagos con Criptomonedas

  • Si payment_method es "crypto", el objeto crypto_details contendrá información específica del pago cripto
  • Si payment_method es distinto a "crypto", entonces crypto_details será null
  • En caso de pago con crypto, si está en "paid_pending", entonces los objetos payment_details, receiver_credits y receiver_credits_summary estarán presentes con valores null

Split de Pagos

  • Si no se generó un split, entonces el objeto de receiver_credits tiene un solo elemento
  • Si existió el split, deben haber al menos dos elementos en receiver_credits

Estados Vigentes

  • pending: Sesión creada, esperando que el usuario complete el pago
  • paid: Pago completado exitosamente
  • expired: Sesión expirada por inactividad o manualmente
  • failed: Pago fallido (solo para sesiones creadas con botón de pago)
Authorizations:
None
path Parameters
session_id
required
string <uuid>
Example: 3ddc4cfb-c09a-43de-92c1-e4a069732e90

ID de la sesión de pago generada

Responses

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "Successful query.",
  • "data": {
    }
}

Crear Sesión(es)

Permite crear una o múltiples sesiones de pago en forma de batch para solicitudes de pago. Cada item del batch contiene los campos de una sesión de pago más campos específicos para el manejo de vencimientos y notificaciones tardías.

Authorizations:
None
Request Body schema: application/json
required
continue_on_error
required
boolean or null
Default: false

Indica si el procesamiento debe continuar con el resto de los ítems aunque alguno falle en operaciones de batch.

  • Si es false, se detiene en el primer error y las operaciones ya exitosas permanecen válidas.
  • Si es true, continúa procesando hasta el final y luego reporta las fallas acumuladas.
required
Array of objects non-empty

Array de objetos con los datos de cada sesión de pago a crear.

Responses

Request samples

Content type
application/json
Example
{
  • "continue_on_error": true,
  • "items": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "success": true,
  • "message": "Payment sessions created successfully.",
  • "data": {
    }
}

Expirar una Solicitud de Pago

Fuerza el cierre de una sesión de pago que se encuentra en estado pendiente.

Comportamiento según Estado Actual

  • Si la sesión está PENDING, pasa a EXPIRED inmediatamente.
  • Si ya estaba EXPIRED no hace nada.
  • Si la sesión está PAID, NO puede expirarse (regla de negocio - retorna error 422).

Efecto sobre Paradas SPIDI

Si la sesión estaba asociada como activa en una Parada SPIDI, al pasar a expired deja de estar activa y queda en el histórico de la parada, por lo que el usuario podrá ver el mensaje que se le deja en user_message.

Notas y Buenas Prácticas

Paradas SPIDI

No necesitas llamar a /payment-stops/payment-sessions/batch con un item con op = remove; al expirar, la sesión sale sola del conjunto activo de cualquier parada a la que esté asociada (queda en histórico).

Trazabilidad

Usa message_audit para auditoría (quién, cuándo, por qué).

Authorizations:
None
path Parameters
session_id
required
string <uuid>

UUID único de la sesión de pago a invalidar.

Request Body schema: application/json
required
category
required
string
Enum: "INCORRECT_DATA" "ALTERNATIVE_PAYMENT_RECEIVED" "OTHER"

Clasificación técnica obligatoria. Permite segmentar el motivo de cancelación para análisis de conversión y auditoría.

Definiciones:

  • INCORRECT_DATA: Datos de pago o cliente inválidos (ej. CI/RIF erróneo).
  • ALTERNATIVE_PAYMENT_RECEIVED: El cliente pagó por otra vía (ej. efectivo o transferencia directa).
  • OTHER: Motivos no clasificados previamente (requiere nota adicional).
message_audit
string or null

Nota de auditoría interna. Espacio para justificaciones técnicas o administrativas. Este contenido no es visible para el cliente final y se utiliza exclusivamente para trazabilidad recomienda usarlo con esta estructura: (quién, cuándo, por qué).

message_user
string or null

Mensaje para el usuario final cuado por ejemplo el administrador necesita dar una instrucción específica.

Responses

Request samples

Content type
application/json
{
  • "category": "INCORRECT_DATA",
  • "message_audit": "La orden se habia generado de forma automatizada pero el usuario liquido la la sesión en nuestra sucursal por medio de pagos en efectivo.",
  • "message_user": "Sesión cancelada por pago en efectivo"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Session status expired.",
  • "data": {
    }
}

Endpoints Parada

Endpoints para gestionar Paradas SPIDI.

¿Qué son las Paradas SPIDI?

Las Paradas SPIDI son espacios únicos y permanentes asociados a cada cliente, donde este puede consultar, gestionar y pagar todas sus solicitudes de pago activas o históricas, sin necesidad de recibir nuevos enlaces cada vez.

Beneficios clave:

  • URL permanente: Punto de acceso constante y trazable
  • Gestión centralizada: Todas las solicitudes de pago en un solo lugar
  • Ideal para: Relaciones comerciales continuas, suscripciones, pagos recurrentes
  • Experiencia simplificada: Para el pagador y la empresa

Estados de una Parada:

  • Active: Con solicitudes de pago activas disponibles
  • Empty: Sin solicitudes de pago activas, muestra mensaje personalizado
  • Disabled: Deshabilitada temporalmente, puede reactivarse
  • Deleted: Eliminada definitivamente

Listar Paradas

Lista todas las paradas (stops) del comercio autenticado, con soporte de búsqueda y filtros (por estado, título, referencia interna) y paginación. Es útil para construir listados administrativos, buscadores y reportes.

Authorizations:
None
query Parameters
status
string
Enum: "active" "disabled"
Example: status=active

Filtra por estado de la parada

q
string
Example: q=caja

Búsqueda por texto en stop_title y/o internal_reference (contiene)

internal_reference
string
Example: internal_reference=caja_001

Filtra por coincidencia exacta de la referencia interna

from_date
string <date-time>
Example: from_date=2025-01-01T00:00:00Z

ISO 8601 (UTC). Devuelve paradas creadas desde esta fecha/hora (inclusive)

to_date
string <date-time>
Example: to_date=2025-12-31T23:59:59Z

ISO 8601 (UTC). Devuelve paradas creadas hasta esta fecha/hora (inclusive)

limit
integer [ 1 .. 200 ]
Default: 50
Example: limit=20

Máximo de elementos a devolver

offset
integer >= 0
Default: 0
Example: offset=0

Desplazamiento para paginación

sort
string
Default: "created_desc"
Enum: "created_desc" "created_asc" "updated_desc" "updated_asc"
Example: sort=created_desc

Orden de los resultados

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Payment stops retrieved successfully.",
  • "data": {
    }
}

Crear Parada(s)

Crea una o múltiples Paradas SPIDI en un mismo request.

¿Qué son las Paradas SPIDI?

Las Paradas SPIDI son espacios únicos y permanentes asociados a cada cliente, donde este puede consultar, gestionar y pagar todas sus solicitudes de pago activas o históricas, sin necesidad de recibir nuevos solicitudes de pago cada vez.

Funcionan como un punto de acceso trazable y constante, ideal para relaciones comerciales continuas, suscripciones o pagos recurrentes, simplificando la experiencia tanto para el pagador como para la empresa.

Características principales

  • URL permanente: Cada parada posee una stop_url única que el cliente puede visitar en cualquier momento
  • Gestión centralizada: Desde esa URL, el cliente ve todas sus solicitudes de pago (pendientes, vencidas o completadas)
  • Creación masiva: Permite crear de 1 a N paradas en un solo request, ideal para procesos de onboarding inicial
  • Idempotencia: Soporta reintentos idempotentes mediante Idempotency-Key
  • Asociación flexible: Puede vincularse a un cliente específico o a múltiples referencias según las necesidades de tu plataforma

Estados de una Parada

  • Active: Existe al menos un enlace de pago activo; se muestran los pagos disponibles
  • Empty: Sin solicitudes de pago activas; muestra el mensaje configurado en empty_state_message
  • Disabled: Deshabilitada temporalmente, pero puede reactivarse
  • Deleted: Eliminada definitivamente

Integración técnica

Se recomienda definir y mantener un campo internal_reference para cada recurso (cliente, contrato o factura), que servirá para conciliar y auditar operaciones entre tu sistema y SPIDI, y asociar solicitudes de pago con su Parada correspondiente.

Authorizations:
None
Request Body schema: application/json
required
spidi_id
required
string

Identificador único de tipo UUID para el usuario SPIDI

continue_on_error
required
boolean or null
Default: false

Indica si el procesamiento debe continuar con el resto de los ítems aunque alguno falle en operaciones de batch.

  • Si es false, se detiene en el primer error y las operaciones ya exitosas permanecen válidas.
  • Si es true, continúa procesando hasta el final y luego reporta las fallas acumuladas.
required
Array of objects non-empty

Listado de paradas a crear (mínimo 1 ítem)

Responses

Request samples

Content type
application/json
Example
{
  • "continue_on_error": false,
  • "spidi_id": "88eab2b9-739e-11f0-9e3f-42010a1ce014",
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Batch processed: 2 items created.",
  • "batch_id": "batch_54fa7a9e-31f1-41f0-a6b9-2cd05662c721",
  • "results": [
    ]
}

Consultar Parada

Consulta los detalles y metadatos de una Parada SPIDI específica.

Devuelve información completa de la parada incluyendo:

  • Identificadores (stop_id, stop_url)
  • Metadatos configurables (stop_title, empty_state_message, status)
  • Referencia interna (internal_reference)
  • Solo solicitudes de pago activas (links_active)

Para consultar el historial completo de solicitudes de pago (incluyendo pagados y expirados), utiliza el endpoint /api/v1/ext/payment-stops/{stop_id}/payment-sessions.

Authorizations:
None
path Parameters
stop_id
required
string <uuid>
Example: 7f8b2c6a-4d19-45df-9a10-3e872aa812c1

Identificador único de la parada (UUID)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Payment stop details retrieved successfully.",
  • "data": {
    }
}

Actualizar Parada

Actualiza los metadatos de una Parada SPIDI existente.

Permite modificar:

  • stop_title: Título visible de la parada
  • status: Estado de la parada (active o disabled)
  • empty_state_message: Mensaje mostrado cuando no hay solicitudes de pago activas

Los campos stop_id, stop_url e internal_reference no pueden modificarse una vez creada la parada.

Authorizations:
None
path Parameters
stop_id
required
string <uuid>
Example: stp_9f82b1d3-6e9a-4b0a-9bcd-4fd3f2e5c8a7

Identificador único de la parada (UUID)

Request Body schema: application/json
required
stop_title
required
string

Nuevo título visible de la parada

status
required
string
Enum: "active" "disabled"

Estado de la parada

empty_state_message
required
string

Texto mostrado al pagador cuando no existan solicitudes de pago activas en la parada

Responses

Request samples

Content type
application/json
{
  • "stop_title": "Caja Principal",
  • "status": "disabled",
  • "empty_state_message": "Actualmente no hay deudas asociadas a esta parada."
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Payment stop updated successfully.",
  • "data": {}
}

Eliminar Parada

Elimina definitivamente una Parada SPIDI.

⚠️ Importante:

  • La eliminación es permanente y no se puede revertir
  • No se permite eliminar una parada que tenga solicitudes de pago activas asociadas; primero debes removerlos o expirarlos
  • La operación es idempotente: múltiples llamadas con la misma Idempotency-Key no crearán duplicados

** Recomendación:** En lugar de eliminar, considera deshabilitar la parada usando el endpoint PATCH con status: "disabled". Esto permite reactivarla en el futuro si es necesario.

Authorizations:
None
path Parameters
stop_id
required
string <uuid>
Example: stp_9f82b1d3-6e9a-4b0a-9bcd-4fd3f2e5c8a7

Identificador único de la parada (UUID)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Payment stop deleted successfully.",
  • "data": {
    }
}

Consultar Históricos de Solicitudes de Parada

Consulta el historial completo de solicitudes de pago asociados a una Parada SPIDI.

Devuelve la lista completa de solicitudes de pago asociados a un stop_id, incluyendo:

  • Sesiones de Pago Activas (pending)
  • **Sesiones de Pago Pagadas ** (paid)
  • Sesiones de Pago Expiradas (expired)

Soporta filtros avanzados por estado, rango de fechas y paginación para manejar colecciones grandes.

Diferencia con GET /payment-stops/{stop_id}:

  • El endpoint básico solo devuelve solicitudes de pago activas
  • Este endpoint devuelve el historial completo con opciones de filtrado y paginación
Authorizations:
None
path Parameters
stop_id
required
string <uuid>
Example: 7f8b2c6a-4d19-45df-9a10-3e872aa812c1

Identificador único de la parada (UUID)

query Parameters
status
string
Enum: "pending" "paid" "expired"
Example: status=pending

Filtra por estado del link. Si se omite, se devuelven todos

from_date
string <date-time>
Example: from_date=2025-01-01T00:00:00Z

ISO 8601 (UTC). Devuelve elementos creados desde esta fecha/hora (inclusive)

to_date
string <date-time>
Example: to_date=2025-12-31T23:59:59Z

ISO 8601 (UTC). Devuelve elementos creados hasta esta fecha/hora (inclusive)

limit
integer [ 1 .. 200 ]
Default: 50
Example: limit=20

Máximo de elementos a devolver

offset
integer >= 0
Default: 0
Example: offset=0

Desplazamiento para paginación

sort
string
Default: "created_desc"
Enum: "created_desc" "created_asc" "updated_desc" "updated_asc"
Example: sort=created_desc

Orden de los resultados

Responses

Response samples

Content type
application/json
{
  • "stop_id": "stp_123",
  • "page": 1,
  • "page_size": 20,
  • "total": 2,
  • "has_next": false,
  • "items": [
    ]
}

Endpoints Publicar

Endpoints relacionados con la publicacion de solicitudes en las paradas

Operar en Lote Enlaces de Paradas

Ejecuta operaciones en lote para asociar/desasociar/reemplazar/limpiar sesiones de pago (session_id) visibles en una o varias Paradas (stop_id) en una sola llamada.

Operaciones soportadas:

  • add: Agrega 1..N session_id como activos (si ya estaban, es no-op y se reportan en already_present)
  • remove: Desasocia 1..N session_id activos (si no estaban activos, se reportan en not_active o not_found)
  • replace: Sustituye atómicamente el conjunto activo por session_ids. Con lista vacía ⇒ clear
  • clear: Elimina todos los activos (la Parada puede quedar en estado Empty)

Características:

  • Idempotente mediante encabezado Idempotency-Key (TTL: 24 horas)
  • Cada ítem se procesa de forma independiente
  • El resultado se devuelve por Parada
  • Rate limit: 100 requests/minuto por comercio

Notas importantes:

  • Solo sesiones pending pueden activarse (add/replace). Las sesiones paid/expired pasan a histórico automáticamente
  • replace con lista vacía equivale a clear (limpieza atómica)
  • Usa siempre Idempotency-Key en operaciones en lote
  • Máximo 100 items por batch
Authorizations:
None
Request Body schema: application/json
required
continue_on_error
required
boolean or null
Default: false

Indica si el procesamiento debe continuar con el resto de los ítems aunque alguno falle en operaciones de batch.

  • Si es false, se detiene en el primer error y las operaciones ya exitosas permanecen válidas.
  • Si es true, continúa procesando hasta el final y luego reporta las fallas acumuladas.
required
Array of objects non-empty

Lista de operaciones por Parada. Debe contener al menos 1 ítem.

Responses

Request samples

Content type
application/json
{
  • "continue_on_error": true,
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Batch processed: 4 items succeeded.",
  • "batch_id": "batch_9a1b2c3d-ef45-6789-abcd-0123456789ab",
  • "results": [
    ]
}

Reordenar Sesiones en Paradas

Define el orden de visualización de los solicitudes de pago activas (derivados de sesiones session_id) dentro de una o varias Paradas (stop_id) en una sola llamada.

Características:

  • No agrega ni quita sesiones; solo cambia el orden
  • Idempotente mediante Idempotency-Key (TTL: 24 horas)
  • Control de concurrencia opcional mediante order_version (recomendado)
  • Rate limit: 100 requests/minuto por comercio

Modos de operación:

  • append (default): reordena las sesiones listadas arriba y cualquier activa no listada queda al final manteniendo su orden relativo actual
  • strict: la lista debe representar exactamente el conjunto de activos; si falta alguna activa o sobra alguna no activa, se devuelve error por ítem

Notas importantes:

  • Separación de responsabilidades: usa reorder solo para ordenar. Para agregar/quitar/sustituir, utiliza el batch de operar solicitudes de pago
  • Idempotencia siempre: envía Idempotency-Key; misma clave + mismo payload ⇒ misma respuesta
  • Máximo 100 items por batch
Authorizations:
None
Request Body schema: application/json
required
continue_on_error
required
boolean or null
Default: false

Indica si el procesamiento debe continuar con el resto de los ítems aunque alguno falle en operaciones de batch.

  • Si es false, se detiene en el primer error y las operaciones ya exitosas permanecen válidas.
  • Si es true, continúa procesando hasta el final y luego reporta las fallas acumuladas.
required
Array of objects non-empty

Lista de instrucciones de reorden por Parada. Al menos 1 ítem

Responses

Request samples

Content type
application/json
{
  • "continue_on_error": true,
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Batch reorder processed: 2 items succeeded.",
  • "batch_id": "batch_5e9a1b2c-3344-5566-7788-99aabbccdd00",
  • "results": [
    ]
}

Consultar Enlaces de Múltiples Paradas

Devuelve, en una sola llamada, los solicitudes de pago activas (derivados de sesiones pending) para varias Paradas (stop_id).

Incluye paginación por Parada, filtros básicos y posibilidad de limitar campos para reducir payload.

¿Por qué POST para "leer"? Acepta listas grandes de stop_id (hasta 200) y tokens de paginación por Parada; un GET se quedaría corto por límites de longitud de URL. Este patrón es común en APIs modernas (Google Cloud, AWS) para queries complejas.

Características:

  • Optimizado para UI cliente - devuelve solo activos por defecto (status=pending)
  • Paginación cursor-based por parada
  • Rate limit: 100 requests/minuto por comercio
  • Máximo: 200 stop_ids por request

Notas importantes:

  • Si necesitas histórico, usa status: "historical" o include_history: true en el request
  • Para más de 200 stops, realiza múltiples requests
  • Este endpoint es idempotente (lectura) y cacheable
Authorizations:
None
Request Body schema: application/json
required
stop_ids
required
Array of strings [ 1 .. 200 ] items

Lista de Paradas a consultar (máx. recomendado: 200 por request)

status
string
Default: "active"
Enum: "active" "pending" "paid" "expired" "historical"

Filtro de estado: active (default, alias de pending), pending, paid, expired, historical (paid+expired)

object

Configuración de paginación y filtros por Parada

Responses

Request samples

Content type
application/json
Example
{
  • "stop_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "requested": {
    },
  • "results": [
    ]
}

Endpoints Especiales

Endpoints especiales

Generar Partner

Endpoint para la creación de un nuevo partner en el sistema.

Request Body schema: application/json
required
name
required
string or null

Nombre o razón social del partner

identification
required
string or null

RIF del partner

contact_email
required
string <email>

Correo electrónico del partner.

contact_phone
required
string

Teléfono del partner.

bank_code
required
string

Código del banco. Solo acepta 3–4 dígitos (p.ej., 105 o 0137).

payment_phone_or_cnta
required
string

Teléfono o número de cuenta para el pago.

user_type
required
string
Enum: "personal" "comercial"

Tipo de usuario.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "identification": "string",
  • "contact_email": "user@example.com",
  • "contact_phone": "string",
  • "bank_code": "string",
  • "payment_phone_or_cnta": "string",
  • "user_type": "personal"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Partner created successfully",
  • "data": {
    }
}

Crear Acuerdo de Recepción de Split

Crea un agreement de recepción de split —un destinatario final que puede recibir montos distribuidos desde otros usuarios que apliquen un split en sus acuerdos de pago.

Al crear este recurso, SPIDI genera un identificador único global (split_recipient_agreement_id) con prefijo semántico rcv_, que debes compartir con los usuarios que deseen enviar parte de sus pagos hacia tu cuenta.

Este agreement no admite splits adicionales: su única función es definir el ruteo de la liquidación, determinando la cuenta bancaria destino.

Características

  • Identificador global retornado como split_recipient_agreement_id (UUID SPIDI)
  • Enrutamiento con fallback a default_bank_account_id
  • Referenciable desde acuerdos de distribución vía split_recipient_agreement_id

Notas de Validación

  • Debe existir siempre default_bank_account_id
  • En rules, cada origin_bank_code no puede repetirse
  • Si en runtime no hay match de origin_bank_code, se utiliza el default_bank_account_id
  • Si no hay match y falta default_bank_account_id → error

Idempotencia

Usa siempre Idempotency-Key (UUID v4). Reenviar el mismo POST con igual payload devolverá el mismo resultado sin duplicar efectos.

Authorizations:
None
Request Body schema: application/json
required

Datos del acuerdo de recepción de split

title
required
string

Título visible.

description
string or null <= 500 characters

Descripción del acuerdo o del concepto de pago asociado a una sesión.

split_recipient_agreement_id
string <uuid>

UUID global SPIDI del agreement de recepción. Este ID se usará en acuerdos de distribución para identificar al receptor del split. (Requerido en distribution)

default_bank_account_id
required
string <uuid>

UUID de la cuenta bancaria por defecto que se utilizará para la liquidación.

Array of objects or null

(En Desarrollo) Reglas de acuerdo. En caso de usar origin_bank_code y destination_bank_account_id, se aplicará una regla de ruteo por banco de origen. Cada regla define a qué cuenta bancaria se debe enviar el dinero según el banco del pagador.

Responses

Request samples

Content type
application/json
Example
{
  • "title": "Partner 1 (recepción)",
  • "description": "Recibir de marketplace X",
  • "default_bank_account_id": "uuid_sofitasa_001",
  • "rules": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Endpoints Legacy

Endpoints de versiones anteriores de la API que se mantienen por compatibilidad.

Webhooks

Evento de creación de sesión Webhook

Se produce cuando se crea una nueva sesión de pago. Esta sesión queda disponible para que el pagador realice el pago correspondiente. Se enviará una notificación de este evento mediante un webhook cuando se crea una nueva sesión de pago.

header Parameters
spidi-signature
required
string
Example: d9c8227652758252615617f6a8759526703902939d892376987f22387a672889

Firma HMAC-SHA256 para validar la autenticidad e integridad del mensaje.

spidi-timestamp
required
string <date-time>
Example: 2026-02-06T15:24:36.000Z

Timestamp ISO 8601 de la creación del evento para prevenir ataques de replay.

idempotency-key
required
string <uuid>
Example: 93465a7e-ea9b-41a8-8dca-14e811641c25

UUID v4 único para garantizar que la operación se procese una sola vez.

Request Body schema: application/json
required
event
required
string
Value: "payment_session.created"

Tipo de evento siguiendo el estándar de jerarquía por puntos.

required
object

Responses

Request samples

Content type
application/json
{
  • "event": "payment_session.created",
  • "data": {
    }
}

Evento de pago exitoso Webhook

Se produce cuando el pagador completa exitosamente el pago de una sesión, confirmándose la recepción de los fondos. Se enviará una notificación de este evento mediante un webhook cuando el pagador completa exitosamente el pago de una sesión

header Parameters
spidi-signature
required
string
Example: d9c8227652758252615617f6a8759526703902939d892376987f22387a672889

Firma HMAC-SHA256 para validar la autenticidad e integridad del mensaje.

spidi-timestamp
required
string <date-time>
Example: 2026-02-06T15:24:36.000Z

Timestamp ISO 8601 de la creación del evento para prevenir ataques de replay.

idempotency-key
required
string <uuid>
Example: 93465a7e-ea9b-41a8-8dca-14e811641c25

UUID v4 único para garantizar que la operación se procese una sola vez.

Request Body schema: application/json
required
event
required
string
Value: "payment_session.paid"

Tipo de evento de cobro exitoso.

required
object

Responses

Request samples

Content type
application/json
{
  • "event": "payment_session.paid",
  • "data": {
    }
}

[En Desarrollo] Evento de acreditación fallida al receptor Webhook

Advertencia: Este endpoint está en desarrollo

Se produce cuando ocurre un fallo en el intento de acreditar los fondos a un receptor esperado del pago. Se enviará una notificación de este evento mediante un webhook por cada intento fallido. El sistema realizará reintentos automáticos hasta lograr la acreditación exitosa.

header Parameters
spidi-signature
required
string
Example: d9c8227652758252615617f6a8759526703902939d892376987f22387a672889

Firma HMAC-SHA256 para validar la autenticidad e integridad del mensaje.

spidi-timestamp
required
string <date-time>
Example: 2026-02-06T15:24:36.000Z

Timestamp ISO 8601 de la creación del evento para prevenir ataques de replay.

idempotency-key
required
string <uuid>
Example: 93465a7e-ea9b-41a8-8dca-14e811641c25

UUID v4 único para garantizar que la operación se procese una sola vez.

Request Body schema: application/json
required
event
required
string
Value: "payment_session.accreditation_to_recipient_failed"

Se enviará cuando ocurre un fallo en el intento de acreditar los fondos a un receptor esperado del pago.

required
object

Responses

Request samples

Content type
application/json
{
  • "event": "payment_session.accreditation_to_recipient_failed",
  • "data": {
    }
}

[En Desarrollo] Evento de acreditación exitosa a uno de los receptores del split (solo enviado durante splits) Webhook

Advertencia: Este endpoint está en desarrollo

Los fondos han sido acreditados a uno de los receptores esperados del pago. Se enviará una notificación de este evento mediante un webhook por cada receptor esperado y únicamente cuando el pago contempla múltiples acreditaciones (split).

header Parameters
spidi-signature
required
string
Example: d9c8227652758252615617f6a8759526703902939d892376987f22387a672889

Firma HMAC-SHA256 para validar la autenticidad e integridad del mensaje.

spidi-timestamp
required
string <date-time>
Example: 2026-02-06T15:24:36.000Z

Timestamp ISO 8601 de la creación del evento para prevenir ataques de replay.

idempotency-key
required
string <uuid>
Example: 93465a7e-ea9b-41a8-8dca-14e811641c25

UUID v4 único para garantizar que la operación se procese una sola vez.

Request Body schema: application/json
required
event
required
string
Value: "payment_session.accreditation_to_recipient_completed"

Se enviará cuando los fondos han sido acreditados a uno de los receptores esperados del pago.

required
object

Responses

Request samples

Content type
application/json
{
  • "event": "payment_session.accreditation_to_recipient_completed",
  • "data": {
    }
}

Evento de finalización exitosa de la acreditación total de los fondos Webhook

La totalidad de los fondos ha sido acreditada al receptor o a los receptores esperados del pago. Se enviará una notificación de este evento mediante un webhook cuando el pago contemple una única acreditación, se enviara el evento cuando se complete dicha acreditación. En caso de múltiples acreditaciones (split), se emitirá una sola vez al completarse exitosamente la totalidad de las acreditaciones.

header Parameters
spidi-signature
required
string
Example: d9c8227652758252615617f6a8759526703902939d892376987f22387a672889

Firma HMAC-SHA256 para validar la autenticidad e integridad del mensaje.

spidi-timestamp
required
string <date-time>
Example: 2026-02-06T15:24:36.000Z

Timestamp ISO 8601 de la creación del evento para prevenir ataques de replay.

idempotency-key
required
string <uuid>
Example: 93465a7e-ea9b-41a8-8dca-14e811641c25

UUID v4 único para garantizar que la operación se procese una sola vez.

Request Body schema: application/json
required
event
required
string
Value: "payment_session.accredited"

Tipo de evento de acreditación completa.

required
object

Responses

Request samples

Content type
application/json
{
  • "event": "payment_session.accredited",
  • "data": {
    }
}