Inyo

Pull e Push em uma Única Etapa

O tipo de pagamento PULLPUSH combina a coleta e o desembolso de fundos em uma única chamada de API. Os fundos são debitados do cartão ou da conta bancária do remetente e, simultaneamente, enviados ao destino do destinatário.

Isso reduz a latência e simplifica fluxos em que os fundos precisam se mover entre duas partes em uma única transação.

Endpoint

POST https://{FQDN}/v2/payment

Headers:

HeaderValor
AuthorizationBearer {accessToken}
Content-Typeapplication/json

Estrutura da Requisição

Objeto Raiz

CampoTipoObrigatórioDescrição
externalPaymentIdstringSimSeu identificador único do pagamento
ipAddressstringSimEndereço IPv4 ou IPv6 do originador
paymentTypestringSim"PULLPUSH"
amountobjectSimValor do pull (lado do remetente, em USD)
recipientAmountobjectSimValor do push (lado do destinatário, qualquer moeda)
exchangeRatenumberSimTaxa de câmbio entre as moedas de origem e destino
senderobjectSimDados do remetente e origem do pagamento
recipientobjectSimDados do destinatário e destino do payout

Sender

A estrutura do sender é idêntica à de um pagamento Pull — inclui customer, customerAddress e source:

sender.source — Cartão

CampoTipoObrigatórioDescrição
typestringSim"CARD"
card.tokenstringSimUUID do token do cartão gerado pelo tokenizador

sender.source — Conta Bancária

CampoTipoObrigatórioDescrição
typestringSim"BANK_ACCOUNT"
accountTypestringSim"savings", "checking", etc.
accountNumberstringSimNúmero da conta bancária
routingNumberstringSimNúmero de roteamento ABA
accountHolderobjectSim{ type, firstName, lastName }

Recipient

A estrutura do recipient é idêntica à de um pagamento Push — inclui customer, customerAddress e destination.

Exemplo — PULLPUSH (Cartão → Carteira)

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "pullpush-001",
    "ipAddress": "203.0.113.42",
    "paymentType": "PULLPUSH",
    "amount": {
      "total": 100.00,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 497.50,
      "currency": "BRL"
    },
    "exchangeRate": 4.975,
    "sender": {
      "customer": {
        "firstName": "Lucas",
        "lastName": "Silva",
        "phoneNumber": "11999999999",
        "documentNumber": "12345678900",
        "documentType": "NATIONAL_ID",
        "email": "[email protected]",
        "countryCodeAlpha3": "USA"
      },
      "customerAddress": {
        "stateCode": "CA",
        "city": "San Francisco",
        "line1": "123 Mission St",
        "line2": "Suite 900",
        "state": "California",
        "zipCode": "94105"
      },
      "source": {
        "type": "CARD",
        "card": {
          "token": "ab5fc589-8b48-4531-94c0-68b0629c13fe"
        }
      }
    },
    "recipient": {
      "customer": {
        "firstName": "Ana",
        "lastName": "Souza",
        "phoneNumber": "21987654321",
        "documentNumber": "10987654321",
        "documentType": "PASSPORT",
        "email": "[email protected]",
        "countryCodeAlpha3": "BRA"
      },
      "customerAddress": {
        "stateCode": "RJ",
        "city": "Rio de Janeiro",
        "line1": "Rua da Alfândega 45",
        "state": "Rio de Janeiro",
        "zipCode": "20010-030"
      },
      "destination": {
        "type": "WALLET",
        "wallet": {
          "walletId": "[email protected]"
        }
      }
    }
  }'

Exemplo — PULLPUSH (Conta Bancária → PIX)

curl -X POST https://{FQDN}/v2/payment \
  -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIs...' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalPaymentId": "pullpush-002",
    "ipAddress": "203.0.113.42",
    "paymentType": "PULLPUSH",
    "amount": {
      "total": 200.00,
      "currency": "USD"
    },
    "recipientAmount": {
      "total": 995.00,
      "currency": "BRL"
    },
    "exchangeRate": 4.975,
    "sender": {
      "customer": {
        "firstName": "Maria",
        "lastName": "Johnson",
        "phoneNumber": "5551234567",
        "documentNumber": "987654321",
        "documentType": "DRIVER_LICENSE",
        "email": "[email protected]",
        "countryCodeAlpha3": "USA"
      },
      "customerAddress": {
        "stateCode": "TX",
        "city": "Austin",
        "line1": "789 Congress Ave",
        "state": "Texas",
        "zipCode": "78701"
      },
      "source": {
        "type": "BANK_ACCOUNT",
        "accountType": "checking",
        "accountNumber": "123456789",
        "routingNumber": "021000021",
        "accountHolder": {
          "type": "personal",
          "firstName": "Maria",
          "lastName": "Johnson"
        }
      }
    },
    "recipient": {
      "customer": {
        "firstName": "Pedro",
        "lastName": "Santos",
        "phoneNumber": "11987654321",
        "documentNumber": "98765432100",
        "documentType": "NATIONAL_ID",
        "email": "[email protected]",
        "countryCodeAlpha3": "BRA"
      },
      "customerAddress": {
        "stateCode": "SP",
        "city": "São Paulo",
        "line1": "Av Paulista 1000",
        "state": "São Paulo",
        "zipCode": "01311-100"
      },
      "destination": {
        "type": "PIX",
        "pix": {
          "keyType": "EMAIL",
          "key": "[email protected]"
        }
      }
    }
  }'

Principais Diferenças em Relação a Pull + Push Separados

AspectoChamadas separadasPULLPUSH
Chamadas de API2 (um pull, um push)1
AtomicidadeIndependentes — o push pode falhar após o pull ter sucessoTransação única
Taxa de câmbioDeve ser gerenciada separadamenteEspecificada na mesma requisição
Caso de usoFluxos complexos com lógica intermediáriaRemessa direta de ponta a ponta