Pular para o conteúdo

Antes de poder criar um pagamento, você solicita uma coleção de cotações: um conjunto de cotações precificadas para uma transferência proposta. Cada cotação fixa uma taxa de câmbio, o detalhamento das tarifas e uma janela de validade, para que você possa revisar as condições antes de se comprometer com um pagamento.

Este guia abrange:

  1. Criar uma coleção de cotações, cotando pelo valor de origem ou de destino.
  2. Ler a resposta.
  3. Tratar o caso em que a cotação expira.
  4. Recuperar uma coleção de cotações ou uma cotação individual após a criação.

Para o embasamento conceitual, consulte Cotações.


Antes de começar

Para seguir este guia, você precisa de:

  • Acesso ao ambiente UAT da API do Payments Direct.
  • Um token de acesso OAuth2 válido com o escopo quote_collections:write. Consulte Solicitar um token de acesso.
  • As moedas e os países de origem e de destino do pagamento proposto.
  • Um payinCategory que corresponda ao seu modelo de financiamento (PRE_FUNDING, CREDIT_FUNDING ou JIT_FUNDING). Consulte Métodos de financiamento.
  • Um payoutCategory igual a BANK ou CRYPTO.

Etapa 1: Criar uma coleção de cotações

POST /v2/quotes/quote-collection

Uma requisição de coleção de cotações especifica o corredor, a categoria de payout e o valor que você quer precificar. Uma coleção de cotações normalmente contém uma única cotação.

Parâmetros da requisição

ParâmetroObrigatórioDescrição
quoteAmountSimO valor a cotar.
quoteAmountTypeSimSe quoteAmount é o valor enviado (SOURCE_AMOUNT) ou o valor recebido (DESTINATION_AMOUNT).
sourceCurrencySimA moeda que você está enviando (ISO 4217, de 3 a 5 caracteres).
destinationCurrencySimA moeda que o beneficiário recebe (ISO 4217, de 3 a 5 caracteres).
payinCategorySimO seu modelo de financiamento: PRE_FUNDING, CREDIT_FUNDING ou JIT_FUNDING.
payoutCategorySimO tipo de payout: BANK para pagamentos em conta bancária, CRYPTO para pagamentos em ativos digitais.
sourceCountryNãoO país do remetente (ISO 3166-1 alfa-2).
destinationCountryNãoO país do beneficiário (ISO 3166-1 alfa-2).
destinationBlockchainNetworkNãoObrigatório quando payoutCategory é CRYPTO. Especifica a rede blockchain do payout.

Use SOURCE_AMOUNT quando você controla quanto quer enviar. A API calcula quanto o beneficiário recebe depois de aplicar a taxa de câmbio e as tarifas.

Neste exemplo, o remetente quer enviar 10.000 USD a um beneficiário no México que recebe em MXN.

curl -i -X POST \
  https://api.test.ripple.com/v2/quotes/quote-collection \
  -H "Authorization: Bearer <YOUR_JWT_HERE>" \
  -H "Content-Type: application/json" \
  -d '{
    "quoteAmount": 10000.00,
    "quoteAmountType": "SOURCE_AMOUNT",
    "sourceCurrency": "USD",
    "destinationCurrency": "MXN",
    "sourceCountry": "US",
    "destinationCountry": "MX",
    "payinCategory": "PRE_FUNDING",
    "payoutCategory": "BANK"
  }'

Etapa 2: Revisar a resposta

Uma requisição bem-sucedida retorna HTTP 201 com uma coleção de cotações. O quoteCollectionId de nível superior identifica a coleção; o array quotes contém a cotação retornada.

{
  "quoteCollectionId": "11111111-aaaa-2222-bbbb-222222222222",
  "quotes": [
    {
      "quoteId": "7ea3399c-1234-5678-8d8f-d320ea406630",
      "quoteStatus": "ACTIVE",
      "quoteAmountType": "SOURCE_AMOUNT",
      "sourceAmount": 10000.00,
      "destinationAmount": 204533.30,
      "sourceCurrency": "USD",
      "destinationCurrency": "MXN",
      "sourceCountry": "US",
      "destinationCountry": "MX",
      "payoutCategory": "BANK",
      "payinCategory": "PRE_FUNDING",
      "adjustedExchangeRate": {
        "adjustedRate": 20.4136
      },
      "fees": [
        {
          "totalFee": 14.00,
          "feeCurrency": "USD",
          "feeBreakdown": [
            {
              "calculatedFee": 2.00,
              "feeName": "Fixed service fee",
              "feeDescription": "Fixed service fee for this transaction."
            },
            {
              "calculatedFee": 12.00,
              "feeName": "Variable service fee",
              "feeDescription": "Variable service fee for this transaction."
            }
          ]
        }
      ],
      "createdAt": "2025-11-13T22:44:34.711Z",
      "expiresAt": "2025-11-13T22:59:34.711Z"
    }
  ]
}

Campos principais

