Banking API payments

API 1.0.0

An MCP tool wraps this operation: Banking API (BaaS).

The Payments group covers a payment's full cycle: create it, fetch it by identifier, list it with filters and search it by any of its references.

POST /api/public/v1/transactions/payments
GET  /api/public/v1/transactions/payments
GET  /api/public/v1/transactions/payments/{payment_id}
POST /api/public/v1/transactions/payments/search

Resource rules#

Methods. payment_method_code accepts PIN and SINPE_MOVIL. Direction. direction accepts OUT (outbound) and IN (inbound). Destination account. it is identified by IBAN or by PHONE, depending on the method.

Your own reference. client_reference is your payment identifier and is unique per tenant: two payments of the same customer cannot share it. Use it to look a payment up without storing the payment_id.

Safe retries. Creation accepts Idempotency-Key; resending the same key with the same body returns the original payment instead of creating another one. See safe retries.

States#

A payment moves through five states: pending, processing, confirmed, posted and failed.

A reversal is not a state: a reversed payment stays in posted and is recognized by result: reversed and has_reversal: true, plus the payment.reversed event. Always check those two fields before treating a payment as final.

Operations#

List customer payments

GET /api/public/v1/transactions/payments

Host: https://api-baas-sandbox.tilopay.com requires Authorization: Bearer <access_token>.

Simple REST list of payments for an owned account (IBAN).

Filters are query parameters. Ownership (tenant_id, owner_type, owner_id) is derived from the access token; clients must not send ownership filters.

Account identification (required): type + value (identifier scheme + value, e.g. IBAN + IBAN string). This is not the internal account classification.

Pagination is cursor-based (limit, cursor). Default limit is 20 (max 100).

status in the response and as a filter uses the public lowercase catalog (pending, processing, confirmed, posted, failed). Same values as webhooks. REST also returns status_detail (uppercase operational name).

Each item includes a consolidated result (succeeded, failed, reversed, pending) for reconciliation when a webhook was missed. status is only the processing/lifecycle catalog and does not change to failed when a posted payment is later reversed — use result=reversed and has_reversal=true (webhook payment.reversed). error is null when there is no failure information; it is an object only when domain / platform is present (result is failed or reversed), same shape as webhook payment.failed payment.error. source / destination use null for unknown account, name, and identification; account values are IBAN or PHONE only (never ledger UUIDs). For PIN payments created after public identification persistence, identification.number is the partner-submitted public number (no SINPE hyphens); older payments may still show the hyphenated SINPE form. See docs/PAYMENT-IDENTIFICATION.md.

Parameters

ParameterInTypeRequiredDescription
X-Correlation-IdheaderstringOptional client-supplied correlation id for end-to-end tracing. Echoed back as correlation_id in the response envelope. If omitted, the API generates one and still returns it.
typequerystringyesAccount identifier scheme (e.g. IBAN). This is not the internal account classification (e.g. operational).Values: IBAN
valuequerystringyesAccount identifier value (IBAN). Spaces are ignored.
statusquerystringOptional payment status filter. Public catalog is lowercase: pending, processing, confirmed, posted, failed. Uppercase aliases of the same values are accepted. Legacy values such as INITIATED map to pending.Values: pending, processing, confirmed, posted, failed
date_fromquerystring (date-time)Inclusive lower bound for created_at. RFC 3339 (UTC Z or offset; optional fractional seconds).
date_toquerystring (date-time)Inclusive upper bound for created_at. RFC 3339 (UTC Z or offset; optional fractional seconds).
client_referencequerystringFilter by partner client reference (exact match against the value sent at payment creation).
currencyquerystringFilter by payment currency (ISO 4217, e.g. CRC).
payment_method_codequerystringFilter by public payment method code.Values: PIN, SINPE_MOVIL
directionquerystringFilter by payment direction. Accepts public values OUT/IN or PAYOUT/PAYIN (internally normalized to payout/payin).Values: OUT, IN, PAYOUT, PAYIN
limitqueryintegerPage size (default 20, max 100).
cursorquerystringOpaque cursor from a previous response pagination.next_cursor.

Response 200

The request was processed successfully.

response_code: OK

