curl --request POST \
--url https://api.abacatepay.com/v2/payment-links/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"id": "prod-1234",
"quantity": 2
}
],
"methods": [
"PIX",
"CARD"
]
}
'import requests
url = "https://api.abacatepay.com/v2/payment-links/create"
payload = {
"items": [
{
"id": "prod-1234",
"quantity": 2
}
],
"methods": ["PIX", "CARD"]
}
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({items: [{id: 'prod-1234', quantity: 2}], methods: ['PIX', 'CARD']})
};
fetch('https://api.abacatepay.com/v2/payment-links/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/payment-links/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([
'items' => [
[
'id' => 'prod-1234',
'quantity' => 2
]
],
'methods' => [
'PIX',
'CARD'
]
]),
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/payment-links/create"
payload := strings.NewReader("{\n \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\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/payment-links/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.abacatepay.com/v2/payment-links/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 \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "bill_abc123xyz",
"externalId": "pedido-123",
"url": "https://app.abacatepay.com/pay/bill_abc123xyz",
"amount": 10000,
"paidAmount": null,
"items": [
{
"id": "prod_456",
"quantity": 2
}
],
"status": "PENDING",
"coupons": [],
"devMode": false,
"customerId": null,
"returnUrl": null,
"completionUrl": null,
"receiptUrl": null,
"upSellProductId": "prod_bump456xyz",
"installmentsCount": 3,
"dueDate": "2026-08-15",
"interest": {
"value": 100
},
"fine": {
"value": 200,
"type": "PERCENTAGE"
},
"metadata": {},
"createdAt": "2024-11-04T18:38:28.573Z",
"updatedAt": "2024-11-04T18:38:28.573Z"
},
"error": null,
"success": true
}{
"error": "Token de autenticação inválido ou ausente."
}Criar um link de pagamento
Cria um link de pagamento (checkout com frequency MULTIPLE_PAYMENTS). Vários clientes podem pagar o mesmo link; não suporta customerId.
curl --request POST \
--url https://api.abacatepay.com/v2/payment-links/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"id": "prod-1234",
"quantity": 2
}
],
"methods": [
"PIX",
"CARD"
]
}
'import requests
url = "https://api.abacatepay.com/v2/payment-links/create"
payload = {
"items": [
{
"id": "prod-1234",
"quantity": 2
}
],
"methods": ["PIX", "CARD"]
}
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({items: [{id: 'prod-1234', quantity: 2}], methods: ['PIX', 'CARD']})
};
fetch('https://api.abacatepay.com/v2/payment-links/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/payment-links/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([
'items' => [
[
'id' => 'prod-1234',
'quantity' => 2
]
],
'methods' => [
'PIX',
'CARD'
]
]),
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/payment-links/create"
payload := strings.NewReader("{\n \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\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/payment-links/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.abacatepay.com/v2/payment-links/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 \"items\": [\n {\n \"id\": \"prod-1234\",\n \"quantity\": 2\n }\n ],\n \"methods\": [\n \"PIX\",\n \"CARD\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "bill_abc123xyz",
"externalId": "pedido-123",
"url": "https://app.abacatepay.com/pay/bill_abc123xyz",
"amount": 10000,
"paidAmount": null,
"items": [
{
"id": "prod_456",
"quantity": 2
}
],
"status": "PENDING",
"coupons": [],
"devMode": false,
"customerId": null,
"returnUrl": null,
"completionUrl": null,
"receiptUrl": null,
"upSellProductId": "prod_bump456xyz",
"installmentsCount": 3,
"dueDate": "2026-08-15",
"interest": {
"value": 100
},
"fine": {
"value": 200,
"type": "PERCENTAGE"
},
"metadata": {},
"createdAt": "2024-11-04T18:38:28.573Z",
"updatedAt": "2024-11-04T18:38:28.573Z"
},
"error": null,
"success": true
}{
"error": "Token de autenticação inválido ou ausente."
}Obrigatório
"frequency": "MULTIPLE_PAYMENTS" junto com items. O restante dos parâmetros é idêntico ao Checkout.{
"frequency": "MULTIPLE_PAYMENTS",
"items": [
{ "id": "prod_abc123xyz", "quantity": 1 }
],
"externalId": "link-campanha-123",
"completionUrl": "https://seusite.com/obrigado",
"methods": ["PIX", "CARD"]
}
{
"frequency": "MULTIPLE_PAYMENTS",
"methods": ["BOLETO"],
"dueDate": "2026-08-15",
"items": [
{ "id": "prod_abc123xyz", "quantity": 1 }
],
"interest": { "value": 100 },
"fine": { "value": 200, "type": "PERCENTAGE" }
}
data.url — cada cliente que acessar o link pode pagar de forma independente.dueDate (YYYY-MM-DD) para definir a data de vencimento. Se omitido, o padrão é 3 dias úteis. Só se aplica a methods: ["BOLETO"] — veja a referência completa.interest e fine para configurar juros por atraso e multa caso o pagamento ocorra depois do vencimento. Os campos só se aplicam a methods: ["BOLETO"] e seguem o mesmo formato do checkout — veja a referência completa.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
Lista de itens incluídos na cobrança. Este é o único campo obrigatório — o valor total é calculado a partir destes itens.
1Show child attributes
Show child attributes
Métodos de pagamento disponíveis. Padrão ["PIX", "CARD"].
1PIX, CARD, BOLETO URL para onde o cliente será redirecionado ao clicar em "Voltar" no checkout.
URL para onde o cliente será redirecionado após o pagamento ser concluído.
ID de um cliente já cadastrado na sua loja. Se informado, o checkout será pré-preenchido com os dados deste cliente.
Exemplo: "cust_abcdefghij"
Lista de cupons que podem ser utilizados nesta cobrança.
Exemplo: ["ABKT10", "ABKT5", "PROMO10"]
50ID da cobrança no seu sistema, caso queira manter uma referência própria.
Exemplo: "seu_id_123"
ID de um produto avulso (sem cycle) a ser ofertado como upsell após a conclusão do pagamento.
O produto deve estar com status: ACTIVE e não pode ter cycle — apenas produtos de pagamento único são aceitos.
Exemplo: "prod_bump456xyz"
Data de vencimento do boleto no formato YYYY-MM-DD (ex: "2026-08-15"). Opcional. Só é válido quando methods inclui BOLETO; ignorado nos demais métodos.
Se omitido, o vencimento padrão é de 3 dias úteis. Não pode ser data no passado. Máximo de 365 dias no futuro.
"2026-08-15"
Juros por atraso, aplicados apenas quando methods inclui BOLETO. Ignorado para PIX/CARD.
Show child attributes
Show child attributes
Multa por atraso, aplicada apenas quando methods inclui BOLETO. Ignorado para PIX/CARD.
Show child attributes
Show child attributes
Metadados adicionais da cobrança. Campo livre para a sua aplicação.
Exemplo:
{
"source": "landing-page-black-friday",
"campaign": "BF-2025"
}
Configuração do pagamento por cartão. Só tem efeito quando methods inclui CARD.
Show child attributes
Show child attributes
Was this page helpful?