Read-only catalog of gift cards, service top-ups and travel eSIMs sold by BlinkCodes.
Model Context Protocol (MCP) Server: com.blinkcodes/catalog
com.blinkcodes/catalog is a read-only MCP server that exposes a catalog of gift cards, service top-ups, and travel eSIMs sold by BlinkCodes. The service is remote and hosted, with delivery by email in seconds.
๐ ๏ธ Key Features
Read-only catalog access
Exposes items: gift card codes, service top-ups, travel eSIMs
Data is delivered via email in seconds
Remote, hosted service (nothing to install)
๐ Use Cases
Look up BlinkCodes offerings in an automated workflow
Integrate catalog data for agentic-commerce and AI agent systems
Support USDC-related flows and commerce tooling
โก Developer Benefits
Machine-readable interfaces for blinkcodes.com
Compatible with MCP tooling (MCP server, model context protocol)
Search the store catalog of gift cards, service top-ups and eSIM data plans. Returns matching products with their price, availability and product page URL.
Parameters4
country
string
optional
ISO-3166-1 alpha-2 country code the product is issued for, e.g. US, TR.
limit
integer
optional
Max products to return (default 10, max 50).
query
string
optional
Free text matched against product name and brand, e.g. "steam" or "playstation".
type
string
optional
voucher = gift card, recharge_fixed / recharge = top-up, e_sim = eSIM data plan.
Raw schema
{
"type": "object",
"properties": {
"country": {
"description": "ISO-3166-1 alpha-2 country code the product is issued for, e.g. US, TR.",
"type": "string"
},
"limit": {
"description": "Max products to return (default 10, max 50).",
"type": "integer"
},
"query": {
"description": "Free text matched against product name and brand, e.g. \"steam\" or \"playstation\".",
"type": "string"
},
"type": {
"description": "voucher = gift card, recharge_fixed / recharge = top-up, e_sim = eSIM data plan.",
"enum": [
"voucher",
"recharge_fixed",
"recharge",
"e_sim"
],
"type": "string"
}
}
}
get_product
Get one catalog product by id: available denominations with prices, required order inputs, and any countries where the code cannot be redeemed.
Buy a gift card, service top-up or travel eSIM and receive the delivery. Paid in USDC on Base (x402), no account and no browser. Call it twice: first with the order arguments to get payment requirements and an order_id (nothing is charged), then with that order_id plus the signed x402 payment payload to settle and receive the code.
Parameters9
account_number
string
optional
Only for products where get_product reported requires_account: the recipient account the top-up credits.
amount
number
optional
Only for products where get_product reported requires_amount; send instead of item_id.
email
string
optional
Delivery address. The code, eSIM profile or number is emailed here, and it is the only identity the order has. Required on the first call.
item_id
integer
optional
Denomination id from get_product items[].
order_id
string
optional
Second call only: the order_id returned by the first call.
payment_payload
object
optional
Second call only: the signed x402 PaymentPayload built from the requirements the first call returned.
product_id
integer
optional
Product id from search_catalog.
product_type
string
optional
giftcard = voucher, topup = service recharge. eSIM data plans from search_catalog are bought as giftcard too โ the value names the order shape, not the goods.
quantity
integer
optional
Copies to buy. Defaults to 1 โ send it only to buy several.
Raw schema
{
"type": "object",
"properties": {
"account_number": {
"description": "Only for products where get_product reported requires_account: the recipient account the top-up credits.",
"type": "string"
},
"amount": {
"description": "Only for products where get_product reported requires_amount; send instead of item_id.",
"type": "number"
},
"email": {
"description": "Delivery address. The code, eSIM profile or number is emailed here, and it is the only identity the order has. Required on the first call.",
"type": "string"
},
"item_id": {
"description": "Denomination id from get_product items[].",
"type": "integer"
},
"order_id": {
"description": "Second call only: the order_id returned by the first call.",
"type": "string"
},
"payment_payload": {
"description": "Second call only: the signed x402 PaymentPayload built from the requirements the first call returned.",
"type": "object"
},
"product_id": {
"description": "Product id from search_catalog.",
"type": "integer"
},
"product_type": {
"description": "giftcard = voucher, topup = service recharge. eSIM data plans from search_catalog are bought as giftcard too โ the value names the order shape, not the goods.",
"enum": [
"giftcard",
"topup"
],
"type": "string"
},
"quantity": {
"description": "Copies to buy. Defaults to 1 โ send it only to buy several.",
"type": "integer"
}
}
}
Machine-readable interfaces for blinkcodes.com โ a store
selling gift card codes, service top-ups and travel eSIMs, with delivery by email
in seconds.
Everything here is a remote, hosted service. There is nothing to install and
no server to run: point your client at the URLs below. This repository exists to
document those endpoints, pin their schemas, and give working examples.
Three tools. The two catalog tools are read-only and free โ no key, no account,
no payment. The third takes money, and only over x402:
Tool
Purpose
search_catalog
Search gift cards, top-ups and eSIM plans. Returns price, availability and product URL.
get_product
One product by id: denominations with prices, required order inputs, countries where the code cannot be redeemed.
buy_product
Buy and receive the delivery. Two calls: arguments in โ x402 payment requirements out; signed payload in โ the code out.
buy_product runs the same rail as POST /api/v1/buy below โ verify, reserve,
settle, fulfil, in that order โ so an agent that found the store through MCP
never has to change protocol to complete the purchase. Nothing is charged by the
first call, and no wallet is needed to use the other two tools.
Prefer the direct URL above wherever your client speaks remote MCP โ the bridge
adds a hop and buys nothing.
Buying, for agents
Payment is USDC on Base over x402. One endpoint, two
passes:
POST /api/v1/buy with the order body โ 402 carrying payment requirements
priced for that exact item, plus an order block (id, access token, status URL).
The identical request with a PAYMENT-SIGNATURE header โ 200 with the
code, or 202 + status_url if fulfilment outlives the sync window.
jsonc
// the body, in both passes{"email":"buyer@example.com","product_type":"giftcard",// giftcard | topup | esim | phone_rental"product_id":187,"item_id":1195,"quantity":1}
x402 v2 by default; v1 clients send X-PAYMENT, or ask for a v1 quote with
X-PAYMENT-VERSION: 1.
GET /api/v1 describes the rail for free.
Calling /api/v1/buy with nothing named answers 402 quoting the rail's
floor and creates no order โ that is the probe form, safe for crawlers.
Worked example: examples/x402-buy.mjs. Rails, floors and
payable coin pairs: GET /api/public/payment-methods.
A2A
Agent card at /.well-known/agent-card.json,
JSON-RPC message/send at https://blinkcodes.com/a2a. Skills are the two catalog
tools plus buy_product, which over this transport carries the
a2a-x402 payments extension
(https://github.com/google-a2a/a2a-x402/v0.1, declared required: false because
the catalog skills are free).
Quote โ Task in input-required with x402.payment.required; pay โ same
taskId with x402.payment.payload โ Taskcompleted plus the delivery as an
artifact. See examples/a2a.sh.