Guia de Migração

Existem duas formas de migrar para o Toktus API. Escolha a que melhor se encaixa na sua situação:

AbordagemAlterações de códigoIdeal para
Compatibility ModeNenhuma — só muda URL e autenticaçãoQuem quer migrar rápido e adaptar o código depois
Migração manualAdaptar payload e parsing de respostaNovas integrações ou quem quer usar todos os recursos do Toktus API

[!NOTE]
O Compatibility Mode e a migração manual não são mutuamente exclusivos. Você pode ativar o Compatibility Mode para migrar agora, e gradualmente adaptar os endpoints para o formato nativo usando o header X-Payload-Format: native por chamada.


Opção 1 — Migração zero-código (Compatibility Mode)

Se você já tem uma integração funcionando com um gateway e quer migrar sem mexer no código:

1. Configure o gateway e o modo de compatibilidade na conta:

curl -X PATCH https://api.toktus.com/api/v1/clients/settings \
  -H "x-api-key: tk_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "primaryGateway": "asaas",
    "gatewayFallbacks": ["stripe"],
    "compatibilityMode": "pagarme"
  }'

2. Mude a URL base e a autenticação no seu sistema:

Antes (Pagar.me direto)

    URL:  https://api.pagar.me/core/v5/orders
    Auth: Authorization: Basic <base64(sk_test_xxx:)>
    ```

## Depois (Toktus API)
URL:  https://api.toktus.com/api/v1/charges
Auth: x-api-key: tk_SUA_CHAVE
```

3. Pronto. O payload que você envia e a resposta que você lê continuam no mesmo formato do gateway anterior.

Para detalhes sobre como o Compatibility Mode funciona, incluindo headers de rastreabilidade e migração gradual, veja o Guia de Configuração de Gateway da Conta.


Opção 2 — Migração manual (formato nativo)

Esta opção exige ajustes no código, mas dá acesso completo a todos os recursos do Toktus API: fallback automático, coprodutores, responseFormat, e payload mais simples.

Checklist

  • Trocar URL base para https://api.toktus.com/api/v1
  • Substituir header de autenticação por x-api-key: tk_SUA_CHAVE
  • Cadastrar credenciais do gateway em POST /credentials
  • Configurar primaryGateway em PATCH /clients/settings (opcional, mas recomendado)
  • Atualizar payload de envio (remover campos específicos do gateway antigo)
  • Atualizar leitura dos campos de resposta (ver tabelas abaixo)
  • Atualizar comparação de status (ex: "paid""approved")
  • (Se usar split) Cadastrar coprodutores e atualizar payload

Mapeamento de campos — Pagar.me

Payload de entrada

Campo Pagar.meCampo Toktus APIObservação
payments[0].payment_methodpaymentMethodcredit_card, boleto, pix
payments[0].credit_card.card.numbercreditCard.number
payments[0].credit_card.card.holder_namecreditCard.holderName
payments[0].credit_card.card.exp_monthcreditCard.expMonth
payments[0].credit_card.card.exp_yearcreditCard.expYear
payments[0].credit_card.card.cvvcreditCard.cvv
payments[0].credit_card.installmentscreditCard.installments
payments[0].credit_card.tokencreditCard.token
payments[0].pix.expires_inpix.expiresInSeconds
payments[0].boleto.due_atboleto.dueDateSomente a data: AAAA-MM-DD
payments[0].boleto.instructionsboleto.instructions
items[0].amount (soma de todos)amountEm centavos nos dois casos
items[0].descriptiondescription
customer.namecustomer.name
customer.emailcustomer.email
customer.documentcustomer.document
customer.phones.mobile_phonecustomer.phoneConcatenar area_code + number
customer_idcustomerId

Resposta — PIX

Campo Pagar.meCampo Toktus API
data.iddata.externalId
data.statusdata.status
data.charges[0].last_transaction.qr_codedata.pixQrCode
data.charges[0].last_transaction.qr_code_urldata.pixCopyPaste
data.amountdata.amount
data.currencydata.currency

Resposta — Boleto

