Terminal Sessions lets you send charges to a Recurrente POS terminal directly from your system (ERP, custom POS, or any integration). Your system sends a command with the amount, and the terminal automatically displays the payment screen for the customer to pay with their card.
For the terminal to receive commands from your system, it must be on the standby screen. This screen shows “Listo para cobrar” (Ready to charge) and automatically waits for new commands.
When your system sends a command, the terminal automatically displays the payment screen. After each payment (successful or failed), the terminal returns to standby mode to receive the next command.
In standby mode, the terminal operator cannot manually enter amounts. All charges are controlled from your system via the API.
Send a POST to /api/terminal_session_commands with the amount and target terminal.
201 Created — a new command was created200 OK — an active command with the same external_id already exists (the existing one is returned)If you receive 200 and the status is dispatched, it means the command was already picked up by the terminal. Use a new external_id to create a fresh command.
Send amount_in_cents or amount, not both. If you send amount, it is automatically converted to cents.
Register a webhook endpoint to receive notifications when the payment completes.
Listen for the payment_intent.succeeded event:
Use the metadata.external_id field to match the payment back to the order in your system.
The external_id is unique per account. If you send the same external_id twice:
This lets you safely retry requests without creating duplicate charges.
If you send a new command to the same terminal with a different external_id, all previous pending commands for that terminal are marked as superseded. The terminal only processes the most recent command.
This is useful when: