{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/fincore/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Internal Transactions API","siteUrl":"https://docs.monato.com","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"internal-transactions-api","__idx":0},"children":["Internal Transactions API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Internal Transactions move funds ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["book-to-book"]}," between two Monato accounts (same institution). These do not go through SPEI, so there’s no CEP and settlement is typically near-real-time when both instruments are active and funded."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"️-migration-notice","__idx":1},"children":["⚠️ Migration Notice"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/internal_transaction"]}," remains fully functional, but we recommend migrating to the unified Money Out flow."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/money_out"]}," now automatically detects when the destination instrument belongs to a Finco Pay account and routes it as an internal (book-to-book) transfer — same behavior, single endpoint."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New integrations:"]}," use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/money_out"]}," exclusively."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Existing integrations:"]}," no breaking changes; migrate at your own pace."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["→ See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/fincore/guides/quickstart#money-out-transaction"},"children":["Quickstart: Money Out"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":2},"children":["Overview"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rail:"]}," Internal (book-to-book)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["CEP:"]}," Not applicable"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Latency:"]}," Near-real-time"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use cases:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Move funds between Cost Centers / Business Units"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Intra-merchant payouts"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reserve account management"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Move funds to another Monato customer"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhooks / Notifications:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The credit leg of a successful internal transaction ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["may"]}," generate a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["destination instrument"]}," (the client that owns the destination instrument), only if they have a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook registered."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Webhook emission depends on ownership (see ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhooks / Notifications"]}," section below)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Payload format matches the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Money In confirmation"]}," guide, with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sub_category = \"INT_CREDIT\""]},"."]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Parity with Money Out:"]}," Request body format and most validations are the same as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Money Out"]},", with a few ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["extra internal checks"]}," noted below."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"endpoint","__idx":3},"children":["Endpoint"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/internal_transaction"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"request","__idx":4},"children":["Request"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Path params:"]}," none",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Query params:"]}," none"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Headers"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization: Bearer <JWT>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content-Type: application/json"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Body"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"client_id\": \"c2d1d1e3-3340-4170-980e-e9269bbbc551\",\n  \"source_instrument_id\": \"709448c3-7cbf-454d-a87e-feb23801269a\",\n  \"destination_instrument_id\": \"dd7f8d89-94dd-43ca-871b-720fde378b52\",\n  \"transaction_request\": {\n    \"amount\": \"1.90\",\n    \"currency\": \"MXN\",\n    \"description\": \"Internal transfer\",\n    \"external_reference\": \"1238766\"\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Field notes"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source_instrument_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destination_instrument_id"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["IDs of two valid internal instruments. They can belong either to your client or to one of your customers, as long as both instruments are internal to Monato."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To discover internal instruments available for your client or customers, use:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"GET /v1/clients/{clientId}/instruments\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["with the optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer_id"]}," filter."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"validations","__idx":5},"children":["Validations"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"field-level","__idx":6},"children":["Field-level"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["amount"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Must be a numeric string with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2 decimal places"]}," (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"1.90\""]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["greater than 0"]}," (otherwise backend returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DATA_ERROR: \"Transaction Amount must be higher than 0.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["currency"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Only ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"MXN\""]}]}," is supported (otherwise: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DATA_ERROR: \"Transaction currency unsupported.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["description"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Length < 40"]}," characters (if exceeded: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DATA_ERROR: \"Transaction description must have less than 40 characters length.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["external_reference"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["numeric"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["max 7 digits"]}," (otherwise: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DATA_ERROR: \"External reference should be numeric and have a maximum length of 7 digits.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["IDs"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source_instrument_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destination_instrument_id"]}," must be valid ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["UUIDs"]},"."]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"instrument-state","__idx":7},"children":["Instrument state"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Source"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Exists"]},", is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["active"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not blocked"]},", and has ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sufficient funds"]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"(if not: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED_PRECONDITION: \"The account does not have sufficient funds.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Destination"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Exists / is assigned"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["active"]},", and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not blocked"]},{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"(if not: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FAILED_PRECONDITION: \"The account is not currently active.\""]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Same institution (internal rail)"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Destination must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["internal to Monato"]}," (if not: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 external_transfer_not_allowed"]},")."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Different instruments"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Best practice: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["source_instrument_id"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["≠"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["destination_instrument_id"]},"."]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"response-examples","__idx":8},"children":["Response examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"success-liquidated","__idx":9},"children":["Success (LIQUIDATED)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"id\": \"09c9caac-3b74-4690-8ac5-5a01b2559b3f\",\n    \"bankId\": \"d3435bd9-998d-4e8a-9067-6b71d5fd3ac7\",\n    \"clientId\": \"b000654b-4d12-46e5-b451-662459b6effc\",\n    \"externalReference\": \"1238801\",\n    \"trackingId\": \"20250925FINCHCUCHFGMRLZ\",\n    \"description\": \"Prueba Internal 25/09/25\",\n    \"amount\": \"1.00\",\n    \"currency\": \"MXN\",\n    \"category\": \"INTER_TRANS\",\n    \"subCategory\": \"INT_DEBIT\",\n    \"transactionStatus\": \"LIQUIDATED\",\n    \"audit\": {\n        \"createdAt\": \"2025-09-25 15:48:28.486316-06:00\",\n        \"updatedAt\": \"2025-09-25 15:48:28.773897-06:00\",\n        \"deletedAt\": \"None\",\n        \"blockedAt\": \"None\"\n    }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"error-examples","__idx":10},"children":["Error Examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"inactive-account--400-failed_precondition-10-e4120","__idx":11},"children":["Inactive account — 400 FAILED_PRECONDITION (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"FAILED_PRECONDITION\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"The account is not currently active.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"insufficient-funds--400-failed_precondition-10-e4120","__idx":12},"children":["Insufficient funds — 400 FAILED_PRECONDITION (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"FAILED_PRECONDITION\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"The account does not have sufficient funds.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"invalid-external-reference--400-data_error-10-e4120","__idx":13},"children":["Invalid External reference — 400 DATA_ERROR (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"DATA_ERROR\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"External reference should be numeric and have a maximum length of 7 digits.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"invalid-amount--0--400-data_error-10-e4120","__idx":14},"children":["Invalid amount (<= 0) — 400 DATA_ERROR (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"DATA_ERROR\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"Transaction Amount must be higher than 0.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"large-description--400-data_error-10-e4120","__idx":15},"children":["Large description — 400 DATA_ERROR (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"DATA_ERROR\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"Transaction description must have less than 40 characters length.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"currency-not-supported--400-data_error-10-e4120","__idx":16},"children":["Currency not supported — 400 DATA_ERROR (10-E4120)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"code\": 9,\n    \"message\": \"API Error\",\n    \"details\": [\n        {\n            \"@type\": \"type.googleapis.com/google.rpc.ErrorInfo\",\n            \"reason\": \"DATA_ERROR\",\n            \"domain\": \"CORE\",\n            \"metadata\": {\n                \"error_detail\": \"Transaction currency unsupported.\",\n                \"http_code\": \"400\",\n                \"module\": \"Transactions\",\n                \"method_name\": \"InternalTransaction\",\n                \"error_code\": \"10-E4120\"\n            }\n        }\n    ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhooks--notifications","__idx":17},"children":["Webhooks / Notifications"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A successful internal transaction returns the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["debit leg"]}," (source side) in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/internal_transaction"]}," response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Additionally, the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["credit leg"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["may"]}," trigger a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook, depending on ownership:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Different owner (inbound credit):"]}," If the destination instrument belongs to a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["different ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["owner_id"]}]}," than the initiator (",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["even if the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," is the same"]},"), Monato sends a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook to the client that owns the destination instrument (only if a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook is registered)."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sub_category = \"INT_CREDIT\""]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Same owner (self-transfer):"]}," If the destination instrument belongs to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["owner_id"]}]}," as the initiator, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook is emitted"]},"."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["No webhook event is created for replay/resend."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this case, the API response is the source of truth (and you can also fetch the transaction by id for reconciliation)."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"resend--replay-behavior-dashboard","__idx":18},"children":["Resend / replay behavior (Dashboard)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The dashboard “resend webhook” action only replays ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["already generated"]}," webhook events."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["For ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["same-owner self-transfers"]},", since no webhook event is created, there is nothing to resend."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Showing “resend webhook” for same-owner internal transfers is a known UI bug and we are addressing it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"money_in-webhook-payload-when-emitted","__idx":19},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook payload (when emitted)"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Uses the common ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," envelope:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id_msg\": \"6daea2d2-ccb0-48f3-917c-f387dc8e99b0\",\n  \"msg_name\": \"MONEY_IN\",\n  \"msg_date\": \"2025-11-20\",\n  \"body\": {\n    \"...\": \"...\"\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Includes, in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["body"]},", fields like:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"id\": \"a0037594-5064-4dda-896b-f9b5dd4988dd\",\n  \"beneficiary_account\": \"734185000000001177\",\n  \"beneficiary_name\": \"MERCHANT TEST\",\n  \"beneficiary_rfc\": \"FTR230125Q00\",\n  \"payer_account\": \"734185000000000822\",\n  \"payer_name\": \"Customer Test-1 Legal\",\n  \"payer_rfc\": \"ND\",\n  \"payer_institution\": \"90734\",\n  \"amount\": \"1.00\",\n  \"transaction_date\": \"2025-11-20 15:05:59\",\n  \"tracking_key\": \"20251120FINCHESDHI7FVTU\",\n  \"payment_concept\": \"CUST - SPEI\",\n  \"numeric_reference\": \"1100003\",\n  \"sub_category\": \"INT_CREDIT\",\n  \"registered_at\": \"2025-11-20T15:05:59.915184-06:00\",\n  \"owner_id\": \"24f1e5d5-4045-4b1a-a0c4-5e6c6b1d44ef\"\n}\n","lang":"json"},"children":[]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Money In confirmation"]}," documentation for the full field-by-field description of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MONEY_IN"]}," webhook payload."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For internal credits, the webhook is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["informational"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The funds are already moved book-to-book when the webhook is sent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["HTTP status codes on your response ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["do not"]}," trigger an automatic rollback or refund."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"endpoint-error-mapping-quick-reference","__idx":20},"children":["Endpoint error mapping (quick reference)"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Failing rule"},"children":["Failing rule"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Typical response"},"children":["Typical response"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Source account inactive/blocked"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 FAILED_PRECONDITION"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Insufficient funds (source)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 FAILED_PRECONDITION"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_reference"]}," non-numeric or > 7 digits"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 DATA_ERROR"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," ≤ 0"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 DATA_ERROR"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}," ≥ 40 characters"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 DATA_ERROR"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["currency"]}," other than MXN"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 DATA_ERROR"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_code: 10-E4120"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Destination not found / not assigned"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404 destination_not_found"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Destination is external (not internal rail)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 external_transfer_not_allowed"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"categories-and-subcategories-for-internal-transactions","__idx":21},"children":["Categories and subCategories for internal transactions"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Debit leg (source account):"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["category = \"INTER_TRANS\""]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["subCategory = \"INT_DEBIT\""]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Credit leg (destination account, as seen in the MONEY_IN webhook or related transaction):"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["category = \"INTER_TRANS\""]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["subCategory = \"INT_CREDIT\""]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/internal_transaction"]}," remains available and supported. However, we encourage using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions/money_out"]}," for all new integrations, as it handles both external SPEI transfers and internal Finco Pay transfers through a single unified endpoint."]}]}]},"headings":[{"value":"Internal Transactions API","id":"internal-transactions-api","depth":1},{"value":"⚠️ Migration Notice","id":"️-migration-notice","depth":3},{"value":"Overview","id":"overview","depth":2},{"value":"Endpoint","id":"endpoint","depth":2},{"value":"Request","id":"request","depth":2},{"value":"Validations","id":"validations","depth":2},{"value":"Field-level","id":"field-level","depth":3},{"value":"Instrument state","id":"instrument-state","depth":3},{"value":"Response examples","id":"response-examples","depth":2},{"value":"Success (LIQUIDATED)","id":"success-liquidated","depth":3},{"value":"Error Examples","id":"error-examples","depth":2},{"value":"Inactive account — 400 FAILED_PRECONDITION (10-E4120)","id":"inactive-account--400-failed_precondition-10-e4120","depth":3},{"value":"Insufficient funds — 400 FAILED_PRECONDITION (10-E4120)","id":"insufficient-funds--400-failed_precondition-10-e4120","depth":3},{"value":"Invalid External reference — 400 DATA_ERROR (10-E4120)","id":"invalid-external-reference--400-data_error-10-e4120","depth":3},{"value":"Invalid amount (<= 0) — 400 DATA_ERROR (10-E4120)","id":"invalid-amount--0--400-data_error-10-e4120","depth":3},{"value":"Large description — 400 DATA_ERROR (10-E4120)","id":"large-description--400-data_error-10-e4120","depth":3},{"value":"Currency not supported — 400 DATA_ERROR (10-E4120)","id":"currency-not-supported--400-data_error-10-e4120","depth":3},{"value":"Webhooks / Notifications","id":"webhooks--notifications","depth":2},{"value":"Resend / replay behavior (Dashboard)","id":"resend--replay-behavior-dashboard","depth":3},{"value":"MONEY_IN webhook payload (when emitted)","id":"money_in-webhook-payload-when-emitted","depth":3},{"value":"Endpoint error mapping (quick reference)","id":"endpoint-error-mapping-quick-reference","depth":3},{"value":"Categories and subCategories for internal transactions","id":"categories-and-subcategories-for-internal-transactions","depth":3}],"frontmatter":{"seo":{"title":"Internal Transactions API"}},"lastModified":"2026-05-07T22:34:49.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/fincore/guides/internal-transactions","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}