---
title: "Create an accountless prepaid wallet checkout"
method: POST
path: "/api/v1/guest-wallets"
tags: ["Guest Wallets"]
---

# Create an accountless prepaid wallet checkout

`POST /api/v1/guest-wallets`

Create a one-use Stripe-hosted checkout after the user explicitly confirms a $10-$250 USD amount. This request creates no charge by itself. The user opens checkout_url on Stripe. This endpoint returns the paid-read API key without requiring an Xquik account, email, dashboard, or Xquik web page. An idempotent replay returns the same key.

## Headers

- `Idempotency-Key` string, required

## Request body

- GuestWalletPurchaseRequest — User-confirmed guest wallet checkout request.
  - `amount_minor` integer, required — USD cents accepted for this checkout.
  - `currency` 'usd', required

## Response `201`

Stripe-hosted checkout, guest API key, and API status URL.

- GuestWalletCreateResponse — Pending Stripe checkout and guest wallet purchase details.
  - `account_required` false, required
  - `amount` GuestWalletAmount, required — Confirmed USD amount for a guest wallet purchase.
    - `amount_minor` integer, required — USD amount in cents. Accepted range is $10-$250.
    - `currency` 'usd', required
  - `api_key` string, password, required — Paid-read bearer credential returned only by initial creation. Store it as a secret. Never place it in a URL or log.
  - `authorization` object, required
    - `header` 'Authorization', required
    - `scheme` 'Bearer', required
  - `checkout_url` string, uri, required — Raw Stripe-hosted checkout URL for user interaction.
  - `credits` string, required — Credits granted after verified payment.
  - `credential_notice` 'Store api_key and the Idempotency-Key securely before sharing checkout_url. No email recovery is available.', required
  - `expires_at` string, date-time, required — Time when the pending checkout expires.
  - `instructions` 'Give checkout_url to the user. They must complete payment on Stripe. Never submit payment for them. After payment, poll status_url every poll_after_seconds until latest_purchase.status is no longer pending.', required
  - `poll_after_seconds` 2, required — Wait at least this long before polling status_url.
  - `purchase_id` string, required
  - `requires_user_interaction` true, required
  - `status` 'creating' | 'pending' | 'paid' | 'expired' | 'failed' | 'refunded' | 'disputed', required
  - `status_url` 'https://xquik.com/api/v1/guest-wallets/status', uri, required
  - `wallet_id` string, required

## Other responses

- `400` — Invalid input
- `409` — Idempotency-Key was reused with a different request.
- `410` — Checkout expired or can no longer be used.
- `413` — Request body is too large.
- `415` — Content-Type must be application/json.
- `423` — Guest wallet is unavailable.
- `429` — Guest wallet request limit exceeded.
- `503` — Guest wallet checkout is unavailable.
- `default` — Unexpected error.

---

[API](https://skmtc.net/xquik-dev/apis/xquik-api-2.md) · [All operations](https://skmtc.net/xquik-dev/apis/xquik-api-2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/xquik-dev/xquik-api-2/versions/c367e6e8f845/schema)
