Pular para o conteúdo principal

Referência da API de eFX

Todas as rotas ficam sob /api/v1/efx/ e usam o cabeçalho Authorization: <AppID>. A URL base de produção é https://api.woovi.com.

RotaEscopo
GET /api/v1/efx/quoteEFX_PAYMENT_CREATE
POST /api/v1/efx/payment-inEFX_PAYMENT_CREATE
GET /api/v1/efx/payment-in/{id}EFX_PAYMENT_LIST
GET /api/v1/efx/payment-inEFX_PAYMENT_LIST

Valores monetários são inteiros em centavos de real. Datas seguem a ISO 8601. Erros respondem com { "error": "<mensagem>" }.

Cotação​

GET /api/v1/efx/quote

Calcula o total a pagar sem criar nada.

Query paramObrigatórioDescrição
valuesimValor da operação em centavos de real, inteiro maior que zero.
currencysimBRL.
purposesimGOODS_PURCHASE (compra de bens) ou SERVICE_PURCHASE (compra de serviços).

Resposta 200: { "quote": { ... } }

CampoDescrição
purposeFinalidade informada.
valueValor da operação, em centavos. É o que chega na sua CNR.
currencyBRL.
iof.rateAlíquota de IOF, em fração (0.035 = 3,5%).
iof.valueIOF em centavos.
fee.valueTarifa da Woovi em centavos.
totalValuevalue + iof.value + fee.value, em centavos. É o que o pagador paga.
expiresAtAté quando a cotação vale como referência.

Criar um pagamento​

POST /api/v1/efx/payment-in

O corpo tem que ser JSON (Content-Type: application/json), com até 256 KB.

CampoTipoObrigatórioDescrição
correlationIDstringsimSeu identificador único do pagamento, com até 200 caracteres. Garante a idempotência.
valueintegersimValor da operação em centavos de real, maior que zero. É o valor liquidado na sua CNR.
currencystringsimBRL.
purposestringsimGOODS_PURCHASE ou SERVICE_PURCHASE.
expectedTotalValueintegernãoO totalValue que você mostrou ao pagador. Se o calculado na criação for outro, a resposta é 409 e nada é criado.
descriptionstringnãoDescrição da operação, com até 140 caracteres.
expiresInintegernãoSegundos que o Pix fica pagável, de 300 a 3600. Padrão: 900.
ecommerceIntegratedbooleannãoSó para empresas habilitadas pela Woovi como e-commerce integrado. Enviar true sem essa habilitação responde 400.
payerobjectsimO seu cliente no Brasil, que paga o Pix.
payer.namestringsimNome do pagador.
payer.taxIDstringsimCPF ou CNPJ válido do pagador, com ou sem pontuação. O Pix tem que sair de uma conta com esse mesmo documento.
payer.emailstringnãoE-mail do pagador.
payer.phonestringnãoTelefone do pagador.
beneficiaryobjectsimQuem recebe o valor: o titular da CNR.
beneficiary.namestringsimNome do beneficiário.
beneficiary.countrystringsimPaís do beneficiário, código ISO 3166-1 alfa-2 em maiúsculas (ex.: US).
beneficiary.typestringsimINDIVIDUAL ou COMPANY.
beneficiary.taxIDstringsimCPF ou CNPJ de não residente do beneficiário (11 ou 14 dígitos, com ou sem pontuação).
beneficiary.bankAccount.ispbstringsimISPB da instituição da CNR.
beneficiary.bankAccount.branchstringsimAgência da CNR.
beneficiary.bankAccount.accountNumberstringsimNúmero da CNR.
beneficiary.bankAccount.accountTypestringnãoCHECKING ou PAYMENT.
invoiceobjectsimA fatura da operação.
invoice.numberstringsimNúmero da fatura.
invoice.issuedAtstringsimData de emissão, ISO 8601.
invoice.urlstringnãoLink http(s) da fatura.

Respostas:

  • 201 { "paymentIn": { ... } }: pagamento criado, já com o Pix.
  • 200 { "paymentIn": { ... } }: o mesmo correlationID já tinha sido criado com o mesmo corpo. Devolve o pagamento existente.

