Pagar.me: cobrar e tokenizar
Cria a cobrança de um pedido no Pagar.me e troca o cartão por um token.
Pagar.me é o gateway de pagamentos (PSP) que processa cartão, boleto e Pix para várias lojas da plataforma. Estas rotas criam a cobrança e tokenizam o cartão. São abertas a visitantes (a identidade do pedido é o order_id) e exigem o módulo pagarme.
Cobrar no Pagar.me
É a cobrança principal do Pagar.me (API v5 de pedidos). Aceita cartão de crédito, boleto e Pix. Funciona para visitante e logado. O valor cobrado é o total do pedido no servidor; o amount do corpo só precisa ser maior que zero. Para cartão, mande uma destas fontes: card_id (cartão salvo), card_token (obtido em tokenizar) ou os campos brutos do cartão. Exige o módulo pagarme.
/api/v1/storefront/pagarme/chargePúblicaCria a cobrança de um pedido por cartão, boleto ou Pix
Corpo da requisição
order_iduuidobrigatórioamountintegerobrigatóriopayment_methodstringobrigatóriocredit_cardboletopixcustomer_namestringobrigatóriocustomer_emailstringobrigatóriocustomer_cpfstringcustomer_cnpjstringcustomer_phonestringbilling_line_1stringbilling_line_2stringbilling_citystringbilling_statestringbilling_zip_codestringcard_tokenstringtok_...).card_idstringcard_...). Dispensa número, validade e CVV.card_numberstringcard_holderstringcard_number).card_exp_monthintegercard_number).card_exp_yearintegercard_number).card_cvvstringcard_number).installmentsintegerpadrão: 1operation_typestringpadrão: auth_and_captureauth_and_capturepre_authboleto_expiry_daysintegerpix_expiry_secondsintegerdescriptionstringsoft_descriptorstringcustomer_codestringbilling_namestringshipping_line_1stringshipping_line_2stringsem complemento.shipping_citystringshipping_statestringshipping_zip_codestringshipping_recipientstringshipping_descriptionstringshipping_amountintegeritemsarrayLinhas do pedido enviadas ao Pagar.me. Opcional: sem linhas válidas, é enviada uma única linha com todo o amount. Linhas com amount igual a 0 são descartadas.
codestringdescriptionstringamountintegerquantityintegerExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/pagarme/charge" \
-H "Content-Type: application/json" \
-d '{
"order_id": "3f73310d-bfdd-4713-a664-305c08eda58b",
"amount": 22500,
"payment_method": "pix",
"customer_name": "Maria Souza",
"customer_email": "maria.souza@example.com",
"customer_cpf": "12345678909",
"customer_phone": "11987654321",
"billing_line_1": "Avenida Paulista, 1000",
"billing_city": "São Paulo",
"billing_state": "SP",
"billing_zip_code": "01310-100"
}'Resposta
{
"pagarme_order_id": "or_3JvQ8xYk2m5NdR7a",
"charge_id": "ch_Kx9QzR2mVn3LdY7a",
"transaction_id": "tran_P4sT8wZc1uHeB6nM",
"status": "pending",
"payment_method": "pix",
"amount": 22500,
"installments": 1,
"pix_qr_code": "00020126580014br.gov.bcb.pix0136a1b2c3d4-e5f6-7890-abcd-ef1234567890520400005303986540522.505802BR5913MINHA LOJA6009SAO PAULO62070503***6304ABCD",
"pix_qr_code_url": "https://api.pagar.me/core/v5/transactions/tran_P4sT8wZc1uHeB6nM/qrcode?payment_method=pix",
"pix_expires_at": "2026-10-11T15:32:11Z",
"created_at": "2026-10-11T15:02:11Z"
}Campos da resposta
pagarme_order_idstringor_...).charge_idstringch_...). Guarde: é a chave para consultar e conciliar.transaction_idstringstatusstringpending, paid, authorized_pending_capture, failed, refused, canceled, refunded, chargeback... Confira sempre: uma cobrança recusada também volta com HTTP 201.payment_methodstringcredit_cardboletopixamountintegerinstallmentsinteger1 = à vista).card_brand, card_last_digitsstringcard_idstringcard_...), que permite cobrar de novo sem pedir o número. Nunca é o número do cartão.customer_idstringcus_...).boleto_url, boleto_barcode, boleto_qr_code, boleto_due_atstringpix_qr_code, pix_qr_code_url, pix_expires_atstringacquirer_messagestringerror_messagestringgateway_responseobjectcreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Falta order_id, amount > 0, payment_method, customer_name ou customer_email; ou cartão sem card_id, card_token nem campos brutos. | {"error":"order_id is required"} |
| 403 | O módulo pagarme está desligado nesta loja. | {"error":"module_disabled","module":"pagarme"} |
| 422 | Dado do pagador: nome, CPF/CNPJ ausente ou inválido, telefone. A mensagem, em português, é para o comprador. | {"error":"informe o CPF ou CNPJ do pagador"} |
| 422 | O Pagar.me recusou os dados do cartão na tokenização. | {"error":"failed to tokenize card","detail":"cartão recusado na validação: confira número, validade e código de segurança"} |
| 500 | Falha ao criar a cobrança no Pagar.me. | {"error":"failed to create charge","detail":"..."} |
Cobrança Pagar.me (API de charges)
Rota alternativa, que segue o contrato da API de cobranças (charges) do Pagar.me. Para integrações novas use Cobrar no Pagar.me, que cobre cartão salvo, validação de documento e atualização imediata do pedido. A regra do valor é a mesma: o total do pedido substitui o amount enviado.
/api/v1/storefront/pagarme/chargesPúblicaCria uma cobrança pela API de charges do Pagar.me
Corpo da requisição
order_iduuidobrigatórioamountintegerobrigatóriopayment_methodstringobrigatóriocredit_cardboletopixcustomer_namestringobrigatóriocustomer_emailstringobrigatóriocustomer_cpfstringcustomer_cnpj.customer_cnpjstringcustomer_phonestringcard_tokenstringtok_...), para credit_card.card_idstringcard_...). Use este ou card_token.installmentsintegerboleto_expiry_daysintegerdescriptionstringbilling_line_1stringbilling_citystringbilling_statestringbilling_zip_codestringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/pagarme/charges" \
-H "Content-Type: application/json" \
-d '{
"order_id": "3f73310d-bfdd-4713-a664-305c08eda58b",
"amount": 22500,
"payment_method": "boleto",
"customer_name": "Maria Souza",
"customer_email": "maria.souza@example.com",
"customer_cpf": "12345678909",
"boleto_expiry_days": 3,
"billing_line_1": "Avenida Paulista, 1000",
"billing_city": "São Paulo",
"billing_state": "SP",
"billing_zip_code": "01310-100"
}'Resposta
{
"id": "5e8d2f4a-1b3c-4d6e-8f9a-0b1c2d3e4f5a",
"order_id": "3f73310d-bfdd-4713-a664-305c08eda58b",
"pagarme_id": "ch_Kx9QzR2mVn3LdY7a",
"payment_method": "boleto",
"status": "pending",
"amount": 22500,
"boleto_pdf": "https://api.pagar.me/core/v5/transactions/tran_xxxx/pdf",
"boleto_barcode": "34191.79001 01043.510047 91020.150008 8 99990000022500",
"boleto_expiry": "2026-10-14T23:59:59Z",
"created_at": "2026-10-11T15:02:11Z",
"updated_at": "2026-10-11T15:02:11Z"
}Campos da resposta
iduuidorder_iduuidpagarme_idstringch_...).payment_methodstringstatusstringpendingpaidcanceledrefundedfailedchargebackamountintegerboleto_pdf, boleto_barcode, boleto_line, boleto_expirystringpix_qr_code, pix_qr_code_url, pix_expirystringcard_brand, card_last_digits, card_idstringpaid_at, created_at, updated_atstringpaid_at some enquanto não pago.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Falta um campo obrigatório. A mensagem diz qual. | {"error":"payment_method is required (boleto, pix, or credit_card)"} |
| 403 | O módulo pagarme está desligado nesta loja. | {"error":"module_disabled","module":"pagarme"} |
| 500 | Falha ao criar a cobrança. | {"error":"failed to create charge","detail":"..."} |
Tokenizar um cartão
Troca número, validade e CVV por um token de uso único (tok_...) que vale poucos minutos e é aceito como card_token na cobrança. É uma alternativa de servidor: em produção, tokenize no navegador com o Pagar.js, para que o número do cartão nunca passe pelo seu backend.
/api/v1/storefront/pagarme/tokenizePúblicaTroca os dados do cartão por um token de uso único
Corpo da requisição
card_numberstringobrigatórioholder_namestringobrigatórioexp_monthintegerobrigatórioexp_yearintegerobrigatóriocvvstringobrigatóriobilling_line_1stringbilling_line_2, billing_city, billing_state, billing_zip_code).order_iduuidamount_centsintegerorder_id: valor da tentativa, em centavos.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/pagarme/tokenize" \
-H "Content-Type: application/json" \
-d '{
"card_number": "4111111111111111",
"holder_name": "MARIA SOUZA",
"exp_month": 12,
"exp_year": 2030,
"cvv": "123"
}'Resposta
{
"token": "tok_Zq8LmN3vR5cT1yHd",
"card_brand": "visa",
"card_last_digits": "1111",
"expires_at": "2026-10-11T15:07:11Z"
}Campos da resposta
tokenstringtok_...). Uso único.card_brandstringvisa, mastercard, elo...).card_last_digitsstringexpires_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Falta card_number, holder_name ou cvv. | {"error":"card_number is required"} |
| 403 | O módulo pagarme está desligado nesta loja. | {"error":"module_disabled","module":"pagarme"} |
| 422 | O Pagar.me recusou os dados do cartão. | {"error":"failed to tokenize card","detail":"cartão recusado na validação: confira número, validade e código de segurança"} |
| 500 | Falha de comunicação com o Pagar.me. | {"error":"failed to tokenize card","detail":"..."} |