CampoDescrição
quoteCollectionIdO ID desta coleção. Use-o para recuperar a coleção mais tarde com GET /v2/quotes/quote-collection/{quote-collection-id}.
quoteIdO ID de uma cotação individual. Use o quoteId para criar um pagamento.
quoteStatusACTIVE significa que a cotação pode ser usada. EXPIRED significa que a janela de validade passou e é necessária uma nova coleção de cotações.
payoutCategoryO tipo de payout desta cotação (BANK ou CRYPTO).
paymentRailQuando presente, o payment rail usado nesta cotação (por exemplo, SPEI, ACH).
adjustedExchangeRate.adjustedRateA taxa de câmbio que a Ripple aplicará. Essa taxa fica fixada durante toda a janela de validade da cotação.
fees[].totalFeeTarifa total de serviço da transação.
taxesTributos sobre consumo aplicáveis às tarifas da Ripple (VAT, GST e afins). Ausente quando não há tributos aplicáveis.
createdAt / expiresAtA janela de validade da cotação. Por padrão, as cotações são válidas por 15 minutos.
quoteId e paymentId

O quoteId se torna o paymentId quando você cria o pagamento. Armazene-o antes de passar para a próxima etapa.


Etapa 3: Tratar quando a cotação expira

As cotações são válidas por tempo limitado (15 minutos por padrão). Antes de criar um pagamento, verifique se quoteStatus é ACTIVE.

  • Se quoteStatus for ACTIVE, a cotação pode ser usada para criar um pagamento.
  • Se quoteStatus for EXPIRED, a cotação não pode mais ser usada. Solicite uma nova coleção de cotações, que refletirá a taxa de câmbio e as tarifas atuais.

Use expiresAt para implementar uma lógica de atualização no cliente, por exemplo, pedindo a confirmação do usuário antes que a cotação expire, ou recotando automaticamente quando o tempo restante ficar abaixo de um limite.

remainingSeconds = expiresAt - now()
if remainingSeconds <= 0:
    request a new quote collection

Recotar gera um novo quoteCollectionId e novos valores de quoteId.


Etapa 4: Recuperar uma coleção de cotações

GET /v2/quotes/quote-collection/{quote-collection-id}

Use este endpoint para recuperar uma coleção de cotações criada anteriormente, por exemplo em um fluxo assíncrono em que você armazenou o quoteCollectionId e está verificando o status da cotação antes de iniciar um pagamento.

curl -i -X GET \
  https://api.test.ripple.com/v2/quotes/quote-collection/11111111-aaaa-2222-bbbb-222222222222 \
  -H "Authorization: Bearer <YOUR_JWT_HERE>"

O schema da resposta é idêntico ao da resposta do POST. Verifique o quoteStatus da cotação antes de prosseguir; ela pode ter expirado desde que foi criada.


Etapa 5: Recuperar uma cotação individual

GET /v2/quotes/{quote-id}

Use este endpoint para recuperar uma cotação específica por ID.

curl -i -X GET \
  https://api.test.ripple.com/v2/quotes/7ea3399c-1234-5678-8d8f-d320ea406630 \
  -H "Authorization: Bearer <YOUR_JWT_HERE>"

A resposta contém os mesmos campos de uma entrada única do array quotes, sem o invólucro quoteCollectionId.


Tratamento de erros

Os erros de cotação retornam uma resposta estruturada com um status e um array errors. Cada erro inclui code, title, type, description e timestamp.

Os códigos de erro usam três prefixos:

PrefixoCategoriaCausas comuns
USR_Erro de validaçãoCampos obrigatórios ausentes, códigos de moeda inválidos, valores fora da faixa permitida ou valores inválidos de payinCategory ou payoutCategory.
CFG_Erro de configuraçãoCorredor não compatível ou configuração de tenant ausente.
SYS_Erro de sistemaFalha interna ou upstream na precificação de câmbio. Envie a requisição novamente; entre em contato com o suporte se o erro persistir.

Erros de validação comuns

payoutCategory ausente: o endpoint v2 exige payoutCategory. Omiti-lo retorna um erro de validação USR_.

Códigos de moeda ou de país inválidos: sourceCurrency e destinationCurrency precisam ter de 3 a 5 caracteres alfabéticos. sourceCountry e destinationCountry precisam ser códigos ISO 3166-1 alfa-2 (exatamente 2 caracteres).

Valores de payinCategory obsoletos: FUNDED e T_PLUS_ONE ainda são aceitos no endpoint v2, mas estão obsoletos. Use PRE_FUNDING no lugar de FUNDED e CREDIT_FUNDING no lugar de T_PLUS_ONE. Consulte Métodos de financiamento.

Corredor não compatível: se o par de moedas não estiver configurado para o seu tenant, a API retorna um erro CFG_. Entre em contato com o seu representante Ripple se o erro persistir.


Próximos passos

Assim que você tiver uma cotação ACTIVE e tiver selecionado um quoteId, estará pronto para criar um pagamento.

Consulte Criar um pagamento para ver o passo a passo completo da etapa de criação do pagamento, incluindo como informar o quoteId junto com os IDs da identidade do beneficiário e do instrumento financeiro.