curl --request POST \
--url https://besimplo.com/api/v1/invoices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"invoice": {
"customer_id": "cus_01h455vb4pex5vsknk084sn02p",
"line_items": [
{
"price_id": "price_01h455vb4pex5vsknk084sn02q",
"quantity": 1
}
],
"discounts": [
{
"type": "percentage",
"percentage": 10,
"amount": 500,
"description": "Desconto de fidelidade"
}
],
"external_code": "PEDIDO-123"
}
}
'import requests
url = "https://besimplo.com/api/v1/invoices"
payload = { "invoice": {
"customer_id": "cus_01h455vb4pex5vsknk084sn02p",
"line_items": [
{
"price_id": "price_01h455vb4pex5vsknk084sn02q",
"quantity": 1
}
],
"discounts": [
{
"type": "percentage",
"percentage": 10,
"amount": 500,
"description": "Desconto de fidelidade"
}
],
"external_code": "PEDIDO-123"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invoice: {
customer_id: 'cus_01h455vb4pex5vsknk084sn02p',
line_items: [{price_id: 'price_01h455vb4pex5vsknk084sn02q', quantity: 1}],
discounts: [
{
type: 'percentage',
percentage: 10,
amount: 500,
description: 'Desconto de fidelidade'
}
],
external_code: 'PEDIDO-123'
}
})
};
fetch('https://besimplo.com/api/v1/invoices', 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://besimplo.com/api/v1/invoices",
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([
'invoice' => [
'customer_id' => 'cus_01h455vb4pex5vsknk084sn02p',
'line_items' => [
[
'price_id' => 'price_01h455vb4pex5vsknk084sn02q',
'quantity' => 1
]
],
'discounts' => [
[
'type' => 'percentage',
'percentage' => 10,
'amount' => 500,
'description' => 'Desconto de fidelidade'
]
],
'external_code' => 'PEDIDO-123'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://besimplo.com/api/v1/invoices"
payload := strings.NewReader("{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://besimplo.com/api/v1/invoices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://besimplo.com/api/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "in_01h455vb4pex5vsknk084sn02q",
"object": "invoice",
"amount_due": 14990,
"amount_paid": 0,
"amount_remaining": 14990,
"created": 1764040287,
"currency": "brl",
"customer": "cus_01h455vb4pex5vsknk084sn02p",
"customer_email": "joao.silva@exemplo.com",
"customer_name": "João Silva",
"external_code": "PEDIDO-123",
"live_mode": true,
"paid": false,
"payment_intent": null,
"status": "open",
"status_transitions": {
"paid_at": null
},
"subscription": null,
"total": 14990
}Criar fatura avulsa
Cria uma fatura avulsa (Order::Invoice) para um cliente existente e a
finaliza imediatamente (status open), disparando a notificação padrão
de fatura criada. Diferente de uma assinatura, uma fatura avulsa cobra
os itens uma única vez.
Fluxo canônico:
POST /api/v1/invoicescria a fatura avulsaPOST /api/v1/invoices/{invoice_id}/checkoutefetua a cobrança (PIX ou cartão de crédito)- Para PIX, a confirmação chega via webhook
invoice.paid; para cartão, a resposta do checkout já retorna a fatura paga
Todos os preços informados em line_items devem ser avulsos
(type: one_time). Preços recorrentes são rejeitados com o erro
PRICE_NOT_ONE_TIME; para cobrança recorrente, crie uma assinatura
(POST /api/v1/subscriptions).
Limite de taxa: 10 requisições por minuto por chave de API.
curl --request POST \
--url https://besimplo.com/api/v1/invoices \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"invoice": {
"customer_id": "cus_01h455vb4pex5vsknk084sn02p",
"line_items": [
{
"price_id": "price_01h455vb4pex5vsknk084sn02q",
"quantity": 1
}
],
"discounts": [
{
"type": "percentage",
"percentage": 10,
"amount": 500,
"description": "Desconto de fidelidade"
}
],
"external_code": "PEDIDO-123"
}
}
'import requests
url = "https://besimplo.com/api/v1/invoices"
payload = { "invoice": {
"customer_id": "cus_01h455vb4pex5vsknk084sn02p",
"line_items": [
{
"price_id": "price_01h455vb4pex5vsknk084sn02q",
"quantity": 1
}
],
"discounts": [
{
"type": "percentage",
"percentage": 10,
"amount": 500,
"description": "Desconto de fidelidade"
}
],
"external_code": "PEDIDO-123"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invoice: {
customer_id: 'cus_01h455vb4pex5vsknk084sn02p',
line_items: [{price_id: 'price_01h455vb4pex5vsknk084sn02q', quantity: 1}],
discounts: [
{
type: 'percentage',
percentage: 10,
amount: 500,
description: 'Desconto de fidelidade'
}
],
external_code: 'PEDIDO-123'
}
})
};
fetch('https://besimplo.com/api/v1/invoices', 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://besimplo.com/api/v1/invoices",
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([
'invoice' => [
'customer_id' => 'cus_01h455vb4pex5vsknk084sn02p',
'line_items' => [
[
'price_id' => 'price_01h455vb4pex5vsknk084sn02q',
'quantity' => 1
]
],
'discounts' => [
[
'type' => 'percentage',
'percentage' => 10,
'amount' => 500,
'description' => 'Desconto de fidelidade'
]
],
'external_code' => 'PEDIDO-123'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://besimplo.com/api/v1/invoices"
payload := strings.NewReader("{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://besimplo.com/api/v1/invoices")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://besimplo.com/api/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invoice\": {\n \"customer_id\": \"cus_01h455vb4pex5vsknk084sn02p\",\n \"line_items\": [\n {\n \"price_id\": \"price_01h455vb4pex5vsknk084sn02q\",\n \"quantity\": 1\n }\n ],\n \"discounts\": [\n {\n \"type\": \"percentage\",\n \"percentage\": 10,\n \"amount\": 500,\n \"description\": \"Desconto de fidelidade\"\n }\n ],\n \"external_code\": \"PEDIDO-123\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "in_01h455vb4pex5vsknk084sn02q",
"object": "invoice",
"amount_due": 14990,
"amount_paid": 0,
"amount_remaining": 14990,
"created": 1764040287,
"currency": "brl",
"customer": "cus_01h455vb4pex5vsknk084sn02p",
"customer_email": "joao.silva@exemplo.com",
"customer_name": "João Silva",
"external_code": "PEDIDO-123",
"live_mode": true,
"paid": false,
"payment_intent": null,
"status": "open",
"status_transitions": {
"paid_at": null
},
"subscription": null,
"total": 14990
}Authorizations
A chave de API usada para autenticar a requisição e identificar a sua conta.
Exemplo: Authorization: ApiKey my-secure-key
Body
Dados da fatura avulsa que será criada
Show child attributes
Show child attributes
Response
Operação realizada com sucesso
ID único da fatura, no formato TypeID com prefixo in_.
^in_[0-9a-z]{26}$"in_01h455vb4pex5vsknk084sn02q"
Tipo do objeto. Sempre 'invoice'.
invoice "invoice"
Valor a pagar em centavos. R$ 99,90 = 9990.
9990
Timestamp Unix da criação da fatura.
1704672000
Moeda do valor. Sempre 'brl' (Real brasileiro).
brl "brl"
ID do cliente associado à fatura, no formato TypeID com prefixo cus_.
^cus_[0-9a-z]{26}$"cus_01h455vb4pex5vsknk084sn02p"
Indica ambiente de produção (true) ou sandbox (false). Dados de sandbox são limpos periodicamente.
true
Status atual da fatura.
- draft: Rascunho, ainda não finalizada.
- open: Aberta, aguardando pagamento.
- paid: Paga.
- uncollectible: Marcada como incobrável.
- void: Cancelada.
draft, open, paid, uncollectible, void "open"
Valor total da fatura em centavos. R$ 99,90 = 9990.
9990
Valor já pago em centavos. R$ 99,90 = 9990.
0
Valor estornado em centavos. Permanece separado de status: uma fatura
paga continua com status: paid depois de um estorno total ou parcial.
0
Valor restante a pagar em centavos. R$ 99,90 = 9990.
9990
E-mail do cliente.
"joao.silva@exemplo.com"
Nome do cliente.
"João Silva"
Código externo para integração com outros sistemas. Único por conta.
"PEDIDO-123"
Indica se a fatura foi paga.
false
ID da cobrança associada à fatura, no formato TypeID com prefixo pi_.
null enquanto a fatura ainda não tem cobrança gerada.
"pi_01h455vb4pex5vsknk084sn02r"
Timestamps de quando a fatura mudou de status. Campos são null se a transição ainda não ocorreu.
Show child attributes
Show child attributes
ID da assinatura associada (se aplicável), no formato TypeID com prefixo sub_.
"sub_01h455vb4pex5vsknk084sn02s"