FieldTypeRequiredDescription
itemsarray<object>yes
items[].amountobjectyes
items[].amount.amountstringyes
items[].amount.currencystringyes
items[].client_referencestringyes
items[].created_atstringyes
items[].destinationobjectyes
items[].destination.accountobjectyes
items[].destination.identificationobjectyes
items[].destination.namestringyes
items[].errorobjectyes
items[].error.domainstringyes
items[].error.platformobjectyes
items[].external_referencestringyes
items[].has_reversalbooleanyes
items[].payment_idstringyes
items[].payment_method_codestringyes
items[].providerobjectyes
items[].provider.correlation_idstringyes
items[].provider.occurred_atstringyes
items[].provider.provider_status_codestringyes
items[].provider.provider_status_descstringyes
items[].provider.provider_status_semanticstringyes
items[].public_idstringyes
items[].resultstringyes
items[].reversed_atstringyes
items[].schema_versionstringyes
items[].sourceobjectyes
items[].source.accountobjectyes
items[].source.identificationobjectyes
items[].source.namestringyes
items[].statusstringyes
items[].status_detailstring
items[].succeeded_atstringyes
items[].typestringyes
items[].updated_atstringyes
paginationobject
pagination.limitintegeryes
pagination.next_cursorstring
schema_versionstringyes

Error responses

HTTPresponse_codeDescription
400INVALID_REQUESTInvalid request. Check the required fields and try again.
401UNAUTHORIZEDUnauthorized. Verify your session or credentials.
403FORBIDDEN, ACCOUNT_ACCESS_DENIEDYou do not have permission to perform this action.
429TOO_MANY_REQUESTSToo many requests. Please retry after a short delay.
500INTERNAL_ERRORAn unexpected error occurred. Please try again later.
502PROVIDER_ERRORUnable to complete the request with the payment provider. Please try again later.
503SERVICE_UNAVAILABLEA required service is temporarily unavailable. Please try again later.

Create payment

POST /api/public/v1/transactions/payments

Host: https://api-baas-sandbox.tilopay.com requires Authorization: Bearer <access_token>. Accepts Idempotency-Key.

Creates a payment using an authorized internal source account. Processing may be asynchronous; HTTP 201 does not imply the payment is finalized. source.identification.number and destination.identification.number are stored in public form (the submitted digits, without SINPE hyphens) and returned on later payment reads. The GX/SINPE hyphenated form is used only internally and is not the public contract. Idempotency-Key is optional; if omitted, each request is treated as a new attempt. A repeated client_reference returns 409 PAYMENT_DUPLICATE when an in-flight or completed payment already uses it; a prior failed (or rejected/cancelled/expired) payment does not block a retry with the same client_reference. If Idempotency-Key is provided, the same key with the same payload replays the prior response; a different payload with the same key returns 409 IDEMPOTENCY_CONFLICT.

Parameters

ParameterInTypeRequiredDescription
X-Correlation-IdheaderstringOptional client-supplied correlation id for end-to-end tracing. Echoed back as correlation_id in the response envelope. If omitted, the API generates one and still returns it.
Idempotency-KeyheaderstringOptional opaque client key for safe retries. When omitted, each call is a new attempt (duplicates are detected by client_reference on in-flight or completed payments). Reusing a key with a different body returns 409.

Request body

