# EZ2Pay > EZ2Pay is an in-game sales system and the seller to the player. A game server creates an order, the player pays on the EZ2Pay checkout page, EZ2Pay sends the game a signed webhook, and the game delivers the goods. The developer sells in-game goods to EZ2Pay and receives payment for them. EZ2Pay คือระบบขายในเกมและเป็นผู้ขายต่อผู้เล่น > > **`amount` is the full retail price the player pays EZ2Pay, not the amount the developer receives. `amount` คือราคาขายเต็มที่ผู้เล่นจ่ายให้ EZ2Pay ไม่ใช่เงินที่ Developer ได้รับ** ## Rules for AI agents - Integrate with plain HTTPS and HMAC-SHA256 from the game server, in any language. No EZ2Pay library is required. - Deliver goods from the server only, exactly once per `order_id`, in one database transaction with a durable record. Never deliver from a client or a `return_url`. - After a signed webhook, call `GET https://api.ez2pay.gg/v1/orders/{id}` and require a paid status (`PAID`, `NOTIFYING`, `NOTIFIED`, `NOTIFY_FAILED`, `DELIVERED`), a valid `paid_at`, `THB`, and matching `order_id`, `sku` and `buyer` before granting. Do not compare `amount` with a price stored in the game, because prices can change in the Dashboard. - Verify `EZ2Pay-Signature: v1=` with a timing-safe comparison over the raw body, within 300 seconds. Answer exactly HTTP 200 only after everything finished. Any other answer is retried. - After granting, call `POST https://api.ez2pay.gg/v1/orders/{id}/delivered` with `{}`. - Prices come only from EZ2Pay SKUs. Keep money as integer satang (1 THB = 100 satang), never floating point. The minimum SKU price is 5900 satang. - There is no test mode. Verify with the webhook test ping and one real purchase of the lowest-priced SKU after activation. A ping is not proof of a sale. - Game API keys (`ez2_live_...`) and webhook secrets stay in server environment variables. Never place them in source, git, logs, game clients or prompts. An MCP token (`ez2_mcp_...`) cannot replace an API key. - The MCP server can create draft games and pending SKUs, set and test webhooks, and read redacted order, sales and log data. It is always refused activation, real API keys, order creation, delivery acknowledgement, refunds, banking and identity data (`403 MCP_FORBIDDEN`). - The API has no endpoint to cancel an order or resend a webhook. A person does that in the Dashboard. - Never add EZ2Pay branding or credit inside a game. Purchases start inside the game only. ## Documentation - [Overview](https://ez2pay.gg/docs/en): what EZ2Pay is and how a sale works. - [Getting started](https://ez2pay.gg/docs/en/getting-started): sign up, create a game and SKUs, test the webhook, request activation, first purchase. - [Orders and checkout links](https://ez2pay.gg/docs/en/orders): `POST /v1/orders`, Idempotency-Key, checkout links, every order status. - [Webhooks and delivery](https://ez2pay.gg/docs/en/webhooks): signature verification in Node and Python, a test vector, granting once, acknowledging delivery, retries. - [Direct HTTP integration](https://ez2pay.gg/docs/en/sdk): complete webhook servers in Node and Python. - [Set up with AI through MCP](https://ez2pay.gg/docs/en/mcp): tokens, client configuration, tools, limits. - [Errors and fixes](https://ez2pay.gg/docs/en/errors): every error code and the common mistakes. ## เอกสารภาษาไทย - [ภาพรวม](https://ez2pay.gg/docs) - [เริ่มเชื่อมเกม](https://ez2pay.gg/docs/getting-started) - [Order และลิงก์จ่าย](https://ez2pay.gg/docs/orders) - [Webhook และการส่งมอบของ](https://ez2pay.gg/docs/webhooks) - [เชื่อมต่อด้วย HTTP](https://ez2pay.gg/docs/sdk) - [ให้ AI ช่วยตั้งค่าผ่าน MCP](https://ez2pay.gg/docs/mcp) - [ข้อผิดพลาดและวิธีแก้](https://ez2pay.gg/docs/errors) ## API and tooling - [OpenAPI](https://ez2pay.gg/openapi.yaml): the API contract and webhook schema. - API base URL: https://api.ez2pay.gg - Hosted MCP endpoint: https://mcp.ez2pay.gg/mcp (Streamable HTTP, `Authorization: Bearer ez2_mcp_...`). - MCP tokens: https://dash.ez2pay.gg/settings/mcp - Dashboard: https://dash.ez2pay.gg