Skip to content

API бирж 📝

Введение

API бирж — это основной поверхностный слой свопов p3p. Используйте его для обнаружения того, что можно торговать, получения лучшей котировки по каждому агрегированному источнику ликвидности, фиксации этой котировки в on-chain свопе и отслеживания его до завершения.

Все эндпоинты ниже требуют заголовок разработчика api-key. Зарегистрируйтесь как партнёр на p3p.xyz, чтобы его получить.

http
api-key: YOUR_P3P_API_KEY

Эндпоинты


1. Получить сети

GET /chains требуется api-key

Возвращает каждую сеть, активную в данный момент на p3p.

bash
curl https://api.p3p.xyz/chains \
  -H "api-key: YOUR_P3P_API_KEY"
ts
const chains = await fetch("https://api.p3p.xyz/chains", {
  headers: { "api-key": "YOUR_P3P_API_KEY" },
}).then((r) => r.json());
json
{
  "status": 200,
  "message": "ok",
  "data": [
    {
      "id": 0,
      "key": "btc",
      "name": "Bitcoin",
      "display": "BTC Chain",
      "color": "#F7931A",
      "logo": "",
      "icon": "token:btc",
      "explorer": {
        "address": "https://mempool.space/address/%s",
        "tx": "https://mempool.space/tx/%s"
      },
      "website": "https://bitcoin.org",
      "vm": "BVM",
      "validation": [
        "^(1[1-9A-HJ-NP-Za-km-z]{25,34}|3[1-9A-HJ-NP-Za-km-z]{25,34}|bc1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{8,87})$"
      ],
      "defaults": ["btc"],
      "tags": ["bitcoin", "btc", "xbt", "satoshi"],
      "enabled": true
    },
    {
      "id": 1,
      "key": "eth",
      "name": "Ethereum",
      "display": "ETH Chain",
      "color": "#627EEA",
      "logo": "",
      "icon": "token:eth",
      "explorer": {
        "address": "https://etherscan.io/address/%s",
        "tx": "https://etherscan.io/tx/%s"
      },
      "website": "https://ethereum.org",
      "vm": "EVM",
      "validation": [
        "^(0x)[0-9A-Fa-f]{40}$"
      ],
      "defaults": ["eth", "usdt", "usdc", "dai"],
      "tags": ["ethereum", "eth", "eht", "vitalik"],
      "enabled": true
    }
  ]
}

2. Получить токены

GET /tokens требуется api-key

Возвращает активные токены, сгруппированные по сетям.

bash
curl https://api.p3p.xyz/tokens \
  -H "api-key: YOUR_P3P_API_KEY"
json
{
  "eth": [
    { "key": "eth", "name": "Ether", "symbol": "ETH", "decimals": 18, "rate": "3421.8", "address": "", "native": true, "enabled": true },
    { "key": "usdt", "name": "Tether", "symbol": "USDT", "decimals": 6, "rate": "1.0", "address": "0xdac17f958d2ee523a2206206994597c13d831ec7", "native": false, "enabled": true }
  ],
  "ton": [
    { "key": "ton", "name": "Toncoin", "symbol": "TON", "decimals": 9, "rate": "5.23", "address": "", "native": true, "enabled": true },
    { "key": "usdt", "name": "USDT (TON)", "symbol": "USDT", "decimals": 6, "rate": "1.0", "address": "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", "native": false, "enabled": true }
  ]
}

3. Получить курсы

GET /rates требуется api-key

Возвращает актуальные рыночные референсные курсы для каждого поддерживаемого актива, полученные из on-chain оракулов.

bash
curl https://api.p3p.xyz/rates \
  -H "api-key: YOUR_P3P_API_KEY"
json
{
  "btc": 98234.56,
  "eth": 3421.8,
  "ton": 5.23,
  "usdt": 1.0,
  "usdc": 1.0,
  "sol": 142.35
}

4. Котировка курса биржи

POST /exchange/rate требуется api-key

Агрегирует курсы из каждого активного источника ликвидности и возвращает лучший (или все).

Тело

ПолеТипОбязательноОписание
chain_fromstringдаКлюч исходной сети
token_fromstringдаКлюч исходного токена
amount_fromstringдаСумма в отображаемых единицах
chain_tostringдаКлюч целевой сети
token_tostringдаКлюч целевого токена
opts.bestbooleanнетСортировать по лучшему курсу (по умолчанию)
opts.fastestbooleanнетСортировать по самому быстрому курсу вместо лучшего
opts.partner_idstringнетВаш партнёрский ID или зарегистрированный кошелёк (зарабатывайте доход)
bash
curl -X POST https://api.p3p.xyz/exchange/rate \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_P3P_API_KEY" \
  -d '{
    "chain_from": "eth",
    "token_from": "eth",
    "amount_from": "0.1",
    "chain_to": "ton",
    "token_to": "ton",
    "opts": { "best": true }
  }'
