Criar Checkout Transparente
curl --request POST \
--url https://api.abacatepay.com/v2/transparents/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"method": "PIX",
"data": {
"amount": 123,
"expiresIn": 123,
"dueDate": "2026-08-15",
"description": "<string>",
"ensureSameTaxId": false,
"externalId": "<string>",
"metadata": {},
"utm": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"term": "<string>",
"content": "<string>"
}
}
}
'import requests
url = "https://api.abacatepay.com/v2/transparents/create"
payload = {
"method": "PIX",
"data": {
"amount": 123,
"expiresIn": 123,
"dueDate": "2026-08-15",
"description": "<string>",
"ensureSameTaxId": False,
"externalId": "<string>",
"metadata": {},
"utm": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"term": "<string>",
"content": "<string>"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'PIX',
data: {
amount: 123,
expiresIn: 123,
dueDate: '2026-08-15',
description: '<string>',
ensureSameTaxId: false,
externalId: '<string>',
metadata: {},
utm: {
source: '<string>',
medium: '<string>',
campaign: '<string>',
term: '<string>',
content: '<string>'
}
}
})
};
fetch('https://api.abacatepay.com/v2/transparents/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.abacatepay.com/v2/transparents/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'method' => 'PIX',
'data' => [
'amount' => 123,
'expiresIn' => 123,
'dueDate' => '2026-08-15',
'description' => '<string>',
'ensureSameTaxId' => false,
'externalId' => '<string>',
'metadata' => [
],
'utm' => [
'source' => '<string>',
'medium' => '<string>',
'campaign' => '<string>',
'term' => '<string>',
'content' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.abacatepay.com/v2/transparents/create"
payload := strings.NewReader("{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.abacatepay.com/v2/transparents/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.abacatepay.com/v2/transparents/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "bole_k8pqr2mnvx",
"amount": 5000,
"status": "PENDING",
"devMode": false,
"barCode": "23793.38128 60007.827263 37000.963779 4 10010000005000",
"url": "https://app.abacatepay.com/pay/bole_k8pqr2mnvx/boleto",
"brCode": "00020126580014BR.GOV.BCB.PIX0136d2b4e5f6-7890-abcd-ef12-34567890abcd5204000053039865802BR5914Mariana Costa6009SAO PAULO62070503***6304F1C2",
"brCodeBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"platformFee": 250,
"receiptUrl": null,
"expiresAt": "2026-08-16T02:59:59.999Z",
"createdAt": "2026-07-27T14:22:10.381Z",
"updatedAt": "2026-07-27T14:22:10.381Z",
"metadata": {
"faturaId": "fatura-456",
"plano": "pro"
}
},
"error": null,
"success": {
"message": "Checkout transparente criado com sucesso"
}
}{
"error": "Token de autenticação inválido ou ausente."
}Checkout Transparente
Criar cobrança Boleto
Cria um checkout transparente. Use "method": "PIX" para gerar um QR Code ou "method": "BOLETO" para emitir um boleto com PIX alternativo incluído.
POST
/
transparents
/
create
Criar Checkout Transparente
curl --request POST \
--url https://api.abacatepay.com/v2/transparents/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"method": "PIX",
"data": {
"amount": 123,
"expiresIn": 123,
"dueDate": "2026-08-15",
"description": "<string>",
"ensureSameTaxId": false,
"externalId": "<string>",
"metadata": {},
"utm": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"term": "<string>",
"content": "<string>"
}
}
}
'import requests
url = "https://api.abacatepay.com/v2/transparents/create"
payload = {
"method": "PIX",
"data": {
"amount": 123,
"expiresIn": 123,
"dueDate": "2026-08-15",
"description": "<string>",
"ensureSameTaxId": False,
"externalId": "<string>",
"metadata": {},
"utm": {
"source": "<string>",
"medium": "<string>",
"campaign": "<string>",
"term": "<string>",
"content": "<string>"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'PIX',
data: {
amount: 123,
expiresIn: 123,
dueDate: '2026-08-15',
description: '<string>',
ensureSameTaxId: false,
externalId: '<string>',
metadata: {},
utm: {
source: '<string>',
medium: '<string>',
campaign: '<string>',
term: '<string>',
content: '<string>'
}
}
})
};
fetch('https://api.abacatepay.com/v2/transparents/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.abacatepay.com/v2/transparents/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'method' => 'PIX',
'data' => [
'amount' => 123,
'expiresIn' => 123,
'dueDate' => '2026-08-15',
'description' => '<string>',
'ensureSameTaxId' => false,
'externalId' => '<string>',
'metadata' => [
],
'utm' => [
'source' => '<string>',
'medium' => '<string>',
'campaign' => '<string>',
'term' => '<string>',
'content' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.abacatepay.com/v2/transparents/create"
payload := strings.NewReader("{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.abacatepay.com/v2/transparents/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.abacatepay.com/v2/transparents/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"PIX\",\n \"data\": {\n \"amount\": 123,\n \"expiresIn\": 123,\n \"dueDate\": \"2026-08-15\",\n \"description\": \"<string>\",\n \"ensureSameTaxId\": false,\n \"externalId\": \"<string>\",\n \"metadata\": {},\n \"utm\": {\n \"source\": \"<string>\",\n \"medium\": \"<string>\",\n \"campaign\": \"<string>\",\n \"term\": \"<string>\",\n \"content\": \"<string>\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "bole_k8pqr2mnvx",
"amount": 5000,
"status": "PENDING",
"devMode": false,
"barCode": "23793.38128 60007.827263 37000.963779 4 10010000005000",
"url": "https://app.abacatepay.com/pay/bole_k8pqr2mnvx/boleto",
"brCode": "00020126580014BR.GOV.BCB.PIX0136d2b4e5f6-7890-abcd-ef12-34567890abcd5204000053039865802BR5914Mariana Costa6009SAO PAULO62070503***6304F1C2",
"brCodeBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"platformFee": 250,
"receiptUrl": null,
"expiresAt": "2026-08-16T02:59:59.999Z",
"createdAt": "2026-07-27T14:22:10.381Z",
"updatedAt": "2026-07-27T14:22:10.381Z",
"metadata": {
"faturaId": "fatura-456",
"plano": "pro"
}
},
"error": null,
"success": {
"message": "Checkout transparente criado com sucesso"
}
}{
"error": "Token de autenticação inválido ou ausente."
}Requer a permissão
CHECKOUT:READ.barCode), uma URL para visualização e impressão do boleto (url), e o PIX alternativo (brCode/brCodeBase64) para a mesma cobrança — tudo em uma única chamada.
Para cobrar via PIX, veja Criar cobrança PIX.
Campos obrigatórios
| Campo | Tipo | Descrição |
|---|---|---|
method | string | Deve ser "BOLETO" |
data.amount | number | Valor em centavos (ex: 25000 = R$ 250,00) |
data.customer.name | string | Nome completo do pagador |
data.customer.taxId | string | CPF ou CNPJ do pagador |
data.dueDate — vencimento (opcional)
Data de vencimento do boleto no formato YYYY-MM-DD (ex: "2026-08-15"). Se omitido, o vencimento padrão é de 3 dias úteis.
| Campo | Tipo | Descrição |
|---|---|---|
dueDate | string | Data de vencimento (YYYY-MM-DD). Opcional. |
- Não pode ser data no passado
- Máximo de 365 dias no futuro
dueDate é a data enviada ao provedor. A resposta continua expondo expiresAt (ISO datetime no fim do dia do dueDate). Sem juros/multa, após o vencimento o boleto expira (EXPIRED) via webhook PAYMENT_OVERDUE. Com juros/multa, pode permanecer aberto para pagamento em atraso.
data.utm — campanha / UTM (opcional)
No BoletoTransparentData (corpo data com method: "BOLETO"), você pode incluir o mesmo bloco opcional utm: objeto opcional com campos opcionais source, medium, campaign, term e content (string). Valores enviados podem ser vistos no dashboard e não mudam o fluxo da cobrança.
Exemplos mínimos (BOLETO)
SemdueDate (vencimento padrão de 3 dias úteis):
{
"method": "BOLETO",
"data": {
"amount": 25000,
"customer": {
"name": "Mariana Costa",
"taxId": "987.654.321-00"
}
}
}
dueDate:
{
"method": "BOLETO",
"data": {
"amount": 5000,
"dueDate": "2026-08-15",
"customer": {
"name": "Cliente",
"taxId": "11144477735",
"email": "cliente@email.com"
}
}
}
utm:
{
"method": "BOLETO",
"data": {
"amount": 25000,
"customer": {
"name": "Mariana Costa",
"taxId": "987.654.321-00"
},
"utm": {
"source": "google",
"medium": "cpc",
"campaign": "boleto_teste"
}
}
}
Requisição
{
"method": "BOLETO",
"data": {
"amount": 25000,
"dueDate": "2026-08-15",
"description": "Fatura de serviço mensal",
"customer": {
"name": "Mariana Costa",
"taxId": "987.654.321-00",
"email": "mariana.costa@empresa.com.br",
"cellphone": "(21) 99876-5432"
},
"metadata": {
"faturaId": "fatura-456",
"plano": "pro"
}
}
}
Multa e juros por atraso
Você pode configurar juros (data.interest) e multa (data.fine) que serão aplicados se o cliente pagar após a data de vencimento. Ambos os campos são opcionais e independentes — pode-se enviar só interest, só fine, ambos ou nenhum. Eles só têm efeito quando method: "BOLETO" e são ignorados nos demais métodos.
data.interest — juros por atraso / late interest
| Campo | Tipo | Descrição |
|---|---|---|
value | integer ≥ 0 | Percentual de juros ao mês, em centésimos de percentual. 100 = 1% ao mês, 250 = 2,5% ao mês. Quando 0 ou omitido, não há juros. |
EN:data.interest.valueis an integer in hundredths of a percent representing the monthly late interest rate (100= 1%/month). It accrues pro rata die after the due date. Omit or use0to disable.
data.fine — multa por atraso / late fine
| Campo | Tipo | Descrição |
|---|---|---|
value | integer ≥ 0 | Quando type = "PERCENTAGE": centésimos de percentual (200 = 2%). Quando type = "FIXED": valor em centavos (1000 = R$ 10,00). Quando 0 ou omitido, sem multa. |
type | "PERCENTAGE" | "FIXED" | PERCENTAGE aplica percentual sobre o valor do boleto. FIXED aplica um valor fixo em centavos. |
EN:Exemplo — juros de 1% ao mês + multa fixa de R$ 10,00:data.fineis a one-time charge added after the due date. Withtype: "PERCENTAGE",valueis in hundredths of a percent. Withtype: "FIXED",valueis in cents.
{
"method": "BOLETO",
"data": {
"amount": 5000,
"dueDate": "2026-08-15",
"customer": {
"name": "João Silva",
"taxId": "123.456.789-00"
},
"interest": { "value": 100 },
"fine": { "value": 1000, "type": "FIXED" }
}
}
{
"method": "BOLETO",
"data": {
"amount": 25000,
"customer": {
"name": "Mariana Costa",
"taxId": "987.654.321-00"
},
"fine": { "value": 200, "type": "PERCENTAGE" }
}
}
Unidades / units:
interest.value e fine.value (com type = "PERCENTAGE") estão em centésimos de percentual — 100 = 1%. fine.value (com type = "FIXED") e amount estão em centavos — 1000 = R$ 10,00.Resposta
Os mesmos objetosinterest e fine constam na resposta de POST /transparents/create, GET /transparents/get e GET /transparents/list (dentro do payload do boleto), ou ficam null quando nenhum dos campos foi configurado. O campo expiresAt é o datetime ISO no fim do dia do dueDate (ou do vencimento padrão de 3 dias úteis).
{
"data": {
"id": "bole_k8pqr2mnvx",
"amount": 25000,
"status": "PENDING",
"devMode": false,
"barCode": "23793.38128 60007.827263 37000.963779 4 10010000025000",
"url": "https://app.abacatepay.com/pay/bole_k8pqr2mnvx/boleto",
"brCode": "00020126580014BR.GOV.BCB.PIX0136d2b4e5f6-7890-abcd-ef12-34567890abcd5204000053039865802BR5913Mariana Costa6009SAO PAULO62070503***6304F1C2",
"brCodeBase64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"platformFee": 250,
"interest": { "value": 100 },
"fine": { "value": 1000, "type": "FIXED" },
"receiptUrl": null,
"expiresAt": "2026-08-16T02:59:59.999Z",
"createdAt": "2026-07-27T14:22:10.381Z",
"updatedAt": "2026-07-27T14:22:10.381Z",
"metadata": {
"faturaId": "fatura-456",
"plano": "pro"
}
},
"success": true,
"error": null
}
Abra
url para exibir o boleto para impressão. Use barCode para o cliente digitar a linha digitável no app do banco. Use brCode/brCodeBase64 para oferecer PIX como alternativa sem nenhum esforço adicional.Authorizations
Todas as requisições devem incluir sua chave de API no header Authorization usando o formato Bearer <abacatepay-api-key>. Sem esse header a requisição será rejeitada.
Saiba mais sobre como criar e usar chaves de API na documentação de autenticação.
Body
application/json
Response
Checkout transparente criado com sucesso
Dados da cobrança retornados pelo checkout transparente. Os campos brCode e brCodeBase64 são sempre retornados (PIX direto ou PIX alternativo do boleto). Para boleto também retornam barCode e url.
Show child attributes
Show child attributes
Example:
null
Se a requisição obteve sucesso ou não.
Example:
true
Was this page helpful?