Preview Leffel Consulting Payments is in active development and migrating to Finix — the API isn't publicly live yet, and some examples still reflect the outgoing build. Request early access →

Guides

Card-present payments

Accept in-person payments with Stripe Terminal readers — connection tokens, locations, and readers.

Take payments in person — at a counter, market, or event — using Stripe Terminal hardware. The same account, ledger, and reporting cover both online and in-person payments.

1. Register a location

A location groups readers by physical site.

curl https://payments.leffelconsulting.com/v1/terminal/locations \
  -H "X-Api-Key: lc_live_XXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "Main Counter",
    "line1": "123 Main St",
    "city": "Austin",
    "state": "TX",
    "postalCode": "78701"
  }'

2. Register a reader

Use the registration code shown on the physical reader and attach it to a location.

curl https://payments.leffelconsulting.com/v1/terminal/readers \
  -H "X-Api-Key: lc_live_XXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{ "registrationCode": "simulated-wpe", "locationId": "tml_1Nxyz...", "label": "Front register" }'

3. Get a connection token

Your point-of-sale app initializes the Terminal SDK with a short-lived connection token:

curl -X POST https://payments.leffelconsulting.com/v1/terminal/connection-token \
  -H "X-Api-Key: lc_live_XXXXXXXXXXXXXXXXXXXX"
{ "secret": "pst_test_..." }

4. Take the payment

Create a payment the same way as online — POST /v1/payments/intents — then collect and process it at the reader with the Terminal SDK. The reader captures the card and the payment settles to the merchant, with the platform fee applied.

Tip

Card-present payments plug into the same lifecycle as online payments — you still receive payment_intent.succeeded and can look up the payment by lcPaymentId.

See the Terminal API reference for every field.