Skip to content
Built for your next move. Sandbox API now available
DEVELOPER PLATFORM · API v1

Good ideas.
Meet your next integration.

Clear endpoints. Predictable responses. A sandbox to build and test your payment flow before live processing is available.

Documentation / Payment intents · Updated 16 September 2026

The payment intent API.

Paths below are relative to https://cheatgateway.net/api/v1. All endpoints require a bearer key. Unsupported fields are rejected. Send only synthetic order references; do not send card data or customer personal information.

GET /account

Returns your workspace ID, the key’s scopes, and current capabilities. No additional scope is required.

{
  "id": "workspace-uuid",
  "environment": "sandbox",
  "livemode": false,
  "capabilities": {
    "sandbox_payments": true,
    "live_payments": false,
    "webhooks": false
  },
  "scopes": [
    "payments:read",
    "payments:write",
    "payments:simulate"
  ]
}

POST /payment-intents

Requires payments:write and an Idempotency-Key header of 16–100 letters, digits, underscores or hyphens. Use Content-Type: application/json.

FieldTypeRules
amount_minorintegerRequired. 1–10,000,000 USD cents.
currencystringRequired. USD only.
referencestringRequired. 1–100 letters, digits, hyphens or underscores. Synthetic order ID only.
livemodebooleanOptional. Must be false if supplied.
curl https://cheatgateway.net/api/v1/payment-intents \
  -H "Authorization: Bearer $CG_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: sandbox-order-00001" \
  -d '{"amount_minor":2500,"currency":"USD","reference":"order_00001"}'

Returns 201 for a new intent or 200 for an idempotent replay. Replays include Idempotent-Replayed: true. Reusing the same key with different input returns 409. Idempotency is scoped to your workspace and remains valid for the retained intent, including after API key rotation.

{
  "id": "pi_test_123e4567-e89b-42d3-a456-426614174000",
  "object": "payment_intent",
  "livemode": false,
  "amount_minor": 2500,
  "currency": "USD",
  "reference": "order_00001",
  "status": "pending",
  "created_at": 1789603200000,
  "updated_at": 1789603200000
}

GET /payment-intents/{id}

Requires payments:read. Returns 200 with the intent object, or 404 if it is not in your workspace.

POST /payment-intents/{id}/simulate

Requires payments:simulate. Send {"outcome":"succeeded"} or {"outcome":"failed"}. Returns the updated intent with 200. Repeating the same outcome is safe. Changing a terminal outcome returns 409.

pending ── simulate(succeeded) ──→ succeeded
pending ── simulate(failed) ────→ failed