Limite por operação​

Sem a habilitação de e-commerce integrado, o value convertido pela PTAX de venda do Banco Central (sem margem) não pode passar de US$ 10.000. Acima disso: 400 value exceeds the US$ 10,000 limit per operation for non e-commerce payments.

Consultar um pagamento​

GET /api/v1/efx/payment-in/{id}

O {id} aceita o id do pagamento ou o seu correlationID. Só os pagamentos da sua empresa são encontrados; os demais respondem 404 paymentIn not found.

Resposta 200: { "paymentIn": { ... } }

Listar pagamentos​

GET /api/v1/efx/payment-in

Mais recentes primeiro.

Query paramDescrição
startCriados a partir desta data (ISO 8601).
endCriados até esta data (ISO 8601).
statusFiltra por status (veja abaixo).
purposeGOODS_PURCHASE ou SERVICE_PURCHASE.
skipQuantos pular. Padrão: 0.
limitQuantos devolver, de 1 a 100. Padrão: 20.
curl --request GET \
--url 'https://api.woovi.com/api/v1/efx/payment-in?status=REFUND_PENDING&limit=50' \
--header 'Authorization: <SEU_APPID>'

Resposta 200:

{
"pageInfo": {
"skip": 0,
"limit": 50,
"totalCount": 1,
"hasPreviousPage": false,
"hasNextPage": false
},
"paymentIns": [{ "id": "6a0c3f2e9b1d4c0012ab34cd", "status": "REFUND_PENDING", "...": "..." }]
}

O objeto paymentIn​

CampoDescrição
idId do pagamento na Woovi.
correlationIDO seu identificador.
statusStatus atual (veja abaixo).
purposeFinalidade.
valueValor da operação, em centavos. É o que é liquidado na sua CNR.
currencyBRL.
iof{ rate, value }, travados na criação.
fee{ value }, tarifa da Woovi travada na criação.
totalValueTotal do Pix, em centavos.
payer{ name, taxID } do pagador (só dígitos).
beneficiary{ name, country } do beneficiário.
pix.brCodePix copia e cola, também usado para gerar o QR Code.
pix.qrCodeImageImagem do QR Code.
pix.paymentLinkUrlPágina de pagamento.
paidAtQuando o Pix foi pago.
endToEndIdIdentificador do Pix recebido.
settledAtQuando o value foi liquidado na CNR.
refundPresente quando há valor a devolver: { value, reason }, e também endToEndId quando REFUNDED. Veja Devoluções.
expiresAtFim do prazo para pagar o Pix.
createdAtCriação do pagamento.

Status​

StatusSignificado
CREATEDPix criado, aguardando o pagamento.
PAIDPix recebido e conferido. A liquidação vai começar.
SETTLINGTransferência para a CNR em andamento.
COMPLETEDLiquidado na CNR.
EXPIREDNão pago no prazo.
REFUND_PENDINGRecebido, mas tem que ser devolvido ao pagador. Não é liquidado.
REFUNDEDDevolução concluída.
FAILEDO Pix não pôde ser criado. Use um correlationID novo.

Erros​

HTTPQuando
400Corpo ou parâmetro inválido (a mensagem diz qual campo), conteúdo com HTML ou script, CNR não cadastrada, limite de US$ 10.000 ultrapassado ou ecommerceIntegrated sem habilitação.
401Authorization ausente ou inválido.
403Aplicação sem escopos (application must use scopes), sem o escopo da rota ou empresa sem eFX habilitado (eFX is not enabled for this company).
404(GET) Nenhum pagamento com esse id ou correlationID na sua empresa.
409correlationID already used with a different body, ou quote changed: totalValue is now <valor> quando o expectedTotalValue não bate.
413Corpo acima de 256 KB.
415Content-Type diferente de application/json.
502O Pix não pôde ser criado. Com retry with the same correlationID, repita o mesmo POST; com use a new correlationID to try again, o pagamento ficou FAILED e você deve criar outro.
503Cotação indisponível no momento (quote unavailable for <moeda>). Tente de novo mais tarde.