curl --request POST \
--url https://api.sandbox.z2pay.com/v1/customers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"email": "jsmith@example.com",
"document": "<string>",
"phone": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
email: 'jsmith@example.com',
document: '<string>',
phone: '<string>'
})
};
fetch('https://api.sandbox.z2pay.com/v1/customers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/customers"
payload = {
"name": "<string>",
"email": "jsmith@example.com",
"document": "<string>",
"phone": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "cust_kyz6cwnbm55aax1lhxewn01o4",
"name": "Maria Oliveira",
"email": "maria.oliveira@example.com",
"type": "individual",
"document": "12345678909",
"documentType": "cpf",
"phone": "+5511987654321",
"address": {
"street": "Av. Paulista",
"number": "1578",
"complement": "Apto 142",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postalCode": "01310-200",
"country": "BR"
},
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.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": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}Criar cliente
Cria um cliente reutilizável na sua conta, com documento e e-mail únicos.
curl --request POST \
--url https://api.sandbox.z2pay.com/v1/customers \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"email": "jsmith@example.com",
"document": "<string>",
"phone": "<string>"
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
email: 'jsmith@example.com',
document: '<string>',
phone: '<string>'
})
};
fetch('https://api.sandbox.z2pay.com/v1/customers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/customers"
payload = {
"name": "<string>",
"email": "jsmith@example.com",
"document": "<string>",
"phone": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "cust_kyz6cwnbm55aax1lhxewn01o4",
"name": "Maria Oliveira",
"email": "maria.oliveira@example.com",
"type": "individual",
"document": "12345678909",
"documentType": "cpf",
"phone": "+5511987654321",
"address": {
"street": "Av. Paulista",
"number": "1578",
"complement": "Apto 142",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postalCode": "01310-200",
"country": "BR"
},
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T13:45:30.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": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}POST /customers
Faz parte do recurso Clientes — o cadastro, o que o torna único e a diferença
para o comprador da transação estão lá.
São obrigatórios nome, e-mail, tipo, documento e telefone. O endereço é opcional
e pode ser completado depois.
documentType. Com type: "company", omitir o campo
responde 400 — a API não deduz o tipo pelo tamanho do documento. Enviar
documentType: "cpf" junto de type: "company" também é recusado, assim como cnpj com
individual: são combinações incoerentes.Em type: "individual", omitir assume cpf. Quem usa passaporte informa
documentType: "passport".409 com
error.code — não 400. É conflito com um cadastro existente, não campo malformado. Antes de
criar, procure por ?document= para reaproveitar quem já existe.O mesmo 409 também responde quando há uma requisição concorrente com a mesma
Idempotency-Key — nesse caso o corpo é { "error": "texto" }, sem code. Ramifique pelo
formato, não só pelo status.+5511987654321, com código do país. Na
listagem a busca por telefone ignora pontuação dos dois lados, então o
formato aqui não impede reencontrá-lo depois.Idempotency-Key para que um retry por timeout não crie o
mesmo cliente duas vezes. Veja Convenções.Authorizations
API Key da Credential (gerada no Backoffice)
Headers
Chave única para garantir idempotência da requisição
Body
Nome completo do cliente.
2E-mail do cliente.
Tipo de cliente: individual (pessoa física) ou company (pessoa jurídica).
individual, company Documento do cliente (CPF ou CNPJ, somente dígitos).
6Telefone do cliente (formato E.164, ex.: +5511987654321).
1Tipo do documento: cpf, cnpj ou passport. Obrigatório quando type é company; em individual, omitir assume cpf.
cpf, cnpj, passport Endereço do cliente.
Show child attributes
Show child attributes
Response
Cliente criado
Identificador único do registro.
Nome do registro.
E-mail de contato.
Tipo de lançamento (sale, refund, chargeback, withdrawal, fee, etc)
Documento (CPF ou CNPJ) do titular.
Tipo de documento: cpf ou cnpj.
Telefone de contato.
Endereço do cliente.
Show child attributes
Show child attributes
Data e hora de criação do registro (ISO 8601).
Data e hora da última atualização do registro (ISO 8601).