#Terminal (in-person)
Accept card-present payments on a physical reader. An external POS app drives the reader in three steps — steps 1 and 3 talk to the reader; step 2 creates the payment.
#1 · Connection token
Your POS app needs a short-lived connection token to initialize the Terminal SDK.
POST /v1/terminal/connection-token
{ "data": { "secret": "pst_test_Ab12Cd34…" } }
#2 · Create the terminal payment
POST /v1/terminal/create-payment
| Field | Type | Required | Description |
|---|---|---|---|
amount |
integer | ✔ | Cents. Minimum 50. |
currency |
string | Defaults to account currency. | |
terminal_id |
uuid | A registered PlutoPay terminal. | |
description |
string | ||
customer_id |
uuid | ||
metadata |
object |
{
"data": {
"id": "019c8044-…",
"reference": "txn_…",
"client_secret": "pi_…_secret_…",
"amount": 4750,
"currency": "usd",
"status": "pending"
}
}
#3 · Process on the reader
POST /v1/terminal/process-payment
| Field | Type | Required |
|---|---|---|
payment_intent_id |
string | ✔ |
reader_id |
string | ✔ |
{ "data": { "reader_id": "tmr_…", "status": "in_progress", "action_type": "process_payment_intent" } }
The final result arrives by webhook — payment.succeeded / payment.failed.
#Readers & terminals
GET /v1/terminal/readers # list readers
GET /v1/terminals # manage registered terminals (CRUD)
POST /v1/terminals # register a reader (name, registration_code)
In test mode, drive a simulated reader with POST /v1/terminal/simulate-payment — see Testing.