Skip to main content
A payment session is the direct way to pay when you already know the merchant, the items, and the total. You create the session, the owner enters their card in Prava’s secure page, and you receive one-time credentials to complete the checkout. Use this flow when you found the product. If you want Prava to help discover the product too, see Agentic shopping instead.
The agent must be linked first. If it isn’t, session commands exit with Agent not linked. Run: prava setup --name "<name>".

prava sessions create

prava sessions create \
  --total-amount "8.50" \
  --currency USD \
  --merchant-name "Blue Bottle Coffee" \
  --merchant-url "https://bluebottlecoffee.com" \
  --merchant-country US \
  --product '{"description":"Latte","unit_price":"5.00","quantity":1}' \
  --product '{"description":"Croissant","unit_price":"3.50","quantity":1}'
OptionRequiredDescription
--total-amount <amount>YesTotal as a string, e.g. "8.50". Must equal the sum of unit_price × quantity across all products.
--currency <code>YesISO 4217 code, e.g. USD, EUR, GBP, INR.
--merchant-name <name>YesMerchant display name (shown to the owner).
--merchant-url <url>YesFull merchant URL including https://.
--merchant-country <code>YesISO 3166-1 alpha-2 country, e.g. US.
--product <json>YesA product line item as JSON. Repeat the flag for each distinct item.
Each --product is a JSON object:
{ "description": "Latte", "unit_price": "5.00", "quantity": 1 }
For multiple units of the same item, set "quantity" — don’t repeat --product or bake counts into the description. The total must reconcile with the line items.
On success:
Session created.
Session ID: ses_abc123
Payment URL: https://collect.prava.space?session=…

Share this URL to complete card entry.
Run `prava sessions poll --session-id ses_abc123` to wait for card entry.
Give the Payment URL to the owner. They open it and enter their card in Prava’s secure page — the card details never pass through the agent.

prava sessions poll

Wait for the card to be entered and tokenized:
prava sessions poll --session-id ses_abc123
OptionRequiredDescription
--session-id <id>YesThe Session ID from sessions create.
While waiting it prints dots; once the owner completes card entry:
Waiting for card entry on session ses_abc123...
....

Card tokenized.

Token:        4323126882557932
Cryptogram:   957
Expiry:       12/2028
poll waits up to 10 minutes for the owner to enter the card.

What you receive

FieldFormatUse it as
Token16-digit numberThe card number at checkout.
Cryptogram3-digit numberThe CVV / security code at checkout.
ExpiryMM/YYYYThe card expiry at checkout.
These credentials are single-use and expire quickly. Complete the checkout immediately after polling — don’t cache, log, or reuse them. If they expire, create a new session.

Exit codes

Session commands use exit codes so an agent can branch reliably:
CodeMeaning
0Success.
1Error or timeout (e.g. session expired, tokenization failed).
2Not linked / no agent configured — run prava setup.

Common outcomes

OutputWhat it meansWhat to do
Session expired. Run \prava sessions create` again.`The owner didn’t finish card entry within 10 minutes.Re-create the session; have the card ready.
Tokenization failed.The card couldn’t be processed.Try again, or a different card. See Troubleshooting.
Invalid product JSON: …A --product value isn’t valid JSON.Fix the JSON: '{"description":"…","unit_price":"…","quantity":1}'.
Failed to create session: …The order was rejected.Check the amount reconciles with the line items and the URL includes https://.
Next: use the token to complete a checkout, or drive the merchant’s checkout directly with the returned credentials.