FieldTypeRequiredDescription
payment_method_codestringyesPublic payment method catalog (PIN, SINPE_MOVIL).Values: PIN, SINPE_MOVIL
directionstringyesOperation direction (OUT = payout from internal source)Values: OUT, IN
country_codestringOperational country when multi-country applies
amountobjectyes
amount.amountstring
amount.currencystring
sourceobjectyes
source.accountobjectyes
source.account.typestringyesAccount identifier scheme. Only IBAN is supported here. This is not the internal account classification (e.g. operational).Values: IBAN
source.account.valuestringyesIBAN (spaces allowed; normalized server-side)
source.namestringyesAccount holder name
source.identificationobjectyesCounterparty identification for payment create. type uses platform identification-catalog keys (e.g. cedula, juridica, dimex). Same vocabulary as holder.id_type from POST /accounts/validate. number is the public identification (digits, no SINPE hyphens). The platform may reformat it internally for GX/SINPE; that internal form is not echoed on public payment reads for payments created after public identification persistence. For SINPE_MOVIL, account validate may return unknown because the wallet operation does not expose identification type; do not assume a confirmed type.
source.identification.typestringIdentification catalog key (lowercase), e.g. cedula, juridica. May be copied from holder.id_type after account validate. For SINPE_MOVIL that value may be unknown (expected limitation, not an error).
source.identification.numberstringPublic identification number as submitted by the partner. Digits only; do not send SINPE hyphenation (e.g. 01-1234-3005) or treat this field as the internal GX/SINPE display form. Supported types include cedula, juridica, dimex, gobierno, institucion_autonoma, didi, and pasaporte.
destinationobjectyes
destination.accountobjectyes
destination.account.typestringyesCounterparty account identifier scheme (IBAN for PIN, PHONE for SINPE_MOVIL). Not the internal account classification.Values: IBAN, PHONE
destination.account.valuestringyes
destination.namestringyesCounterparty name
destination.identificationobjectyesCounterparty identification for payment create. type uses platform identification-catalog keys (e.g. cedula, juridica, dimex). Same vocabulary as holder.id_type from POST /accounts/validate. number is the public identification (digits, no SINPE hyphens). The platform may reformat it internally for GX/SINPE; that internal form is not echoed on public payment reads for payments created after public identification persistence. For SINPE_MOVIL, account validate may return unknown because the wallet operation does not expose identification type; do not assume a confirmed type.
destination.identification.typestringIdentification catalog key (lowercase), e.g. cedula, juridica. May be copied from holder.id_type after account validate. For SINPE_MOVIL that value may be unknown (expected limitation, not an error).
destination.identification.numberstringPublic identification number as submitted by the partner. Digits only; do not send SINPE hyphenation (e.g. 01-1234-3005) or treat this field as the internal GX/SINPE display form. Supported types include cedula, juridica, dimex, gobierno, institucion_autonoma, didi, and pasaporte.
detail_referencestringyesOperational / transactional description stored on the payment
client_referencestringPartner functional reference. Unique per tenant among in-flight and completed payments; a failed attempt can be retried with the same value.
channel_referencestring
originatorobjectOptional Ultimate Debtor / Travel Rule originator information. Informational only in this release; no validation is applied. Stored under payment metadata when provided.
originator.companyobject
originator.company.legal_namestring
originator.company.id_typestring
originator.company.id_numberstring
originator.customerobject
originator.customer.namestring
originator.customer.id_typestring
originator.customer.id_numberstring

Response 201

The resource was created successfully.

response_code: CREATED

FieldTypeRequiredDescription
created_atstringyes
payment_idstringyes
payment_method_codestringyes
public_idstringyes
statusstringyes
status_detailstringyes

Error responses

HTTPresponse_codeDescription
400PAYMENT_INVALID_PAYLOAD, INVALID_PAYMENT_METHOD, INVALID_ACCOUNT_TYPE, ACCOUNT_INVALID, ACCOUNT_HOLDER_MISMATCHInvalid payment request payload.
401UNAUTHORIZEDUnauthorized. Verify your session or credentials.
403FORBIDDEN, ACCOUNT_ACCESS_DENIEDYou do not have permission to perform this action.
404ACCOUNT_NOT_FOUNDAccount not found.
409IDEMPOTENCY_CONFLICT, PAYMENT_DUPLICATE, CONFLICTIdempotency conflict: the same Idempotency-Key was reused with a different request body, or a previous request is still in progress.
422INSUFFICIENT_FUNDS, LIMIT_EXCEEDED, UNPROCESSABLE_ENTITYInsufficient funds to complete the payment.
429TOO_MANY_REQUESTSToo many requests. Please retry after a short delay.
500INTERNAL_ERRORAn unexpected error occurred. Please try again later.
502PROVIDER_ERRORUnable to complete the request with the payment provider. Please try again later.
503SERVICE_UNAVAILABLEA required service is temporarily unavailable. Please try again later.

Search payment by identifier

POST /api/public/v1/transactions/payments/search

Host: https://api-baas-sandbox.tilopay.com requires Authorization: Bearer <access_token>.

Looks up a single payment within the supplied customer account by exactly one of:

  • payment_id (internal UUID)
  • public_id (numeric public identifier)
  • client_reference (partner reference sent at creation)

Sending more than one identifier returns 400. Response shape matches get-by-id (schema_version, payment-level external_reference, shared provider object, provider.provider_status_*, webhook-aligned error). Same public contract as GET /transactions/payments, including public identification.number for PIN payments created after public identification persistence. If several payments share a client_reference (failed attempt plus retry), the in-flight or completed payment is returned when one exists.

