Errors

Formats

Validation errors in your body or query. The message always names the field:

{
  "type": "ValidationError",
  "message": "body.transaction_id is a required field"
}

Refusals from the Pix settlement system:

{
  "type": "ProviderError",
  "message": "A cobranca referenciada nao esta ativa",
  "provider_code": "cobranca_invalida",
  "violations": [
    { "property": "<field path>", "reason": "<reason for the refusal>" }
  ]
}

message is the reason for the refusal. provider_code and violations are optional. violations names the field the way the settlement system calls it, which does not always match the name in this API: use it for troubleshooting, never as a key for your logic. The HTTP code is the one the settlement system returned.

Resource not found:

{ "message": "Recurrence not found" }

Authentication errors, as in the rest of the API:

{ "code": 1, "message": "Api Key Invalid!" }

HTTP codes

CodeMeaningRetry?
200Success on reads and updates.—
201Resource created.—
400Invalid request: body failed validation, repeated identifier, or refusal from the settlement system.No, not without changing the request.
401Invalid API key (Api Key Invalid!).No. Check the key and the environment.
404Resource not found or from another account (Recurrence not found, Charge not found, Solicitation not found).No. Check the identifier.
other 4xxRefusal from the settlement system, with the original code and the reason in message.No, not without fixing what the reason points to.
5xxInternal or settlement system failure.Yes, carefully. See below.

Messages by endpoint

Create recurrence

HTTPmessageCause
400body.transaction_id already existsYou already have a recurrence with that transaction_id.
400body.transaction_id is a required fieldThe field is missing.
400transaction_id must be at most 35 charactersValue over the limit. The API refuses, it does not truncate.
400body.schedule.start_date must be after today (Brasília time)start_date is today or in the past. It must be after today, in Brasília time.
400body.schedule.end_date must be after schedule.start_dateend_date equal to or before start_date.
400body.schedule.start_date is not a valid dateA day that does not exist (e.g. 2027-02-30). Also applies to end_date.
400body.schedule.start_date must be YYYY-MM-DDDate out of format. Also applies to end_date.
400body.business_day_adjust must be true or falseA value that is not a boolean (including the string "true").
400body.charge_lead_days must be an integer between 3 and 10Lead time outside 3 to 10, or not an integer.
400amount is required: variable-amount mandates are not supportedamount is missing.
400`contract` is not a field of this endpoint anymore -- use `transaction_id`Field from an earlier contract. Use transaction_id.
400`plano`, `valor` is not a field of this endpointUnrecognized fields, named in the message.
400body.debtor.document_number is invalidCPF/CNPJ with an invalid check digit, or with punctuation.
400body.debtor.name must be at most 100 charactersName too long.
400zip_code must be 8 digitsCEP in the wrong format.
400body.schedule.periodicity must be one of the following values: WEEKLY, MONTHLY, QUARTERLY, SEMIANNUAL, ANNUALPeriodicity not on the list.
400client has no wallet configuredThe account has no wallet configured. Contact your account manager.

When there is more than one field problem, they come together in a single message, separated by a period.

Get recurrence

HTTPmessageCause
404Recurrence not foundIdentifier does not exist or is from another account.

Update or cancel recurrence

HTTPmessageCause
404Recurrence not foundIdentifier does not exist or is from another account.
400body must set at least one changeable field: `debtor_name`, `start_date`, `status`, `webhook`, `business_day_adjust`, `charge_lead_days` Empty body.
400`amount`, `periodicity` cannot be changed after a recurrence is created. ...Field that cannot be changed.
400`plano` is not a field of this endpoint. Changeable: `debtor_name`, `start_date`, `status`, `webhook`, `business_day_adjust`, `charge_lead_days`Unknown field.
400body.status must be one of the following values: CANCELLEDStatus other than CANCELLED.
400body.start_date must be after today (Brasília time)start_date is today or in the past.

Listings

HTTPmessageCause
400start and end are requiredstart or end is missing.

Solicitations

HTTPmessageCause
404Recurrence not foundrecurrence_id does not exist or is from another account.
404Solicitation not foundIdentifier does not exist or is from another account.
400body.destination.ispb must be exactly 8 charactersISPB in the wrong format.
400body.destination.document_number is invalidInvalid CPF/CNPJ.
400body.status is a required fieldBody without status.
400body.status must be one of the following values: CANCELLEDStatus other than CANCELLED.

Charges

HTTPmessageCause
404Charge not foundIdentifier does not exist or is from another account.
400body.status must be one of the following values: CANCELLEDStatus other than CANCELLED.
400date is requiredDate missing from the reschedule route.
400an activation charge cannot be cancelled: it is an immediate Pix payment, not a scheduled debitPATCH on an activation charge.
400an activation charge cannot be retried: it is an immediate Pix payment, not a scheduled debitRetry on an activation charge.
4xxreason from the settlement system (ProviderError)Retry outside the 7-day window, on the due date itself, beyond 3, or on a NOT_ALLOWED recurrence.

Troubleshooting

SymptomLikely cause
The recurrence never leaves CREATEDThe payer did not authorize. On the QR route, check they got the right code (the recurrence's qrcode / pix_copy_paste); on the notification route, check branch, account and ISPB.
No charge is ever createdThe recurrence is not APPROVED. PixToPay only creates charges under APPROVED recurrences.
The charge fell due on a different date than expectedThe recurrence was created with business_day_adjust: true and the due date fell on a weekend or holiday: it moved to the next business day. Read the charge's due_date.
No notification arrivesThe recurrence has no webhook. Set it with PATCH /recurrences/:recurrence_id.
A field you sent seems to have been ignoredIt was not: the API refuses unknown fields with 400, naming them. Read the message again.