Terminal Sessions
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.
Use cases
- ERP/POS integration: Your billing or point-of-sale system generates the charge, and the Recurrente terminal processes it.
- Remote charges: Send charges to terminals at different locations from a centralized system.
- Automation: Eliminate the need to manually enter amounts on the terminal.
Prerequisites
- A Recurrente account with API keys
- At least one POS terminal linked to your account
- Your terminal ID (found in POS in your dashboard — click on a terminal to see its ID)
Set up the terminal in standby mode
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.
- In your dashboard, go to POS
- Click on the terminal you want to configure
- On the terminal detail page, click Modo espera (top-right corner)
- The terminal will display the waiting screen
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.
Integration flow
1. Create a terminal command
Send a POST to /api/terminal_session_commands with the amount and target terminal.
Response
201 Created— a new command was created200 OK— an active command with the sameexternal_idalready 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.
Parameters
Send amount_in_cents or amount, not both. If you send amount, it is automatically converted to cents.
2. Receive the payment result
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.
Command statuses
Idempotency
The external_id is unique per account. If you send the same external_id twice:
- If the previous command is active (pending or dispatched), the existing command is returned.
- If the previous command was superseded or failed, the existing command is returned without creating a new one.
This lets you safely retry requests without creating duplicate charges.
Superseding (command replacement)
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:
- The customer changes the order amount
- You need to cancel a charge and send a new one
- Your system retries with a new order ID