Campo Pagar.meCampo Toktus API
data.charges[0].last_transaction.urldata.boletoUrl
data.charges[0].last_transaction.linedata.boletoBarcode

Resposta — Cartão de crédito

Campo Pagar.meCampo Toktus API
data.charges[0].iddata.externalId
data.charges[0].amountdata.amount
data.charges[0].paid_amountdata.paidAmount
data.statusdata.status

Status

Status Pagar.meStatus Toktus API
paidapproved
pending / waiting_payment / pending_paymentpending
processingprocessing
refuseddeclined
canceledcancelled
refunded / chargedbackrefunded
failed / with_errorfailed

Mapeamento de campos — Asaas

Payload de entrada

Campo AsaasCampo Toktus APIObservação
customercustomerIdID do customer no Asaas
billingTypepaymentMethodVer tabela de conversão abaixo
value (reais, float)amount (centavos, inteiro)Multiplicar por 100
dueDateboleto.dueDatePara boletos
descriptiondescription
installmentCountcreditCard.installments
creditCard.holderNamecreditCard.holderName
creditCard.numbercreditCard.number
creditCard.expiryMonthcreditCard.expMonth
creditCard.expiryYearcreditCard.expYear
creditCard.ccvcreditCard.cvv

Conversão de billingType:

billingType AsaaspaymentMethod Toktus API
CREDIT_CARDcredit_card
DEBIT_CARDdebit_card
BOLETOboleto
PIXpix

Resposta

Campo AsaasCampo Toktus APIObservação
idexternalId
value (reais)amount (centavos)Multiplicar por 100
statusstatusVer conversão abaixo
pixQrCodeImagepixQrCode
pixCopiaEColapixCopyPaste
bankSlipUrlboletoUrl
nossoNumeroboletoBarcode

Status

Status AsaasStatus Toktus API
PENDINGpending
CONFIRMED / RECEIVEDapproved
REFUSEDdeclined
CANCELLEDcancelled
REFUNDEDrefunded

Mapeamento de campos — Stripe

Payload de entrada

Campo StripeCampo Toktus APIObservação
payment_methodcreditCard.paymentMethodId
sourcecreditCard.token
amountamountMesma unidade: centavos
currencycurrency
descriptiondescription
capture_method: "manual"capture: falsePré-autorização
customercustomerId
payment_method_types[0]paymentMethodcardcredit_card

Resposta

Campo StripeCampo Toktus API
idexternalId
status (succeeded)status (approved)
amountamount (mesma unidade: centavos)
amount_receivedpaidAmount
amount_refundedrefundedAmount
next_action.boleto_display_details.hosted_voucher_urlboletoUrl
next_action.pix_display_qr_code.image_url_pngpixQrCode
next_action.pix_display_qr_code.datapixCopyPaste

Status

Status StripeStatus Toktus API
succeededapproved
processingprocessing
requires_payment_method / requires_actionpending
canceledcancelled

Mapeamento de campos — Mercado Pago

Payload de entrada

Campo Mercado PagoCampo Toktus APIObservação
transaction_amount (reais, float)amount (centavos, inteiro)Multiplicar por 100
tokencreditCard.tokenObrigatório para cartão
payment_method_idcreditCard.paymentMethodIdAlternativo ao token
installmentscreditCard.installments
descriptiondescription
payer.emailcustomer.email
payer.first_name + payer.last_namecustomer.nameConcatenar
payer.identification.numbercustomer.document
payment_method_id: "pix"paymentMethod: "pix"

Resposta

Campo Mercado PagoCampo Toktus API
idexternalId
statusstatus
transaction_amount (reais)amount (centavos)
point_of_interaction.transaction_data.qr_codepixCopyPaste
point_of_interaction.transaction_data.qr_code_base64pixQrCode
transaction_details.external_resource_urlboletoUrl

Status

Status Mercado PagoStatus Toktus API
approvedapproved
in_processprocessing
pendingpending
rejecteddeclined
cancelledcancelled
refundedrefunded

Mapeamento de campos — PagSeguro

Payload de entrada