ts
const rate = await fetch("https://api.p3p.xyz/exchange/rate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "api-key": "YOUR_P3P_API_KEY",
  },
  body: JSON.stringify({
    chain_from: "eth",
    token_from: "eth",
    amount_from: "0.1",
    chain_to: "ton",
    token_to: "ton",
    opts: { best: true },
  }),
}).then((r) => r.json());
json
{
  "type": "crypto",
  "path_from": "eth.eth",
  "path_to": "ton.ton",
  "amount_from": "0.1",
  "amount_to": "342.18",
  "direction": "exact_input",
  "amount_from_unit": 0.1,
  "amount_to_unit": 342.18,
  "rate": "3421.8",
  "impact": "0.01",
  "duration": 90,
  "boosted": false
}

5. Создать обмен

POST /exchange/create требуется api-key

Зафиксируйте курс, создайте обмен и получите адрес депозита.

Тело

ПолеТипОбязательноОписание
chain_fromstringдаКлюч исходной сети
token_fromstringдаКлюч исходного токена
amount_fromstringдаСумма в отображаемых единицах
chain_tostringдаКлюч целевой сети
token_tostringдаКлюч целевого токена
wallet_tostringдаАдрес получателя в целевой сети
wallet_refundstringнетАдрес возврата, если своп не может завершиться
wallet_fromstringнетИсходный адрес пользователя (некоторые сети это требуют)
opts.bestbooleanнетСортировать по лучшему курсу (по умолчанию)
opts.fastestbooleanнетСортировать по самому быстрому курсу вместо лучшего
opts.partner_idstringнетВаш партнёрский ID или зарегистрированный кошелёк (зарабатывайте доход)
bash
curl -X POST https://api.p3p.xyz/exchange/create \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_P3P_API_KEY" \
  -d '{
    "chain_from": "eth", "token_from": "eth", "amount_from": "0.1",
    "chain_to":   "ton", "token_to":   "ton",
    "wallet_to":     "UQAbc...XYZ",
    "wallet_refund": "0xRefund...address",
    "opts": { "partner_id": "P3_YOURPARTNERID" }
  }'
ts
const exchange = await fetch("https://api.p3p.xyz/exchange/create", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "api-key": "YOUR_P3P_API_KEY",
  },
  body: JSON.stringify({
    chain_from: "eth",
    token_from: "eth",
    amount_from: "0.1",
    chain_to: "ton",
    token_to: "ton",
    wallet_to: "UQAbc...XYZ",
    wallet_refund: "0xRefund...address",
    opts: { partner_id: "P3_YOURPARTNERID" }, 
  }),
}).then((r) => r.json());
json
{
  "created_at": "2026-05-24T10:30:00Z",
  "id": "ex_8f4c2a...",
  "type": "crypto",
  "chain_from": "eth",
  "token_from": "eth",
  "amount_from": "0.1",
  "chain_to": "ton",
  "token_to": "ton",
  "amount_to": "342.18",
  "amount_to_unit": 342.18,
  "wallet_refund": "0xRefund...address",
  "wallet_from": "",
  "wallet_to": "UQAbc...XYZ",
  "deposit_address": "0xDepositAddressGeneratedForYou",
  "rate": "3421.8",
  "impact": "0.01",
  "duration": 90
}

Для партнёрских обменов (при использовании заголовка api-key): Ответ возвращает hash вместо id:

json
{
  "created_at": "2026-05-24T10:30:00Z",
  "hash": "A7K2M9X5B3C1D8F4",
  "type": "crypto",
  "chain_from": "eth",
  "token_from": "eth",
  "amount_from": "0.1",
  "chain_to": "ton",
  "token_to": "ton",
  "amount_to": "342.18",
  "amount_to_unit": 342.18,
  "wallet_to": "UQAbc...XYZ",
  "deposit_address": "0xDepositAddressGeneratedForYou",
  "rate": "3421.8",
  "impact": "0.01",
  "duration": 90
}

Отправьте amount_from от token_from со своего кошелька на deposit_address, чтобы запустить своп. Отслеживайте прогресс с помощью Проверить статус обмена ниже.

Партнёрские обмены являются приватными

