v2.13.0 — Richer QR Code decode

POST /v1/accounts/{accountId}/pix/out/qr-code/decode now exposes all the data the partner already returns from the QR capture step — previously most of it lived only in internal logs. The change is fully backward compatible: every existing field is preserved and keeps its name and shape; new fields are additive.

New optional fields (populated when the partner returns them):

  • originalAmount — face value of the QR before discount/interest/ penalty (may differ from amount for dynamic-due-date).
  • qrCodeType (static | dynamic-immediate | dynamic-due-date) and qrCodeTypeId (numeric) — promoted to top level (they used to live inside Extra).
  • allowChange — now actually populated from the partner (AllowPayerChangeValue) on dynamic-immediate. Previously documented but never set.
  • payeeTradeName — fantasy / trade name of a legal entity (typical for dynamic-due-date invoices).
  • bankIspb / bankBranch / bankAccount / accountType — beneficiary bank account details. accountType is canonicalised to CHECKING | SAVINGS | PAYMENT | SALARY (upper snake-case for unknown variants).
  • discount, deduction, interest, penalty — charge components for dynamic-due-date. Relationship: amount = originalAmount - discount - deduction + interest + penalty. Previously only discount was documented (and was always 0).
  • dueDate and paymentDeadline — promoted to top level (they remain inside Extra for backward compatibility).

Compatibility: key, amount, payeeName, payeeDocument, identifier, decodeId, description keep their names and shapes. Existing integrations continue to work unchanged.