Campo PagSeguroCampo Toktus APIObservação
charges[0].amount.value (reais, float)amount (centavos, inteiro)Multiplicar por 100
charges[0].payment_method.typepaymentMethodVer conversão abaixo
charges[0].payment_method.card.encryptedcreditCard.token
charges[0].payment_method.card.holder.namecreditCard.holderName
charges[0].payment_method.installmentscreditCard.installments
items[0].namedescription
customer.namecustomer.name
customer.emailcustomer.email
customer.tax_idcustomer.document
charges[0].boleto.due_dateboleto.dueDate

Conversão de payment_method.type:

type PagSeguropaymentMethod Toktus API
CREDIT_CARDcredit_card
BOLETOboleto
PIXpix

Resposta

Campo PagSeguroCampo Toktus API
charges[0].idexternalId
charges[0].statusstatus
charges[0].amount.value (reais)amount (centavos)
charges[0].boleto.links[0].hrefboletoUrl
charges[0].boleto.formatted_barcodeboletoBarcode
charges[0].qr_codes[0].textpixCopyPaste
charges[0].qr_codes[0].links[0].hrefpixQrCode

Status

Status PagSeguroStatus Toktus API
PAIDapproved
WAITINGpending
IN_ANALYSISprocessing
DECLINEDdeclined
CANCELLEDcancelled
REFUNDEDrefunded

Exemplo prático — antes e depois

Antes (Pagar.me direto)

    // Chamada direta à Pagar.me
    const response = await axios.post('https://api.pagar.me/core/v5/orders', {
      customer: { name: 'João', email: '[email protected]', document: '12345678900' },
      items: [{ amount: 10000, description: 'Produto', quantity: 1 }],
      payments: [{
        payment_method: 'pix',
        pix: { expires_in: 3600 }
      }]
    }, {
      auth: { username: 'sk_test_xxx', password: '' }
    });

    // Parsing específico da Pagar.me
    const pixCode = response.data.charges[0].last_transaction.qr_code_url;
    const status = response.data.status; // "paid"
    const isPaid = status === 'paid';
    ```

## Depois (Toktus API)

```javascript
    // Chamada ao Toktus API (campo gateway opcional se primaryGateway configurado)
    const response = await axios.post(
      'https://api.toktus.com/api/v1/charges',
      {
        paymentMethod: 'pix',
        amount: 10000,
        description: 'Produto',
        pix: { expiresInSeconds: 3600 },
        customer: { name: 'João', email: '[email protected]', document: '12345678900' }
      },
      { headers: { 'x-api-key': 'tk_SUA_CHAVE' } }
    );

    // Parsing normalizado — funciona com qualquer gateway e fallback
    const pixCode = response.data.data.pixCopyPaste;
    const status = response.data.data.status; // "approved"
    const isPaid = status === 'approved';
    ```

---

## Transparência do fallback

Quando um fallback é acionado, a resposta inclui campos extras:

```json
{
  "success": true,
  "data": {
    "gateway": "asaas",
    "gatewayFallbackUsed": true,
    "primaryGateway": "pagarme",
    "status": "approved",
    "pixCopyPaste": "00020126...",
    "externalId": "pay_asaas_xxx"
  }
}

Use gatewayFallbackUsed para logar ou alertar quando o fallback for acionado.

Independente do compatibilityMode, os headers X-RG-* sempre indicam o gateway real que processou — sem precisar parsear o body:

X-RG-Gateway: asaas
X-RG-Fallback-Used: true
X-RG-Charge-Id: ch-rg-uuid-interno

Migração do split

Antes — IDs fixos por gateway

"split": [
  { "type": "percentage", "amount": 92, "recipient_id": "re_abc123" }
]

Se o fallback cair no Asaas, re_abc123 não existe lá — o split falha silenciosamente.

Depois — referência por coprodutor

"split": [
  { "type": "percentage", "amount": 92, "coproducerEmail": "[email protected]" }
]

O sistema resolve o recipient_id correto para qualquer gateway, incluindo fallbacks.

Veja o Guia de Coprodutores para configurar.


Próximos Passos