Schemas
El GET /schema/{countryCode} devuelve un JSON Schema (draft-07) específico por país que describe todo lo que un payout a ese país debe contener. Consúltalo antes de construir un recipient para que tu formulario renderice exactamente los campos — y las reglas de validación — que ese corredor exige.
Como los campos requeridos, los formatos de código postal, los tipos de documento y los métodos de payout varían por país, un formulario fijado para un corredor fallará en otro. En su lugar, construye el formulario a partir del esquema:
- Construye formularios dinámicos que se adaptan a cada país de destino
- Valida entradas del lado del cliente usando
pattern,enum,minLengthyrequireddel esquema - Muestra los campos correctos para cada método de payout (depósito bancario, PIX, billetera)
La respuesta es un documento JSON Schema draft-07: un objeto con type, required y properties, donde los objetos anidados (address, paymentMethod) y los arrays (documents) llevan sus propios required/properties.
Los códigos de país son ISO 3166-1 alpha-3 en todas partes — en el path (
BRA,MEX,PHL) y en el campoaddress.countryCode, que el esquema valida con"pattern": "^[A-Z]{3}$"tanto enrecipient.addresscomo ensender.address.
Country Schema
Devuelve el contrato completo de push para un país de destino: el recipient (identidad, dirección, documentos, método de payout), la moneda que el recipientAmount debe llevar, el additionalData que ese corredor exige y — en los corredores que lo restringen — un bloque sender. Este es el esquema contra el que el propio gateway valida el POST /v2/payment, así que es la respuesta autoritativa a "¿qué exige este país?"
No todos los esquemas de país llevan todos los bloques de nivel superior. El
senderen particular está presente en algunos corredores y ausente en otros; donde está ausente, solo aplican las reglas de remitente del esquema genérico de push. Lee los bloques que estén ahí en vez de asumir una forma fija — el conjunto se está extendiendo.
Endpoint
GET https://{FQDN}/schema/{countryCode}
Headers:
| Header | Valor |
|---|---|
Authorization | Bearer {accessToken} |
Parámetros de Path
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
countryCode | string | Sí | Código de país ISO 3166-1 alpha-3 (ej.: "IND", "BRA", "DEU") |
Ejemplo de Solicitud
curl -X GET 'https://{FQDN}/schema/DEU' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...'
Respuesta (200)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Inyo Global PUSH Country Schema - Germany",
"version": "1.0.1",
"description": "Schema for processing a transaction to a DEU recipient",
"type": "object",
"properties": {
"recipient": {
"type": "object",
"required": ["firstName", "lastName"],
"properties": {
"firstName": { "type": "string", "minLength": 1 },
"lastName": { "type": "string", "minLength": 1 },
"address": { "type": "object", "properties": { "…": {} } },
"paymentMethod": {
"type": "object",
"required": ["countryCode"],
"properties": {
"type": { "type": "string", "enum": ["BANK_DEPOSIT"] },
"countryCode": { "type": "string", "enum": ["DEU"] },
"accountNumber": {
"type": "string",
"description": "The International Bank Account Number (IBAN).",
"pattern": "^DE\\d{20}$"
}
}
}
}
},
"recipientAmount": {
"type": "object",
"properties": {
"total": { "type": "number", "minimum": 0 },
"currency": { "type": "string", "enum": ["EUR"] }
}
},
"additionalData": {
"type": "object",
"properties": {
"statementNarrative": { "type": "string" }
}
}
}
}
Leyendo los condicionales
Los corredores más ricos expresan sus reglas como condicionales de JSON Schema, no como una lista required plana. Aparecen dos formas:
allOfconif/thensobrepaymentMethod.type— el corredor ofrece más de un método de payout y cada uno exige campos distintos. Brasil exigeaccountNumber,accountType,bankCodeyroutingNumbercuando eltypeesBANK_DEPOSIT, perokeyykeyTypecuando esPIX.if/then/elsesobreaccountNumberType— el corredor ofrece un riel de alias junto a las cuentas convencionales. India exige soloaccountNumber(un VPA UPI) cuando elaccountNumberTypeesUPI, yaccountNumber+bankCode+accountTypeen caso contrario.
Un validador que lea solo el required de nivel superior aceptará payloads que el gateway rechaza con VE_001. Evalúa el documento completo.
recipientAmount.currencyes un enum, no una sugerencia. Cada país fija su moneda de destino —BRAsolo aceptaBRL. Guinea (GIN) es el único corredor que acepta dos (GNF,XOF).
Errores
| Status | Condición |
|---|---|
400 | Código de país desconocido o no soportado — PAY_271: Error retrieving JSON schema for country code: {countryCode} |
Diferencias por País
Los esquemas son la fuente de verdad, pero algunos corredores tienen particularidades que vale la pena destacar. Renderiza siempre desde el esquema en vivo en vez de fijar esto — puede cambiar.
| País | Diferencia |
|---|---|
Brasil (BRA) | Ofrece BANK_DEPOSIT y PIX desde un único esquema, cada uno con su propio conjunto requerido. El destinatario exige un CPF vía documents[].document (11 dígitos, o formateado 123.456.789-09). Para depósito bancario: bankCode (3 dígitos) y routingNumber = sucursal. |
México (MEX) | La CLABE (18 dígitos en accountNumber) ya codifica el banco, así que un payout BBAN no necesita nada más. Seleccionar accountNumberType: "DIMO" cambia el accountNumber por un teléfono de 10 dígitos y vuelve requerido el bankCode. |
India (IND) | accountNumberType: "UPI" coloca un Virtual Payment Address (user@psp) en accountNumber y prescinde de bankCode/accountType. BBAN exige los tres, con el bankCode siendo un IFSC (^[A-Z]{4}0[A-Z0-9]{6}$). |
Corea del Sur (KOR) | El único corredor que restringe la identidad del remitente: sender.birthDate (YYYY-MM-DD) y sender.birthCountryCode (alpha-3) son ambos requeridos. |
| SEPA (23 países) | Solo el IBAN en accountNumber, validado contra el formato de IBAN del propio país (^DE\d{20}$, ^FR\d{12}[A-Z0-9]{11}\d{2}$, …). Sin accountNumberType, sin código de banco. |
Cómo Consumir un Esquema
Leyendo las palabras clave de draft-07 al renderizar un campo:
| Palabra clave | Uso |
|---|---|
type | Tipo de dato: "string", "object", "array", "number", "boolean" |
required | Array con los nombres de las propiedades requeridas (en ese nivel del objeto) |
properties | Definiciones de campo de un objeto |
items | Esquema de elemento de un array (ej.: documents) |
enum | Valores permitidos — renderiza un enum de valor único como solo lectura y uno de múltiples valores como select |
pattern | Regex que el valor debe cumplir (código postal, CPF, números de cuenta) |
minLength | Longitud mínima de la cadena |
description | Pista legible — buen valor por defecto para placeholder o label |
Nota las dos palabras clave condicionales de arriba: un validador que lea solo el required de nivel superior aceptará payloads que el gateway rechaza con VE_001.
Flujo recomendado:
- Lee el país de destino de tu formulario y conviértelo a ISO-3.
GET /schema/{countryCode}para ese código.- Renderiza el formulario de destinatario a partir de
recipient.properties— incluidopaymentMethod, cuyos campos dependen deltypey, en algunos corredores, delaccountNumberType. - Aplica el bloque
sendersi el esquema trae uno, y ofrece solo los valores derecipientAmount.currencyque el enum permite. - Valida cada valor contra su
pattern/enum/required, evaluandoallOf/if/then/else. - Envía el
sender, elrecipienty eladditionalDatarecolectados en el payload de Push Transaction.
Qué Sigue
- Push Transaction — Construye el
recipienty elpaymentMethoda partir de este esquema - Bancos — Busca códigos de banco para poblar los campos
bankCode - Check Account — Valida los datos de la cuenta antes de transaccionar