Parameters

ParameterInTypeRequiredDescription
X-Correlation-IdheaderstringOptional client-supplied correlation id for end-to-end tracing. Echoed back as correlation_id in the response envelope. If omitted, the API generates one and still returns it.

Request body

FieldTypeRequiredDescription
accountobjectyes
account.typestringyesAccount identifier scheme (e.g. IBAN, PHONE). Not the internal account classification (e.g. operational).Values: IBAN, PHONE
account.valuestringyes
account.currencystringOptional account currency in response payloads.
payment_idstring (uuid)Internal payment UUID.
public_idstringNumeric public payment identifier.
client_referencestringPartner reference sent at payment creation.

Request example

byPaymentId

{
  "account": {
    "type": "IBAN",
    "value": "CR08036900101010933608"
  },
  "payment_id": "11111111-1111-1111-1111-111111111111"
}

byPublicId

{
  "account": {
    "type": "IBAN",
    "value": "CR08036900101010933608"
  },
  "public_id": "134729"
}

byClientReference

{
  "account": {
    "type": "IBAN",
    "value": "CR08036900101010933608"
  },
  "client_reference": "INV-01082"
}

Response 200

The request was processed successfully.

response_code: OK

FieldTypeRequiredDescription
amountobjectyes
amount.amountstringyes
amount.currencystringyes
client_referencestringyes
created_atstringyes
destinationobjectyes
destination.accountobjectyes
destination.account.currencystring
destination.account.typestringyes
destination.account.valuestringyes
destination.identificationobjectyes
destination.identification.numberstringyes
destination.identification.typestringyes
destination.namestringyes
errorobjectyes
error.domainstringyes
error.platformobjectyes
error.platform.codestringyes
error.platform.messagestringyes
external_referencestringyes
has_reversalbooleanyes
payment_idstringyes
payment_method_codestringyes
providerobjectyes
provider.correlation_idstringyes
provider.occurred_atstringyes
provider.provider_status_codestringyes
provider.provider_status_descstringyes
provider.provider_status_semanticstringyes
public_idstringyes
resultstringyes
reversed_atstringyes
schema_versionstringyes
sourceobjectyes
source.accountobjectyes
source.account.currencystring
source.account.typestringyes
source.account.valuestringyes
source.identificationobjectyes
source.identification.numberstringyes
source.identification.typestringyes
source.namestringyes
statusstringyes
status_detailstring
succeeded_atstringyes
typestringyes
updated_atstringyes

Error responses

HTTPresponse_codeDescription
400INVALID_REQUESTInvalid request. Check the required fields and try again.
401UNAUTHORIZEDUnauthorized. Verify your session or credentials.
403FORBIDDEN, ACCOUNT_ACCESS_DENIEDYou do not have permission to perform this action.
404PAYMENT_NOT_FOUNDPayment not found.
429TOO_MANY_REQUESTSToo many requests. Please retry after a short delay.
500INTERNAL_ERRORAn unexpected error occurred. Please try again later.
502PROVIDER_ERRORUnable to complete the request with the payment provider. Please try again later.
503SERVICE_UNAVAILABLEA required service is temporarily unavailable. Please try again later.

Get payment by id

GET /api/public/v1/transactions/payments/{payment_id}

Host: https://api-baas-sandbox.tilopay.com requires Authorization: Bearer <access_token>.

Returns a single payment using the same public contract as the list endpoint, including consolidated result, succeeded_at, has_reversal, and error. error is null when there is no failure information; it is an object only when domain / platform is present (result is failed or reversed), same shape as webhook payment.failed payment.error. source / destination use null for unknown nested fields and never expose ledger UUIDs. identification.number on PIN payments created after public identification persistence is the partner-submitted public number (digits, no SINPE hyphens). Older payments may still return the hyphenated SINPE form from processing metadata. Use this as a webhook backup.

Looks up a payment by either identifier:

  • payment_id (internal UUID)
  • public_id (numeric public identifier)

For client_reference, use POST /api/public/v1/transactions/payments/search.

Parameters

ParameterInTypeRequiredDescription
X-Correlation-IdheaderstringOptional client-supplied correlation id for end-to-end tracing. Echoed back as correlation_id in the response envelope. If omitted, the API generates one and still returns it.
payment_idpathstringyesInternal payment UUID or numeric public_id.

