Environments
Two environments with the same contract. An integration that passes the sandbox end to end uses the same API in production; production is enabled per client.
Production and sandbox
| Production | Sandbox | |
|---|---|---|
| Host | https://api.fcmpayments.com |
https://empresas-sandbox.fcmpayments.com |
| API keys | fcm_live_… |
fcm_test_… |
| Money | Real. Transfers through COELSA (the Argentine clearing house) are irreversible. | Simulated. The sandbox has its own ledger and rail. |
Simulators (/v1/simulations/*) |
Do not exist (404) | Yes |
A key from one environment used in the other returns 403 environment_mismatch.
Servers declared in the contract
https://api.fcmpayments.com— Production. Real money; transfers through COELSA are irreversible.https://empresas-sandbox.fcmpayments.com— Sandbox. Simulated ledger and rail; it never moves real money.
Sandbox
- Outgoing transfers complete on their own after ~2 s, unless the cents of the amount say otherwise:
…13endsfailedwithdestination_closed(COELSA 7502),…70endsfailedwithrail_expired(COELSA 7570) and…99stayssubmitteduntil you resolve it withPOST /v1/simulations/outgoing_transfers/{id}/rail_result. - Test aliases (the human-readable names of Argentine accounts) for validating counterparties:
sbx.valida(valid),sbx.inactiva,sbx.inexistente,sbx.bloqueada(compliance control) andsbx.otro.titular(a CUIT, the Argentine tax ID, other than the expected one, if you sendexpected_cuit). Any CBU (bank account number) or CVU (virtual account number) with correct check digits validates with a synthetic holder. POST /v1/simulations/incoming_transferssimulates an incoming credit: it goes through the same path as a real COELSA notice (ledger entry, fee, event and webhook).- Per-entity test clock:
GET /v1/simulations/clockandPOST /v1/simulations/clock/advancemove the entity's time forward (daily and monthly limits, webhook retries, expirations). - Late settlement, in two steps: on a
failedtransfer that went out through COELSA (for example, a…13),POST /v1/simulations/outgoing_transfers/{id}/rail_resultwith{"outcome":"completed"}simulates that COELSA credited it later, through the same path as in production (compensating debit of the amount, outgoing transfers disabled,submittedwithlate_settlement_reviewand the eventtransfer.outgoing.reopened). Then,POST /v1/simulations/outgoing_transfers/{id}/late_settlement_reviewwith{"outcome":"completed"}simulates that two people at Grip Rails confirm the settlement: a few seconds later Grip Rails closes it ascompleted, free of charge, with the eventtransfer.outgoing.completed. As in production, from the first step on your outgoing transfers are disabled (403 entity_suspended). In the sandbox only, a few seconds after thattransfer.outgoing.completedGrip Rails enables them again on its own (GET /v1/entityis back toactive; not if Grip Rails blocked your entity in the meantime) and you can keep testing; in production they stay disabled until Grip Rails re-enables them.