curl --request POST \
--url https://api.sandbox.z2pay.com/v1/invoices \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"subscriptionId": "<string>",
"description": "<string>",
"amount": 1,
"dueAt": "2023-11-07T05:31:56Z",
"reasonDetails": "<string>",
"quantity": 1,
"allowedPaymentMethods": [],
"installmentsConfig": {
"maxInstallments": 6,
"freeInstallments": 6,
"interestRate": 50
}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subscriptionId: '<string>',
description: '<string>',
amount: 1,
dueAt: '2023-11-07T05:31:56Z',
reasonDetails: '<string>',
quantity: 1,
allowedPaymentMethods: [],
installmentsConfig: {maxInstallments: 6, freeInstallments: 6, interestRate: 50}
})
};
fetch('https://api.sandbox.z2pay.com/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/invoices"
payload = {
"subscriptionId": "<string>",
"description": "<string>",
"amount": 1,
"dueAt": "2023-11-07T05:31:56Z",
"reasonDetails": "<string>",
"quantity": 1,
"allowedPaymentMethods": [],
"installmentsConfig": {
"maxInstallments": 6,
"freeInstallments": 6,
"interestRate": 50
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Invoice not found"
}
}{
"error": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}Criar fatura avulsa
Cria uma fatura separada do ciclo, com vencimento e formas de pagamento próprios.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/invoices \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"subscriptionId": "<string>",
"description": "<string>",
"amount": 1,
"dueAt": "2023-11-07T05:31:56Z",
"reasonDetails": "<string>",
"quantity": 1,
"allowedPaymentMethods": [],
"installmentsConfig": {
"maxInstallments": 6,
"freeInstallments": 6,
"interestRate": 50
}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
subscriptionId: '<string>',
description: '<string>',
amount: 1,
dueAt: '2023-11-07T05:31:56Z',
reasonDetails: '<string>',
quantity: 1,
allowedPaymentMethods: [],
installmentsConfig: {maxInstallments: 6, freeInstallments: 6, interestRate: 50}
})
};
fetch('https://api.sandbox.z2pay.com/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/invoices"
payload = {
"subscriptionId": "<string>",
"description": "<string>",
"amount": 1,
"dueAt": "2023-11-07T05:31:56Z",
"reasonDetails": "<string>",
"quantity": 1,
"allowedPaymentMethods": [],
"installmentsConfig": {
"maxInstallments": 6,
"freeInstallments": 6,
"interestRate": 50
}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"issues": [
{
"path": "status",
"message": "Status inválido. Valores aceitos: pending, waiting_payment, paid, refused, canceled, refunded"
},
{
"path": "startDate",
"message": "Data deve ser ISO 8601 com timezone (ex.: 2026-06-24T00:00:00Z)"
}
]
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Invoice not found"
}
}{
"error": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}POST /invoices
Faz parte do recurso Faturas — o conceito, os oito estados e os
links hospedados estão lá.
Cria uma cobrança fora do ciclo, atrelada a uma assinatura: uma taxa de implantação, um acordo de
dívida, um serviço pontual. O cliente recebe uma cobrança própria, com vencimento e formas de
pagamento independentes da mensalidade. Para valores pequenos que podem esperar a virada do ciclo,
prefira lançar uma cobrança extra — ela entra na fatura da
mensalidade, sem gerar uma segunda cobrança.
dueAt precisa ser futuro; a cobrança é
disparada em dueAt - chargeLeadTimeDays da assinatura. Com folga, a fatura nasce scheduled
e vira open na hora certa; vencimento próximo nasce open e cobra já. Se a data cair em fim
de semana ou feriado e a conta só cobra em dia útil, o vencimento desliza para o próximo dia útil.Authorizations
API Key da Credential (gerada no Backoffice)
Headers
Chave única para garantir idempotência da requisição
Body
Assinatura dona da fatura. Aceita contratos encerrados — é o caminho para cobrar um valor renegociado ou dívida remanescente.
1O que está sendo cobrado (aparece na linha da fatura e na página de pagamento).
1 - 200Valor unitário, em centavos (menor unidade da moeda). A moeda é a da assinatura.
x > 0Vencimento (ISO 8601 com timezone), estritamente no futuro. A cobrança dispara em dueAt - chargeLeadTimeDays da assinatura; se a data cair em fim de semana ou feriado e a política da conta só cobrar em dia útil, o vencimento desliza para o próximo dia útil.
Classificação da cobrança, para auditoria e relatório.
extra_service, adjustment, penalty, ad_hoc, other Justificativa em texto livre (1 a 500 caracteres). Fica na trilha de auditoria — o pagador não vê; o que ele vê é description.
1 - 500Quantidade. Default 1 — o total da fatura é amount * quantity.
x > 0Formas de pagamento oferecidas na página de pagamento desta fatura. Ausente = o método padrão da assinatura.
1 - 3 elementscard, pix, boleto Como esta cobrança sai. charge_automatically passa sozinha o cartão salvo na assinatura, sem ação do pagador — exige card em allowedPaymentMethods. send_invoice envia o link e deixa o pagador escolher, inclusive um cartão diferente do da assinatura. Ausente = o método de cobrança da assinatura.
charge_automatically, send_invoice Parcelamento oferecido ao pagador no cartão — só faz sentido com card em allowedPaymentMethods. Ausente/null = à vista.
Show child attributes
Show child attributes
Response
Fatura criada