Response 200

The request was processed successfully.

response_code: OK

FieldTypeRequiredDescription
amountobjectyes
amount.amountstringyes
amount.currencystringyes
client_referencestringyes
created_atstringyes
destinationobjectyes
destination.accountobjectyes
destination.account.currencystring
destination.account.typestringyes
destination.account.valuestringyes
destination.identificationobjectyes
destination.identification.numberstringyes
destination.identification.typestringyes
destination.namestringyes
errorobjectyes
error.domainstringyes
error.platformobjectyes
error.platform.codestringyes
error.platform.messagestringyes
external_referencestringyes
has_reversalbooleanyes
payment_idstringyes
payment_method_codestringyes
providerobjectyes
provider.correlation_idstringyes
provider.occurred_atstringyes
provider.provider_status_codestringyes
provider.provider_status_descstringyes
provider.provider_status_semanticstringyes
public_idstringyes
resultstringyes
reversed_atstringyes
schema_versionstringyes
sourceobjectyes
source.accountobjectyes
source.account.currencystring
source.account.typestringyes
source.account.valuestringyes
source.identificationobjectyes
source.identification.numberstringyes
source.identification.typestringyes
source.namestringyes
statusstringyes
status_detailstring
succeeded_atstringyes
typestringyes
updated_atstringyes

Error responses

HTTPresponse_codeDescription
400INVALID_REQUESTInvalid request. Check the required fields and try again.
401UNAUTHORIZEDUnauthorized. Verify your session or credentials.
403FORBIDDEN, ACCOUNT_ACCESS_DENIEDYou do not have permission to perform this action.
404PAYMENT_NOT_FOUNDPayment not found.
429TOO_MANY_REQUESTSToo many requests. Please retry after a short delay.
500INTERNAL_ERRORAn unexpected error occurred. Please try again later.
502PROVIDER_ERRORUnable to complete the request with the payment provider. Please try again later.
503SERVICE_UNAVAILABLEA required service is temporarily unavailable. Please try again later.

Validate external account for a payment method

POST /api/public/v1/accounts/validate

Host: https://api-baas-sandbox.tilopay.com requires Authorization: Bearer <access_token>.

Validates a counterparty account (IBAN or phone) via the SINPE provider for the given payment method. Does not validate internal ledger accounts. When valid, data.holder.id_type uses the same identification catalog keys as identification.type in POST /payments (e.g. cedula, juridica, dimex).

SINPE_MOVIL field availability (expected, stable)

For payment_method_code = SINPE_MOVIL, the backing wallet operation (ObtenerInfoMonedero) does not return identification type or institution name. A successful validation may therefore return:

  • data.holder.id_type = unknown
  • data.financial_institution.entity_name = "" (empty string)

This is expected, stable behavior, not a mapping bug or a transient provider error. PIN (ObtenerInformacionCuentaSinpe) does populate both fields.

Integrators must not report these values as defects, and must not assume that holder.id_type or financial_institution.entity_name are always populated when is_valid is true.

SINPE rejection codes (data.rejection)

When is_valid is false, data.rejection explains why (see the rejected example on the 200 response below). rejection.code is one of a fixed set of normalized semantics (see the WebhookRejection.code schema enum). Most rows in the table below do NOT get a distinct `code` — only a subset of reason_code values has a dedicated semantic; every other reason_code, even one listed below with a specific message, returns code = SINPE_REJECTED (e.g. reason_code = 21 "fondos insuficientes" still returns SINPE_REJECTED). This same object and catalog is also used by the payment.failed webhook's rejection field. A reason_code not listed here at all still produces a response — message falls back to a generic text and code falls back to SINPE_REJECTED.

Cuenta / perfil / límites

