curl --request POST \
--url https://api.sandbox.z2pay.com/v1/pix-authorizations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"firstCharge": {
"amount": 2,
"description": "<string>",
"expirationDate": "2023-11-07T05:31:56Z"
},
"customerId": "<string>",
"endDate": "2023-11-07T05:31:56Z",
"additionalInfo": {}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstCharge: {amount: 2, description: '<string>', expirationDate: '2023-11-07T05:31:56Z'},
customerId: '<string>',
endDate: '2023-11-07T05:31:56Z',
additionalInfo: {}
})
};
fetch('https://api.sandbox.z2pay.com/v1/pix-authorizations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/pix-authorizations"
payload = {
"firstCharge": {
"amount": 2,
"description": "<string>",
"expirationDate": "2023-11-07T05:31:56Z"
},
"customerId": "<string>",
"endDate": "2023-11-07T05:31:56Z",
"additionalInfo": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "pxa_j43n74fbt2geb8c1y86ssf6iw",
"customerId": "cust_hqx4mkpi8dcxbrb2nzynxnjky",
"subscriptionId": null,
"status": "pending",
"frequency": "monthly",
"recurrenceBeginningDay": "2026-09-01",
"endDay": null,
"createdAt": "2026-08-31T14:22:05.000Z",
"updatedAt": "2026-08-31T14:22:05.000Z",
"charge": {
"transactionId": "txn_x8m2kq4rt6yhb9c3vzn5pfjw1",
"paymentId": "pay_q7w9e2r4t6y8u1i3o5p7a9s2d",
"amount": 19900,
"qrCode": "https://api.z2pay.com/qr/pxa_j43n74fbt2geb8c1y86ssf6iw.png",
"qrCodeText": "00020126580014br.gov.bcb.pix0136...",
"expiresAt": "2026-08-31T14:52:05.000Z"
}
}{
"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": "Resource not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}Abrir autorização de Pix Automático
Abre a autorização de Pix Automático e devolve o QR que cobra o primeiro pagamento e pede a autorização das faturas seguintes.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/pix-authorizations \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"firstCharge": {
"amount": 2,
"description": "<string>",
"expirationDate": "2023-11-07T05:31:56Z"
},
"customerId": "<string>",
"endDate": "2023-11-07T05:31:56Z",
"additionalInfo": {}
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstCharge: {amount: 2, description: '<string>', expirationDate: '2023-11-07T05:31:56Z'},
customerId: '<string>',
endDate: '2023-11-07T05:31:56Z',
additionalInfo: {}
})
};
fetch('https://api.sandbox.z2pay.com/v1/pix-authorizations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/pix-authorizations"
payload = {
"firstCharge": {
"amount": 2,
"description": "<string>",
"expirationDate": "2023-11-07T05:31:56Z"
},
"customerId": "<string>",
"endDate": "2023-11-07T05:31:56Z",
"additionalInfo": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "pxa_j43n74fbt2geb8c1y86ssf6iw",
"customerId": "cust_hqx4mkpi8dcxbrb2nzynxnjky",
"subscriptionId": null,
"status": "pending",
"frequency": "monthly",
"recurrenceBeginningDay": "2026-09-01",
"endDay": null,
"createdAt": "2026-08-31T14:22:05.000Z",
"updatedAt": "2026-08-31T14:22:05.000Z",
"charge": {
"transactionId": "txn_x8m2kq4rt6yhb9c3vzn5pfjw1",
"paymentId": "pay_q7w9e2r4t6y8u1i3o5p7a9s2d",
"amount": 19900,
"qrCode": "https://api.z2pay.com/qr/pxa_j43n74fbt2geb8c1y86ssf6iw.png",
"qrCodeText": "00020126580014br.gov.bcb.pix0136...",
"expiresAt": "2026-08-31T14:52:05.000Z"
}
}{
"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": "Resource not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}POST /pix-authorizations
Faz parte do recurso Pix Automático — o fluxo completo, os status e o
débito de cada ciclo estão lá.
Abre a autorização em pending e devolve, em charge, o QR do primeiro pagamento. O mesmo QR faz as
duas coisas: cobra firstCharge.amount agora e pede ao pagador a autorização das faturas seguintes,
na periodicidade de frequency. Exiba o QR na sua tela e espere o webhook
pix_authorization.activated para criar a assinatura.
customer ou customerId — um dos dois, nunca os dois. Os dois juntos, ou nenhum,
respondem 400. Um customerId que não é da sua conta responde 404.409, não uma cobrança Pix comum. Acontece quando o Pix
Automático não está habilitado na sua conta (fale com o suporte), quando falta nome ou documento no
cadastro do cliente informado em customerId, ou quando o QR não pôde ser gerado — nesse último
caso nada foi cobrado, e você pode tentar de novo.recurrenceBeginningDay sai como o dia seguinte à abertura
porque a autorização precisa começar no futuro. Isso não adia cobrança nenhuma: o primeiro
pagamento sai agora, pelo QR, e o dia de cada débito seguinte é o vencimento da fatura da
assinatura.customer no corpo, customerId vem nulo nesta resposta. O cliente é criado junto com o
primeiro pagamento e vinculado logo em seguida — o GET e os
webhooks já o trazem.additionalInfo acompanha o primeiro pagamento, não a autorização. Ele é gravado na transação
de charge.transactionId; a autorização não o devolve.Exemplo
curl -X POST https://api.sandbox.z2pay.com/v1/pix-authorizations \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{
"customerId": "cust_hqx4mkpi8dcxbrb2nzynxnjky",
"frequency": "monthly",
"firstCharge": { "amount": 19900, "description": "Plano Pro — mensalidade" }
}'
{
"id": "pxa_j43n74fbt2geb8c1y86ssf6iw",
"customerId": "cust_hqx4mkpi8dcxbrb2nzynxnjky",
"subscriptionId": null,
"status": "pending",
"frequency": "monthly",
"endDay": null,
"charge": {
"transactionId": "txn_x8m2kq4rt6yhb9c3vzn5pfjw1",
"paymentId": "pay_q7w9e2r4t6y8u1i3o5p7a9s2d",
"amount": 19900,
"qrCode": "https://api.z2pay.com/qr/pxa_j43n74fbt2geb8c1y86ssf6iw.png",
"qrCodeText": "00020126580014br.gov.bcb.pix0136...",
"expiresAt": "2026-08-31T14:52:05.000Z"
}
}
Authorizations
API Key da Credential (gerada no Backoffice)
Body
Com que frequência o pagador será debitado. weekly, monthly, quarterly, semiannual ou annual — outras cadências seguem em Pix comum, pago manualmente a cada ciclo.
weekly, monthly, quarterly, semiannual, annual A cobrança que o QR liquida agora — obrigatória nesta versão.
Show child attributes
Show child attributes
Cliente já cadastrado (cust_). Exclusivo com customer.
Dados do pagador. Nome e documento são exigidos pelo arranjo para registrar a autorização junto ao banco dele — sem eles não há autorização a propor.
Show child attributes
Show child attributes
Até quando a autorização vale (ISO 8601 com fuso). Omitida, ela vale até ser cancelada.
Dados seus, gravados na transação do primeiro pagamento.
Show child attributes
Show child attributes
Response
Autorização aberta, com o QR da primeira cobrança
ID da autorização (pxa_).
Cliente pagador (cust_). Na resposta da abertura vem nulo quando o pagador foi enviado em customer: o vínculo é preenchido logo depois, e o GET já o traz.
Assinatura que usa esta autorização como forma de pagamento. Nulo até a assinatura ser criada — e para sempre numa autorização que nunca virou assinatura.
Situação da autorização: pending, active, canceled ou expired. canceled e expired são finais.
pending, active, canceled, expired Periodicidade que o pagador autorizou: weekly, monthly, quarterly, semiannual ou annual. Precisa ser a mesma da assinatura.
weekly, monthly, quarterly, semiannual, annual Primeiro dia em que o débito pode acontecer (YYYY-MM-DD), no calendário da sua conta. Na abertura pela API é o dia seguinte — o primeiro pagamento sai na hora, pelo QR.
Último dia de validade (YYYY-MM-DD), resolvido a partir do endDate enviado. Nulo quando a autorização vale até ser encerrada.
Criação, ISO 8601.
Última alteração, ISO 8601.
O primeiro pagamento, que o QR cobra agora. Só vem na resposta da abertura.
Show child attributes
Show child attributes