Партнёрские обмены (идентифицируемые по hash) доступны только при передаче hash как ID с заголовком api-key. Они не могут быть запрошены по обычному ID транзакции.

Окно депозита

Депозит должен точно соответствовать amount_from и прибыть в течение ~6 минут. После таймаута вы можете повторить попытку с ?bump=true на эндпоинте статуса.


6. Проверить статус обмена

GET /check/:txId требуется api-key

Получите текущее состояние одного обмена или инвойса.

ПараметрТипОписание
bumpbooleanЕсли true, повторяет застопорившийся/просроченный обмен
bash
curl https://api.p3p.xyz/check/ex_8f4c2a... \
  -H "api-key: YOUR_P3P_API_KEY"
json
{
  "id": "ex_8f4c2a...",
  "created_at": "2026-05-24T10:30:00Z",
  "status": "exchanging",
  "type": "internal",
  "invoice": false,
  "chain_from": "eth",
  "token_from": "eth",
  "amount_from": "0.1",
  "chain_to": "ton",
  "token_to": "ton",
  "amount_to": "342.18",
  "amount_to_unit": 342.18,
  "wallet_to": "UQAbc...XYZ",
  "deposit_address": "0xDepositAddressGeneratedForYou",
  "checkpoint": 3,
  "checkpoints": 5
}

Значения статуса

СтатусЗначение
newОжидание депозита пользователя
depositedДепозит обнаружен, подготовка своп-операции
processingСвоп отправлен в источник ликвидности, ожидание подтверждения
exchangingСвоп подтверждён, средства обмениваются
completeГотово — получатель получил средства
timeoutОкно депозита истекло; вызовите с ?bump=true для сброса и повтора
errorОбмен завершился ошибкой; вызовите с ?bump=true для повтора
expiredОбмен истёк и больше не может быть повторён

Bump-повтор

Если сделка истекает (депозит не обнаружен в течение окна депозита), снова вызовите эндпоинт с ?bump=true, чтобы сбросить окно:

bash
curl "https://api.p3p.xyz/check/ex_8f4c2a...?bump=true" \
  -H "api-key: YOUR_P3P_API_KEY"

Партнёрские обмены (созданные с заголовком api-key) можно запрашивать, передав hash как ID. Если заголовок api-key присутствует, система автоматически пытается сопоставить его как hash в первую очередь:

bash
# Использование api-key партнёра — поиск по hash
curl https://api.p3p.xyz/check/A7K2M9X5B3C1D8F4 \
  -H "api-key: YOUR_PARTNER_API_KEY"
json
{
  "hash": "A7K2M9X5B3C1D8F4",
  "created_at": "2026-05-24T10:30:00Z",
  "status": "complete",
  "type": "internal",
  "invoice": false,
  "chain_from": "eth",
  "token_from": "eth",
  "amount_from": "0.1",
  "chain_to": "ton",
  "token_to": "ton",
  "amount_to": "342.18",
  "amount_to_unit": 342.18,
  "wallet_to": "UQAbc...XYZ",
  "deposit_address": "0xDepositAddressGeneratedForYou",
  "checkpoint": 5,
  "checkpoints": 5
}

Формат hash

По умолчанию hash-цепочки состоят из 40 альфанумерных символов (a-z, A-Z, 0-9). Партнёры могут настроить формат через Партнёрскую панель управления.


7. Проверить несколько обменов

POST /check требуется api-key

Проверьте несколько сделок одним вызовом.

Тело

ПолеТипОбязательноОписание
hashesstring[]даМассив ID обменов
bash
curl -X POST https://api.p3p.xyz/check \
  -H "Content-Type: application/json" \
  -H "api-key: YOUR_P3P_API_KEY" \
  -d '{ "hashes": ["ex_8f4c2a...", "ex_aa11bb..."] }'

Возвращает массив сжатых объектов статуса обмена:

json
[
  {
    "hash": "ex_8f4c2a...",
    "status": "complete",
    "type": "crypto",
    "invoice": false,
    "chain_from": "eth",
    "token_from": "eth",
    "amount_from": "0.1",
    "chain_to": "ton",
    "token_to": "ton",
    "amount_to": "342.18",
    "checkpoint": 4,
    "checkpoints": 4
  },
  {
    "hash": "A7K2M9X5B3C1D8F4",
    "status": "exchanging",
    "type": "crypto",
    "invoice": false,
    "chain_from": "ton",
    "token_from": "usdt",
    "amount_from": "100",
    "chain_to": "eth",
    "token_to": "usdc",
    "amount_to": "99.5",
    "checkpoint": 2,
    "checkpoints": 4
  }
]