CodeMessage
21Cuenta Cliente con fondos insuficientes
22Cuenta Cliente no admite créditos
23Cuenta Cliente cerrada
24Cuenta Cliente inactiva
25Cuenta Cliente no admite débitos
26Cuenta Cliente no es de fondos
27Moneda de la Cuenta Cliente no corresponde
28Cuenta cliente no existe
29Cuenta Cliente no registrada en el SINPE
30Cuenta Cliente no habilitada para el servicio
31Cuenta Cliente bloqueada
32Id cliente destino no coincide con registrado en la entidad
33Nombre del cliente destino no coincide con el registrado en la entidad
34Cuenta Cliente en proceso de cierre
35Cuenta Cliente embargada
36Cuenta Cliente con retención judicial
37Cuenta de expediente simplificado no permite el monto indicado
38Límite transaccional de la Cuenta Cliente excedido
39Cuenta Cliente incorrecta
40IBAN de la cuenta destino inválido
41IBAN de la cuenta origen inválido
42Tipo de cuenta no permite la transacción
43Cuenta Cliente no pertenece a la entidad indicada
44Producto de la cuenta no admite el servicio
45Cuenta Cliente en estado de cancelación
46Cuenta Cliente restringida por política de la entidad
47Cuenta Cliente no permite pagos inmediatos
48Cuenta Cliente no permite SINPE Móvil
49Titular de la cuenta destino fallecido
50Cuenta Cliente consolidada o migrada
51Identificación del cliente origen no coincide
52Identificación del cliente destino inválida
53Cliente destino no autorizado para recibir el pago
54Cliente origen no autorizado para enviar el pago
55Perfil del cliente origen no permite la transacción
56Monto inferior al mínimo permitido
57Monto superior al máximo permitido
58Cantidad de transacciones diarias excedida
59Cantidad de transacciones mensuales excedida
60Límite acumulado diario excedido
61Límite acumulado mensual excedido
62Comisión no pudo ser aplicada
63Tipo de cambio no disponible
64Transacción rechazada por control de lavado de dinero
65Transacción rechazada por listas de control
66Transacción en revisión de cumplimiento
67Documento de respaldo requerido no presente
68Firma o autenticación inválida
69Token o segundo factor inválido
70Sesión de usuario expirada
71Usuario no autorizado para el canal
72Dispositivo no registrado
73Geolocalización no permitida
74Operación no soportada en la moneda indicada
75Operación no soportada para el tipo de cliente
76Problemas de comunicación
77Tiempo de espera agotado en la entidad origen
78Tiempo de espera agotado en el SINPE
79Error interno de la entidad origen
80Error interno de la entidad destino
81Entidad origen no disponible
82Entidad destino no encontrada
83Problemas en la respuesta del destino
84Respuesta de la entidad origen incorrecta
85Mensaje con formato electrónico inválido
86Versión del estándar electrónico no soportada
87Campo obligatorio no informado
88Campo con valor fuera de catálogo
89Checksum o integridad del mensaje inválida
90Referencia SINPE duplicada
91Moneda no corresponde
92Transacción no autorizada por entidad destino
93Transacción no autorizada por cliente destino
94Transacción no autorizada por entidad origen
95Transacción no autorizada por cliente origen
96Reverso no permitido para el estado de la transacción
97Reverso ya aplicado
98Confirmación no permitida para el estado de la transacción
99Liquidación no permitida para el estado de la transacción
100Entidad Destino no disponible para procesar en tiempo real
101Entidad origen no disponible para procesar en tiempo real
102Servicio PIN no habilitado para la entidad destino
103Servicio PIN no habilitado para la entidad origen
104Código de entidad destino inválido
105Código de entidad origen inválido
106Código de país de la entidad destino inválido
107Código de país de la entidad origen inválido
108Número de referencia interna inválido
109Número de referencia SINPE inválido
110Transacción no se encuentra en un estado que permita la consulta

Compensación con entidad destino

CodeMessage
201Tiempo respuesta excedido por la entidad destino
202Respuesta de la entidad destino incorrecta según el estándar electrónico
203Se recibió una excepción de la entidad destino
204Error de comunicación con la entidad destino
205Falló procesamiento en el SINPE
206Transacción no autorizada por cliente destino
207Perfil transaccional del cliente destino no permite recibir el pago
208Falló la acreditación en la cuenta destino
209Falló el débito en la cuenta origen
210Conciliación de la transacción no fue posible

Identificación

CodeMessage
801Identificación inválida
802Identificación del cliente origen no encontrada
803Identificación del cliente destino no encontrada
804Identificación no vigente
805Identificación vencida
806Identificación no corresponde al tipo indicado
807Tipo de identificación inválido
808País de la identificación no soportado
809Identificación de menor de edad no permitida
810Identificación de persona jurídica no permitida para el servicio

