Skip to content

Products and mall

Partners create products and plans in the console under Products, or via the API. Each SKU has a stable public_id. The Mini App opens with startapp=mp_{public_id}.

The TonRamp mall only lists SKUs the partner opted in (listed=true), TonRamp approved, inside the listing window, with stock.

GET/POST/PATCH /v1/partner/products and /v2/partner/products accept the console JWT or an API key tonr_… in Authorization: Bearer.

Creates the SKU. listed defaults to false. Asking for the mall does not approve it.

Janela do terminal
curl -X POST https://api.tonramp.io/v2/partner/products \
-H "Authorization: Bearer tonr_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Pack 100",
"amount": 10,
"listed": true,
"category": "games",
"slug": "gold-pack"
}'

The response includes telegram_link, deep_link (/p/{public_id}), store_url (uses slug in the store if you set one) and startapp.

Field Type Required Description
title string Yes Name, up to 120 characters
amount number Yes Price in USDT (minimum about BRL 20)
listed bool No Ask for the TonRamp mall. Default false
category string No Mall filter, up to 64 characters
slug string No Store URL (a-z, 0-9, hyphen). 3–80 characters. Cannot be a public_id
kind string No product (one-shot) or plan (reminder, no auto-debit)
stock number No Integer. Empty = unlimited. 0 sells out

PATCH /v2/partner/products/{id} updates the same fields. Changing title, amount or image while listed returns the SKU to pending.

GET /v1/partner/products and GET /v2/partner/products list the account SKUs.

Public mall catalog. No auth.

Query:

Param Description
q Search title and description
category Exact category (case-insensitive)
limit Up to 50
offset Pagination

GET /v2/marketplace/categories returns categories currently in the mall.

GET /v1/marketplace/products is the same catalog (v1). GET /v2/store/products/{public_id_or_slug} is the store PDP, even off the mall, if the SKU is active.

The Mini App pays with POST /v1/marketplace/products/{public_id}/checkout (Telegram JWT). The TRP payload stores product_id on the transaction. Orders with extra fields (character, qty) still go through POST /v1/wallet/trp/generate.