Schemas
O GET /schema/{countryCode} retorna um JSON Schema (draft-07) específico por país descrevendo tudo o que um payout para aquele país deve conter. Consulte-o antes de construir um recipient para que seu formulário renderize exatamente os campos — e as regras de validação — que aquele corredor exige.
Como os campos obrigatórios, os formatos de código postal, os tipos de documento e os métodos de payout variam por país, um formulário codificado de forma fixa para um corredor falhará em outro. Em vez disso, construa o formulário a partir do schema:
- Construa formulários dinâmicos que se adaptam a cada país de destino
- Valide entradas no lado do cliente usando
pattern,enum,minLengtherequireddo schema - Exiba os campos corretos para cada método de payout (depósito bancário, PIX, carteira)
A resposta é um documento JSON Schema draft-07: um objeto com type, required e properties, onde objetos aninhados (address, paymentMethod) e arrays (documents) carregam seus próprios required/properties.
Códigos de país são ISO 3166-1 alpha-3 em todo lugar — no path (
BRA,MEX,PHL) e no campoaddress.countryCode, que o schema valida com"pattern": "^[A-Z]{3}$"tanto emrecipient.addressquanto emsender.address.
Country Schema
Retorna o contrato completo de push para um país de destino: o recipient (identidade, endereço, documentos, método de payout), a moeda que o recipientAmount deve carregar, o additionalData que aquele corredor exige e — nos corredores que o restringem — um bloco sender. Este é o schema contra o qual o próprio gateway valida o POST /v2/payment, então é a resposta autoritativa para "o que este país exige?"
Nem todo schema de país carrega todos os blocos de topo. O
senderem particular está presente em alguns corredores e ausente em outros; onde ausente, valem apenas as regras de remetente do schema genérico de push. Leia os blocos que estão lá em vez de assumir um formato fixo — o conjunto está sendo estendido.
Endpoint
GET https://{FQDN}/schema/{countryCode}
Headers:
| Header | Valor |
|---|---|
Authorization | Bearer {accessToken} |
Parâmetros de Path
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
countryCode | string | Sim | Código de país ISO 3166-1 alpha-3 (ex.: "IND", "BRA", "DEU") |
Exemplo de Requisição
curl -X GET 'https://{FQDN}/schema/DEU' \
-H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...'
Resposta (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" }
}
}
}
}
Lendo os condicionais
Corredores mais ricos expressam suas regras como condicionais de JSON Schema, e não como uma lista required plana. Dois formatos aparecem:
allOfcomif/thensobrepaymentMethod.type— o corredor oferece mais de um método de payout e cada um exige campos diferentes. O Brasil exigeaccountNumber,accountType,bankCodeeroutingNumberquando otypeéBANK_DEPOSIT, maskeyekeyTypequando éPIX.if/then/elsesobreaccountNumberType— o corredor oferece um trilho de alias ao lado das contas convencionais. A Índia exige apenasaccountNumber(um VPA UPI) quando oaccountNumberTypeéUPI, eaccountNumber+bankCode+accountTypecaso contrário.
Um validador que leia apenas o required de topo vai aceitar payloads que o gateway rejeita com VE_001. Avalie o documento inteiro.
recipientAmount.currencyé um enum, não uma sugestão. Cada país trava sua moeda de destino —BRAaceita apenasBRL. A Guiné (GIN) é o único corredor que aceita duas (GNF,XOF).
Erros
| Status | Condição |
|---|---|
400 | Código de país desconhecido ou não suportado — PAY_271: Error retrieving JSON schema for country code: {countryCode} |
Diferenças por País
Os schemas são a fonte de verdade, mas alguns corredores têm particularidades que vale destacar. Sempre renderize a partir do schema ao vivo em vez de fixar isto — pode mudar.
| País | Diferença |
|---|---|
Brasil (BRA) | Oferece BANK_DEPOSIT e PIX a partir de um único schema, cada um com seu próprio conjunto obrigatório. O destinatário exige um CPF via documents[].document (11 dígitos, ou formatado 123.456.789-09). Para depósito bancário: bankCode (3 dígitos) e routingNumber = agência. |
México (MEX) | A CLABE (18 dígitos em accountNumber) já codifica o banco, então um payout BBAN não precisa de mais nada. Selecionar accountNumberType: "DIMO" troca o accountNumber por um telefone de 10 dígitos e torna o bankCode obrigatório. |
Índia (IND) | accountNumberType: "UPI" coloca um Virtual Payment Address (user@psp) em accountNumber e dispensa bankCode/accountType. BBAN exige os três, com o bankCode sendo um IFSC (^[A-Z]{4}0[A-Z0-9]{6}$). |
Coreia do Sul (KOR) | O único corredor que restringe a identidade do remetente: sender.birthDate (YYYY-MM-DD) e sender.birthCountryCode (alpha-3) são ambos obrigatórios. |
| SEPA (23 países) | Apenas o IBAN em accountNumber, validado contra o formato de IBAN do próprio país (^DE\d{20}$, ^FR\d{12}[A-Z0-9]{11}\d{2}$, …). Sem accountNumberType, sem código de banco. |
Como Consumir um Schema
Lendo as palavras-chave do draft-07 ao renderizar um campo:
| Palavra-chave | Uso |
|---|---|
type | Tipo de dado: "string", "object", "array", "number", "boolean" |
required | Array com os nomes das propriedades obrigatórias (naquele nível do objeto) |
properties | Definições de campo de um objeto |
items | Schema de elemento de um array (ex.: documents) |
enum | Valores permitidos — renderize um enum de valor único como somente leitura e um de múltiplos valores como select |
pattern | Regex que o valor deve casar (CEP, CPF, números de conta) |
minLength | Comprimento mínimo da string |
description | Dica legível — bom padrão para placeholder ou label |
Note as duas palavras-chave condicionais acima: um validador que leia apenas o required de topo vai aceitar payloads que o gateway rejeita com VE_001.
Fluxo recomendado:
- Leia o país de destino do seu formulário e converta para ISO-3.
GET /schema/{countryCode}para esse código.- Renderize o formulário de destinatário a partir de
recipient.properties— incluindopaymentMethod, cujos campos dependem dotypee, em alguns corredores, doaccountNumberType. - Aplique o bloco
senderse o schema trouxer um, e ofereça apenas os valores derecipientAmount.currencyque o enum permite. - Valide cada valor contra seu
pattern/enum/required, avaliandoallOf/if/then/else. - Envie o
sender, orecipiente oadditionalDatacoletados no payload de Push Transaction.
Próximos Passos
- Push Transaction — Construa o
recipiente opaymentMethoda partir deste schema - Bancos — Consulte códigos de banco para popular os campos
bankCode - Check Account — Valide os dados da conta antes de transacionar