Validación de formato / Core Bancario

CodeMessage
1001Cuenta cliente activa
1002El Id de cliente destino no cumple con el formato esperado por el SINPE
1003El Id de cliente origen no fue informado
1004El Id de cliente origen no cumple con el formato esperado por el SINPE
1005Monto con formato inválido
1006Moneda con formato inválido
1007Problemas de comunicación con el Core Bancario
1008Core Bancario no disponible
1009El valor para el campo no puede ser nulo o infringir su longitud mínima o máxima
1010El valor para el campo no corresponde al tipo de dato esperado
1011El valor para el campo no corresponde al catálogo permitido
1012Fecha con formato inválido
1013Hora con formato inválido
1014Número de referencia con formato inválido
1015IBAN con formato inválido

Canal / tipo de identificación

CodeMessage
1040Canal no informado
1041Canal inválido
1042Canal no corresponde
1043Canal no habilitado para la entidad
1044Canal no habilitado para el servicio
1045El formato de la identificación es inválido
1046Tipo de identificación no informado
1080Tipo de identificación no corresponde al cliente origen
1081Tipo de identificación no corresponde al cliente destino
1082Tipo de identificación no vigente
1083Tipo de identificación no soportado por el servicio
1084Tipo de identificación inválido
1085Tipo de identificación no soportado por la entidad

SINPE Móvil (monedero)

CodeMessage
15300El número de teléfono origen indicado es inválido
15301El número de teléfono origen no tiene activo el Servicio Monedero
15302El número de teléfono destino indicado es inválido
15303El número de teléfono destino no está registrado en el padrón móvil del BCCR
15304No es posible inactivar el monedero indicado pues no existe
15305El número de teléfono indicado ya se encuentra activo como monedero en el padrón local

⚠️ This catalog is under review — some entries (notably 208 and 209) are known to be pending verification against the official SINPE source and may be corrected in a future revision without notice.

Parameters

ParameterInTypeRequiredDescription
X-Correlation-IdheaderstringOptional client-supplied correlation id for end-to-end tracing. Echoed back as correlation_id in the response envelope. If omitted, the API generates one and still returns it.

Request body

FieldTypeRequiredDescription
payment_method_codestringyesPayment method used to route validation (PIN for external IBAN, SINPE_MOVIL for phone wallet).Values: PIN, SINPE_MOVIL
accountobjectyes
account.typestringyesValues: IBAN, PHONE
account.valuestringyes

Request example

pin

{
  "payment_method_code": "PIN",
  "account": {
    "type": "IBAN",
    "value": "CR16010400000000000031"
  }
}

sinpe_movil

{
  "payment_method_code": "SINPE_MOVIL",
  "account": {
    "type": "PHONE",
    "value": "88887777"
  }
}

Response 200

The request was processed successfully.

response_code: OK

FieldTypeRequiredDescription
accountobjectyes
account.currencystringyes
account.product_namestringyes
account.typestringyes
account.valuestringyes
financial_institutionobjectyes
financial_institution.country_codestringyes
financial_institution.entity_codestringyes
financial_institution.entity_namestringyes
holderobjectyes
holder.id_numberstringyes
holder.id_typestringyes
holder.namestringyes
is_validbooleanyes
providerobjectyes
provider.correlation_idstring
provider.occurred_atstring
provider.operationstringyes
rejectionobjectyes
rejection.codestringyes
rejection.messagestringyes
rejection.reason_codestringyes

Error responses

HTTPresponse_codeDescription
400INVALID_REQUEST, INVALID_ACCOUNT_TYPE, INVALID_ACCOUNT_FORMAT, INVALID_PAYMENT_METHODInvalid request. Check the required fields and try again.
401UNAUTHORIZEDUnauthorized. Verify your session or credentials.
403FORBIDDEN, ACCOUNT_ACCESS_DENIEDYou do not have permission to perform this action.
422UNPROCESSABLE_ENTITYThe request is well-formed but cannot be processed due to business rules.
429TOO_MANY_REQUESTSToo many requests. Please retry after a short delay.
500INTERNAL_ERRORAn unexpected error occurred. Please try again later.
502PROVIDER_ERRORUnable to complete the request with the payment provider. Please try again later.

Last verified: 2026-09-02 · Owner: equipo-integraciones

View as raw Markdown