Fincore · Updates
Changelog
Notable changes to the Fincore API and its documentation, newest first.
This page tracks notable changes to the Fincore API and its documentation: contract updates, behavior changes, new features, deprecations, and operational policies (e.g., webhook delivery/retry rules).
Rule of thumb: if an integrator might need to adjust code, business logic, monitoring, or expectations, it belongs here.
How to read this changelog
Each release may include:
- Type: Added / Changed / Removed / Fixed / Security
- Tags (impact):
- [Breaking]: requires changes to avoid failures.
- [Behavior]: not necessarily breaking, but outcomes or rules changed.
- [Operational]: affects retries, delivery, latency, or runtime expectations.
- [Docs]: documentation-only changes (no functional change).
- [Security]: security-related change.
For every entry we aim to include:
- Impact: what changes for you
- Action required: what you should do (if anything)
- References: links to the relevant guide/endpoint
Latest releases
- 2026-05-07: Money Out unified routing:
POST /v1/transactions/money_outnow automatically detects when the destination instrument belongs to a Finco Pay account and routes the transaction as an internal (book-to-book) transfer. No SPEI is used; settlement is near-real-time. No changes to the request body are required. See Send money to a CLABE and Quickstart. - 2026-03-13: Private Account Lifecycle: added a new public guide and documented customer-facing lifecycle actions for private accounts, including cancel, block, and activate.
- 2026-03-11: Idempotency: clarified canonical JSON hashing rules and updated deterministic
Idempotency-Keygeneration samples for Python and Node.js. - 2026-01-28: Internal transactions: clarified MONEY_IN webhook behavior (emitted only when destination belongs to a different
owner_id; no webhook for same-owner transfers). - 2026-01-07: Penny Validation: optional
descriptionandexternal_reference, backend defaults, and webhook propagation. - 2026-01-05: Auth simplification (JWT primary), client-scoped webhook management, CEP webhook clarifications, changelog launch.
Scope
This changelog may include updates to:
- Guides (Quickstart, Idempotency, Money In, Money Out, Penny Validation, Business Units)
- Webhooks (MONEY_IN, STATUS_UPDATE, CEP)
- OpenAPI specification (fields, schemas, request/response contracts, error models)
If you have questions about a release or need migration help, contact Monato Support: support@monato.com
2026-05-07
Money Out unified routing: automatic internal transfer detection for Finco Pay destination instruments.
This release extends POST /v1/transactions/money_out to automatically detect when the destination instrument belongs to a Finco Pay (Monato) account and route the transaction as an internal book-to-book transfer. No SPEI is used and no changes to the request body are required.
Changed
Money Out unified routing: Changed [Behavior]
Impact: POST /v1/transactions/money_out now handles both external and internal transfers. When the destination instrument belongs to a Finco Pay account, the system routes the transaction as a book-to-book transfer automatically. The subCategory field in the response reflects the routing: SPEI_DEBIT for external, INT_DEBIT for internal.
Action required: None for existing integrations. For new integrations, use POST /v1/transactions/money_out exclusively for all outbound transfers.
References: POST /v1/transactions/money_out, Send money to a CLABE, Internal transfers
Money In webhook, sub_category updated: Changed [Docs]
Impact: INT_CREDIT can originate from POST /v1/transactions/money_out when the destination instrument belongs to a Finco Pay account.
Action required: If your webhook consumer filters on sub_category: INT_CREDIT, no changes are needed. Behavior is the same regardless of the originating endpoint.
References: Webhook MONEY_IN, body.sub_category, Webhook events
Migration notes
- New integrations
- Use
POST /v1/transactions/money_outfor all outbound transfers, both external (SPEI) and internal (Finco Pay). - No flags or extra fields needed; routing is automatic based on the destination instrument.
- Use
2026-03-13
This release adds a new public Private Account Lifecycle guide and documents the customer-facing lifecycle actions available for private accounts: cancel, block, and activate.
Added
Private Account Lifecycle guide: Added [Docs]
Impact: You now have a dedicated guide that explains the public lifecycle actions supported for private accounts, including their intended usage, supported state transitions, and example requests.
Action required: Review the new guide if your integration needs to temporarily block, reactivate, or permanently cancel private accounts.
References: Private accounts
Cancel a private account endpoint: Added [Behavior] [Docs]
Impact: The public API documentation now includes the endpoint to permanently cancel a private account.
Action required: If you need to permanently disable a private account, use PUT /v1/clients/{clientId}/accounts/{accountId}/cancel.
References: Private accounts, PUT /v1/clients/{clientId}/accounts/{accountId}/cancel
Block a private account endpoint: Added [Behavior] [Docs]
Impact: The public API documentation now includes the endpoint to temporarily block a private account.
Action required: If you need to temporarily disable a private account, use PUT /v1/clients/{clientId}/accounts/{accountId}/block.
References: Private accounts, PUT /v1/clients/{clientId}/accounts/{accountId}/block
Activate a private account endpoint: Added [Behavior] [Docs]
Impact: The public API documentation now includes the endpoint to restore a previously blocked private account to ACTIVE.
Action required: If you need to reactivate a previously blocked private account, use PATCH /v1/clients/{clientId}/accounts/{accountId}/activate.
References: Private accounts, PATCH /v1/clients/{clientId}/accounts/{accountId}/activate
Changed
Quickstart navigation to lifecycle management: Changed [Docs]
Impact: The Quickstart can now direct integrators to the lifecycle management guide after private account creation, making the next operational steps easier to discover.
Action required: None.
References: Quickstart, Private accounts
2026-03-11
Idempotency documentation update: canonical JSON hashing clarification and improved deterministic key generation samples.
This release updates the public Idempotency guide to better explain deterministic Idempotency-Key generation. The guide now clarifies that the request body must be canonicalized before hashing, and it includes clearer reference samples for Python and Node.js.
Fixed
Idempotency canonical JSON hashing clarification: Fixed [Docs]
Impact: The Idempotency guide now explains more precisely how to compute body_hash: the request body must be canonicalized before hashing, with object keys sorted alphabetically at every level and serialized consistently.
Action required: Review your implementation if you generate deterministic Idempotency-Key values client-side, especially in non-Python implementations.
References: Idempotency
Python deterministic key generation sample: Fixed [Docs]
Impact: The Python sample now includes clearer inline comments and step-by-step guidance for generating a deterministic Idempotency-Key. No backend behavior changed.
Action required: None, unless you want to align your implementation with the updated reference example.
References: Idempotency
Node.js deterministic key generation sample: Fixed [Docs]
Impact: The Node.js sample was updated to make the normalization logic clearer and align the example with canonical JSON hashing expectations described in the guide.
Action required: If you implemented the previous sample directly, verify that your body hashing logic produces the same deterministic output for semantically identical payloads, including nested objects.
References: Idempotency
Migration notes
- Canonicalize the request body before hashing
- Sort object keys consistently before computing the SHA-256 hash.
- Ensure semantically identical payloads generate the same
body_hash.
- Keep UUID v5 generation unchanged
- Continue using:
name = client_id + method + body_hashIdempotency-Key = UUIDv5(namespace, name)
- Continue using:
- Validate client-side implementations
- If you copied a previous example into production code, confirm it matches the canonicalization rules described in the updated guide.
2026-01-28
Documentation updated to clarify when internal transactions emit MONEY_IN (INT_CREDIT) webhooks based on ownership and how to interpret owner_id/sub_category.
This release updates the documentation to clarify webhook emission rules for Money Out and to align the MONEY_IN webhook reference with actual behavior. In short: INT_CREDIT notifications are only emitted for inbound credits to a different owner, while self-transfers do not generate a MONEY_IN webhook event.
Changed
Money Out webhook emission rules: Changed [Docs] [Operational]
Impact: For internal routing through POST /v1/transactions/money_out:
- The API response returns the debit leg (source side).
- The credit leg may trigger a
MONEY_INwebhook only when the destination instrument belongs to a differentowner_idthan the initiator (even if theclient_idis the same). - Self-transfers under the same
client_id+owner_iddo not generate aMONEY_INwebhook event. - Documented that dashboard “resend webhook” should be used only when a webhook event exists (self-transfers have nothing to replay).
Action required: If your automation expects MONEY_IN for every internal transfer, update logic to:
- Not expect
INT_CREDITfor self-transfers. - Use the API response and/or transaction reads for self-transfer confirmation and reconciliation.
References: Send money to a CLABE, MONEY_IN webhook event
MONEY_IN webhook reference, internal credits note: Changed [Docs]
Impact: Updated the MONEY_IN webhook documentation to:
- Explicitly state that
INT_CREDITis only emitted for inbound credits to a different owner (not self-transfers). - Clarify the meaning of
owner_idfor internal credits (receiving owner). - Reinforce how to distinguish external vs internal credits using
sub_categoryandpayer_institution.
Action required: None. Documentation-only.
References: MONEY_IN webhook event, Send money to a CLABE
2026-01-07
Penny Validation now supports optional description and external_reference with backend defaults and webhook propagation.
This release improves Penny Validation by allowing integrators to send a custom description and external_reference for better traceability. When omitted, the backend applies deterministic defaults. Both fields are propagated to the transaction read endpoint and the CEP webhook payload.
Added
Penny Validation request fields: Added [Behavior]
Impact: POST /v1/transactions/penny_validation now accepts:
description(optional): string, max 40 chars; letters, numbers and spaces only; special characters not allowed exceptñ/Ñ.external_reference(optional): numeric string, max 7 digits.
Action required: None. Optional fields only.
References: Validate a bank account
Changed
Penny Validation defaults (backend): Changed [Behavior]
Impact: If optional fields are not provided, the backend sets:
description→"Validacion de cuenta"external_reference→ operation date formatted asddmmaa(e.g. 24/11/2025 →"241125")
Action required: If you relied on empty/missing values, update your expectations to these defaults.
References: Validate a bank account
Propagation to reads and webhook: Changed [Behavior] [Operational]
Impact: description and external_reference are now reflected in:
GET /v1/clients/{clientId}/transactions/{transactionId}- CEP webhook payload (e.g.,
payment_concept,external_reference)
Action required: If you parse/monitor webhook payloads, you can now store these fields for reconciliation and traceability.
References: Validate a bank account
2026-01-05
JWT-first authentication, client-scoped webhooks management, CEP clarification, and Changelog launch.
This release introduces a public Changelog, adds client-scoped webhook management endpoints, and simplifies authentication so that JWT is the primary credential used for API operations.
Added
Public Changelog: Added [Docs]
Impact: You can track API and documentation changes in one place, with daily release notes.
Action required: None.
References: Changelog
Client-scoped Webhooks Management endpoints: Added [Behavior] [Operational]
Impact: You can manage webhooks per client (list, create, retrieve, update, delete) using client-scoped endpoints.
Action required: Prefer the client-scoped endpoints for all webhook operations.
References:
GET /v1/clients/{clientId}/webhooks: list webhooks for a clientPOST /v1/clients/{clientId}/webhooks: create a webhook for a clientGET /v1/clients/{clientId}/webhooks/{id}: retrieve a webhookPATCH /v1/clients/{clientId}/webhooks/{id}: update a webhookDELETE /v1/clients/{clientId}/webhooks/{id}: delete (soft-delete) a webhook
WebhookUpdateRequest schema: Added [Behavior]
Impact: Webhooks can be partially updated (e.g., url, token, webhook_status, optional auth_* fields).
Action required: When updating a webhook, send only the fields you want to change.
References: PATCH /v1/clients/{clientId}/webhooks/{id}
Changed
Authentication simplification (JWT-first): Changed [Behavior] [Operational]
Impact: x-api-key is now bootstrap-only (used to obtain a JWT). After a JWT is issued, API calls should use only Authorization: Bearer <JWT>.
Action required: Stop sending x-api-key on operational API calls; keep it only for JWT bootstrap flows.
References: POST /v1/clients/{clientId}/auth/credential-tokens
CEP webhook clarification for Penny Validation: Changed [Docs] [Operational]
Impact: The CEP webhook is triggered only for Penny Validation transactions (amount = 0.01 MXN). INITIALIZED may appear on API reads but is not emitted by the CEP webhook and should be treated as PENDING.
Action required: Ensure your CEP webhook consumer does not expect INITIALIZED events; treat API-read INITIALIZED as PENDING.
References: Validate a bank account
Migration notes
- JWT-first auth
- Use
x-api-keyto obtain a JWT. - Use
Authorization: Bearer <JWT>for all subsequent API calls.
- Use
- Webhook creation
- Use the client-scoped endpoint:
POST /v1/clients/{clientId}/webhooks
- Use the client-scoped endpoint: