SuperAPI AI Directory

swiggy-pay

General & other

View repository

Updated 10-15 22:13

About this skill

swiggy-pay

A UPI order is created in PENDING_PAYMENT and becomes PLACED only after payment succeeds and confirm_order runs. The CLI does the whole loop for you; your job is to hand the user the link and report the terminal state truthfully.

The one command

swiggy <server> payment-status --paas-id <paasId> --order-id <orderId> --wait --json --no-interactive
# Food additionally REQUIRES the echo values from the place-order response:
swiggy food payment-status --paas-id <paasId> --order-id <orderId> --address-id <addressId> --lat <lat> --lng <lng> --wait --json --no-interactive

meta.payment.next on the pending checkout response is this exact command — copy it. Without addressId/lat/lng, Swiggy cannot reconcile a Food order and it stays pending forever.

--wait polls check_payment_status every pollingIntervalInMs (a ~19 s server long-poll) up to maxTimeToPollForInMs, then calls confirm_order once on success (or once at the cap). It blocks; that is intended. Never poll faster than the server's interval by hand — it stresses Swiggy's payment cache and buys nothing.

Before waiting

Give the user meta.payment.bridgeUrl from the checkout response: "Pay here — scan on desktop, tap on mobile: ". That link renders a QR plus an "open in UPI app" button, so you never need the device type or a UPI ID.

Outcomes (exit code → say)

exit meta.payment.outcome tell the user
0 confirmed order placed; quote meta.message; hand off to swiggy-track
10 failed payment failed, nothing charged; offer to retry: swiggy <server> payment-options then checkout again (fresh transaction, same cart)
10 cancelled order cancelled; any debit is refunded automatically; do not retry on your own
10 cart_changed price/stock changed so the order was NOT placed; re-read the cart with the user, then place again
10 refund_initiated money was debited and a refund is already underway; stop
10 timeout still pending at the cap; confirm_order was called once; a late success reconciles on Swiggy's side — check swiggy <server> orders --active before doing anything else

One-shot status (no wait)

swiggy <server> payment-status --paas-id <paasId> --json returns data.status, data.terminal, data.confirmed. Use it once when the user asks "did it go through?", not in a loop.

Manual confirm (rare)

Only if --wait reported success but data.confirmed is false and no confirm ran:

swiggy food confirm-order --order-id <o> --address-id <a> --lat <lat> --lng <lng> --json --no-interactive
swiggy instamart confirm-order --order-id <o> --paas-id <p> --json --no-interactive
swiggy dineout confirm-order --order-id <o> --paas-id <p> --json --no-interactive

Food confirms by address + coordinates and never takes paasId; Instamart and Dineout confirm by paasId. confirm_order is idempotent and never places an unpaid order, so a duplicate call is harmless; confirming after a terminal failure is pointless — skip it.

Swiggy Money

Swiggy announced Swiggy Money on MCP (Sept 2026): the user tops up once and the agent pays without a payment step per order. It appears as a payment-method group from payment-options (SwiggyPay). If listed, --pay swiggypay places the order with no pending leg; if not listed for this cart, do not pass it.