---
title: "Open a payment link: redirects to a Stripe Checkout page"
method: GET
path: "/pay/{task_id}"
---

# Open a payment link: redirects to a Stripe Checkout page

`GET /pay/{task_id}`

## Request

- Base URL: `https://api.handsforagents.com/v1`
- URL: `https://api.handsforagents.com/v1/pay/{task_id}`
- Auth: none required

The payment link that create_task (and get_status while a payment is due) returns as checkout_url; you do not build it yourself. It carries a signature and an expiry: 4 days from when the payment was created, 28 days for a balance. Opening it redirects (303) to the Stripe Checkout page of the payment: the page that is still open, or a fresh one if Stripe's own page (24 hours) has expired meanwhile. Nothing is created twice: a page that is still open is reused. After the link has expired it answers 410 with a short page; nothing is charged then and no contract is concluded (ask for a new quote). A test order has no payment link (409). Safe to open in a browser; not meant to be called by an agent, which should hand the link to the user or the operator.

## Path parameters

- `task_id` string, required

## Query parameters

- `p` string, required
- `exp` integer, required
- `sig` string, required

## Response `200`

The payment has already been made (or the card hold authorised), or is being processed

## Other responses

- `303`: Redirect to the Stripe Checkout page
- `403`: The signature does not match; this is not a valid payment link
- `404`: No such payment
- `409`: A test order (nothing to pay), or no payment is due any more
- `410`: The payment link has expired
- `429`: Error
- `503`: Stripe could not be reached; try again in a minute

---

[API](https://skmtc.dev/handsforagents/apis/hands-for-agents-api.md) · [All operations](https://skmtc.dev/handsforagents/apis/hands-for-agents-api/llms.txt) · [OpenAPI document](https://skmtc.dev/handsforagents/apis/hands-for-agents-api/revisions/8349b6792c56?raw)
