curl --request PATCH \
--url https://api.sandbox.z2pay.com/v1/plans/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"metadata": {}
}
'const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', metadata: {}})
};
fetch('https://api.sandbox.z2pay.com/v1/plans/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/plans/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"metadata": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "plan_lhutpqeq2ml3stia4vn90xars",
"code": "pro-monthly",
"name": "Pro Plan (updated)",
"description": "Pro tier with all features and priority support",
"status": "active",
"recurrence": {
"interval": 1,
"unit": "month",
"anchor": "subscription_start",
"collectionTiming": "prepaid"
},
"trialSpec": null,
"metadata": {
"tier": "pro"
},
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T14:10: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": "Plan not found"
}
}{
"error": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}Atualizar plano
Altera nome, descrição e metadados do plano. O que se cobra não se muda por aqui.
curl --request PATCH \
--url https://api.sandbox.z2pay.com/v1/plans/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"description": "<string>",
"metadata": {}
}
'const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', description: '<string>', metadata: {}})
};
fetch('https://api.sandbox.z2pay.com/v1/plans/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sandbox.z2pay.com/v1/plans/{id}"
payload = {
"name": "<string>",
"description": "<string>",
"metadata": {}
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "plan_lhutpqeq2ml3stia4vn90xars",
"code": "pro-monthly",
"name": "Pro Plan (updated)",
"description": "Pro tier with all features and priority support",
"status": "active",
"recurrence": {
"interval": 1,
"unit": "month",
"anchor": "subscription_start",
"collectionTiming": "prepaid"
},
"trialSpec": null,
"metadata": {
"tier": "pro"
},
"createdAt": "2025-06-29T13:45:30.000Z",
"updatedAt": "2025-06-29T14:10: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": "Plan not found"
}
}{
"error": "A request with this idempotency key is already being processed"
}{
"error": "Idempotency key already used with a different request body"
}PATCH /plans/:id
Faz parte do recurso Planos e Preços — o conceito e os status estão
lá.
Atualização parcial: envie só os campos que quer alterar. A resposta é o plano atualizado, na mesma
forma de GET /plans/{id}.
code não passam por aqui:- valor — crie uma nova versão de preço. O preço é versionado justamente para que reajustar não mexa em quem já assinou;
- itens — adicione ou arquive um item;
- cadência, teste e
code— não são editáveis. Assinaturas em curso dependem deles, e mudá-los reescreveria contratos já fechados. Publique um plano novo.
409: arquivar é terminal, e o registro
passa a ser somente leitura.metadata substitui, não mescla. O objeto enviado passa a ser o metadata inteiro — enviar
{"plano":"pro"} num plano que tinha {"origem":"site"} apaga a chave anterior. Para acrescentar
uma chave, leia o objeto atual e envie-o completo com a nova.Exemplo
curl -X PATCH https://api.sandbox.z2pay.com/v1/plans/plan_lhutpqeq2ml3stia4vn90xars \
-H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
-H "Content-Type: application/json" \
-d '{
"name": "Plano Pro (2026)",
"description": null
}'
{
"id": "plan_lhutpqeq2ml3stia4vn90xars",
"code": "pro-monthly",
"name": "Plano Pro (2026)",
"description": null,
"status": "active",
"recurrence": {
"interval": 1,
"unit": "month",
"anchor": "subscription_start",
"collectionTiming": "prepaid"
},
"trialSpec": null,
"metadata": {},
"createdAt": "2026-08-10T13:45:30.000Z",
"updatedAt": "2026-08-10T14:02:11.000Z"
}
Authorizations
API Key da Credential (gerada no Backoffice)
Path Parameters
ID do plano
Body
Response
Plano atualizado
Identificador único do registro.
Código de identificação do recurso (ex.: código do plano ou do contrato).
Nome de exibição do plano ou do componente.
Descrição do item (item do plano ou linha da fatura).
Status atual do registro (assinatura, fatura, plano ou slip de pagamento).
Cadência da cobrança: a cada quantas unidades (interval), qual unidade (unit), a âncora do ciclo e se cobra no início ou no fim. Vale para todos os itens recorrentes.
Período de teste padrão da oferta. A assinatura pode sobrescrevê-lo.
Metadados livres (pares chave-valor) para uso do integrador; não afeta o processamento.
Data e hora de criação do registro (ISO 8601).
Data e hora da última atualização do registro (ISO 8601).