# Checkout

> Complete online shopping purchases on any online store using the Credpay Checkout API with x402 payments. Trigger when a user wants to buy, order, or checkout a product.

- Skill: `modbender/checkout` (Agent Skill)
- Install (CLI): `npx skillmds@latest add modbender/checkout`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modbender/checkout/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: modbender (https://skillmd.com/u/modbender)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/modbender/checkout

---


# Credpay Checkout Skill

**API Base URL:** `https://checkout-agent.credpay.xyz`

Trigger this skill whenever the user wants to purchase, order, or checkout a product from any online store.

## What you need from the user

Collect these before starting (ask if missing):

| Field | Example |
|---|---|
| Product URL | `https://example.com/products/tee` |
| Quantity | `1` |
| Size / Color (if applicable) | `"Size": "M", "Color": "Black"` |
| Email | `customer@example.com` |
| Goods total (USD) | `"49.99"` — item price as a USD string, no currency symbol |
| Shipping address | firstName, lastName, line1, city, state, postalCode, country, phone |

## Step 1 — Get a quote (no payment needed)

```http
POST https://checkout-agent.credpay.xyz/v1/quote
Content-Type: application/json

{
  "items": [
    {
      "url": "<product URL>",
      "quantity": 1,
      "options": { "Size": "M", "Color": "Black" }
    }
  ],
  "email": "<email>",
  "shippingAddress": {
    "firstName": "Jane",
    "lastName": "Doe",
    "line1": "123 Main St",
    "city": "Austin",
    "state": "TX",
    "postalCode": "78701",
    "country": "United States",
    "countryCode": "US",
    "phone": "+15125551234"
  },
  "goodsTotal": "<item price in USD as string, e.g. \"49.99\">"
}
```

→ Save `maxAmount` from the response. This is the USDC amount you will pay via x402.

## Step 2 — Submit checkout (x402 payment required)

```http
POST https://checkout-agent.credpay.xyz/v1/checkout
Content-Type: application/json
X-PAYMENT: <x402 payment payload for maxAmount on Base chainId 8453>

<same body as Step 1>
```

→ On `202`: save `requestId` and go to Step 3.
→ On `402`: re-read the payment requirements from the response and retry with a correct `X-PAYMENT` header.

## Step 3 — Poll for completion

```http
GET https://checkout-agent.credpay.xyz/v1/checkout/{requestId}
```

Poll every 5 seconds. Stop when status is `completed` or `failed`. Timeout after 10 minutes.

| Status | Action |
|---|---|
| `processing` | Keep polling |
| `authorization_required` | See Step 4 |
| `completed` | Done — return result to user |
| `failed` | Report `errorCode` + `errorMessage` to user |

## Step 4 — Handle extra payment (if needed)

If status is `authorization_required`, the order total exceeded the quoted amount:

```http
POST https://checkout-agent.credpay.xyz/v1/checkout/{requestId}/authorize
X-PAYMENT: <x402 payment for extraOwed amount>
```

Then resume polling from Step 3.

## Rules

- Works with any online store — just pass the product page URL.
- Never create a second checkout for the same intent while a `requestId` is active.
- Retry transient network errors with exponential backoff. Never blind-retry `failed` status.
- Default `chainId` is `8453` (Base).

## Success response

```json
{
  "requestId": "req_abc123",
  "status": "completed",
  "success": true,
  "orderNumber": "1234"
}
```

## Failure response

```json
{
  "requestId": "req_abc123",
  "status": "failed",
  "success": false,
  "errorCode": "payment_failed",
  "errorMessage": "Card declined"
}
```

