curl --request POST \
--url https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file": "<string>",
"description": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file: '<string>', description: '<string>'})
};
fetch('https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents"
payload = {
"file": "<string>",
"description": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "cbkd_y4bf4q9kn7nfbksmvfjiwc5ba",
"chargebackId": "cbk_v5wylkgvv2rls5tihmuybrz9v",
"type": "delivery_proof",
"contentType": "application/pdf",
"size": 512340,
"description": "Comprovante de entrega assinado pelo cliente",
"createdAt": "2025-06-30T11:25:00.000Z",
"updatedAt": "2025-06-30T11:25:00.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": "Document not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}Enviar documento
Envia uma prova de contestação — nota fiscal, comprovante de entrega, contrato — enquanto a janela de defesa está aberta.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file": "<string>",
"description": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file: '<string>', description: '<string>'})
};
fetch('https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/chargebacks/{id}/documents"
payload = {
"file": "<string>",
"description": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "cbkd_y4bf4q9kn7nfbksmvfjiwc5ba",
"chargebackId": "cbk_v5wylkgvv2rls5tihmuybrz9v",
"type": "delivery_proof",
"contentType": "application/pdf",
"size": 512340,
"description": "Comprovante de entrega assinado pelo cliente",
"createdAt": "2025-06-30T11:25:00.000Z",
"updatedAt": "2025-06-30T11:25:00.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": "Document not found"
}
}{
"error": {
"code": "CONFLICT",
"message": "No refundable payment found"
}
}{
"error": "Idempotency key already used with a different request body"
}POST /chargebacks/:id/documents
Faz parte do recurso Chargebacks — as etapas do caso e a janela de defesa
estão lá.
Anexa uma prova ao caso. São obrigatórios o tipo e o arquivo; a descrição é opcional.
under_review e o deadlineAt não passou — fora disso a resposta é 409. Quem define esse
prazo é a adquirente, não você: confira o deadlineAt do caso antes de montar a defesa.multipart/form-data. O campo file aceita o
base64 puro ou com o prefixo data URI (data:application/pdf;base64,…) — os dois funcionam..pdf não o faz passar. São aceitos
PDF, JPEG, PNG e WebP, com até 10 MB já decodificados. Qualquer outra coisa responde 400.type classifica a prova, e ajuda quem for analisar o caso: invoice (nota fiscal),
delivery_proof (comprovante de entrega), signed_contract (contrato assinado), screenshot
(captura de tela) e other. Use description para o que o tipo não diz — o número da nota, a data
da conversa, o que for.Idempotency-Key para que um retry por timeout não anexe o
mesmo documento duas vezes. Veja Convenções.id, type,
contentType, size e as datas. Para baixar depois, use
GET /chargebacks/:id/documents/:documentId/download.Authorizations
API Key da Credential (gerada no Backoffice)
Headers
Chave única para garantir idempotência da requisição
Path Parameters
ID do chargeback
Body
Tipo do documento de contestação: invoice (nota/fatura), delivery_proof (comprovante de entrega), signed_contract (contrato assinado), screenshot (captura de tela) ou other (outro).
invoice, delivery_proof, signed_contract, screenshot, other Conteúdo do arquivo do documento (base64).
1Descrição ou observação sobre o documento.
500Response
Documento enviado
Identificador único do registro.
ID do chargeback ao qual o registro pertence.
Tipo do documento de contestação: invoice, delivery_proof, signed_contract, screenshot ou other.
Tipo MIME do arquivo enviado (ex.: application/pdf).
Tamanho do arquivo enviado, em bytes.
Descrição do registro.
Data e hora de criação do registro (ISO 8601).
Data e hora da última atualização do registro (ISO 8601).