MMeerPartners docs

Примеры: cURL, Node, Python

Сквозной сценарий интеграции MeerPartners end-to-end: получить трекинг-ссылку, поймать click_id, отправить подписанный postback о конверсии и проверить начисление. Рабочий код.

Эта страница собирает интеграцию в один сквозной сценарий: от трекинг-ссылки до проверки начисления. Код рабочий — подставьте свои key_id, секрет и {API_BASE} (точный домен выдаёт оператор).

Что понадобится

API-ключ со скоупом postback (выпуск — в кабинете), его секрет, базовый URL API {API_BASE} и трекинг-домен ссылки. Подпись считается только на сервере.

Сценарий end-to-end

1) Партнёр берёт трекинг-ссылку на ваш оффер        → /r/{code}
2) Пользователь кликает, попадает к вам с aff_click  → ваш лендинг
3) Вы сохраняете aff_click рядом с заказом            → ваша БД
4) Пользователь покупает → вы шлёте подписанный postback → POST /api/v1/postback
5) Вы проверяете, что начисление создано              → ответ postback / кабинет

Шаг 1. Трекинг-ссылка

Партнёр создаёт ссылку в своём кабинете. Вам как бизнесу отдельно дёргать API не нужно — ссылка имеет вид:

https://go.meerpartners.com/r/a8Kf2?sub1=youtube&sub2=video-42

При клике платформа редиректит пользователя на ваш лендинг и добавляет aff_click:

HTTP/1.1 302 Found
Location: https://your-product.io/promo?sub1=youtube&aff_click=9b1f7c2e-…

Подробнее — Трекинг-ссылки и макросы.

Шаг 2–3. Поймать click_id и привязать к заказу

На лендинге читаете aff_click и сохраняете до оформления заказа.

Браузер: сохранить aff_click
const clickId = new URLSearchParams(location.search).get("aff_click");
if (clickId) localStorage.setItem("aff_click", clickId);
// при оформлении заказа — отправьте clickId на свой бэкенд и запишите в запись заказа

Шаг 4. Отправить подписанный postback

Когда заказ оплачен, ваш бэкенд шлёт конверсию. Ниже — полные, самодостаточные примеры с вычислением HMAC-подписи.

#!/usr/bin/env bash
set -euo pipefail
 
API_BASE="https://api.meerpartners.com"
KEY_ID="key_3f9a1c"
SECRET="sk_live_9f2a…"
 
# ref = пойманный ранее aff_click
BODY='{"external_order_id":"ORD-558123","event_type":"sale","ref":"9b1f7c2e-…","sub_id":"video-42","amount":"19.99","currency":"USD","status":"approved","occurred_at":"2026-06-14T10:15:00Z"}'
 
TS=$(date +%s)
BODY_HASH=$(printf '%s' "$BODY" | openssl dgst -sha256 -hex | awk '{print $NF}')
SIGNING=$(printf '%s\n%s\n%s\n%s' "POST" "/api/v1/postback" "$TS" "$BODY_HASH")
SIG=$(printf '%s' "$SIGNING" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}')
 
curl -sS -X POST "$API_BASE/api/v1/postback" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key-Id: $KEY_ID" \
  -H "X-Timestamp: $TS" \
  -H "X-Signature: $SIG" \
  --data "$BODY"
# → {"accepted":true,"duplicate":false,"conversion_id":7741,"commission":{...}}

Шаг 5. Проверить начисление

В успешном ответе postback уже есть всё нужное:

{
  "accepted": true,
  "duplicate": false,
  "conversion_id": 7741,
  "commission": {
    "id": 7741,
    "amount": "2.50",
    "currency": "USD",
    "status": "pending",
    "hold_until": "2026-06-28T10:15:00Z"
  }
}
  • conversion_id — конверсия создана.
  • commission.status: "pending" — комиссия начислена и ждёт окончания hold-периода.
  • hold_until — когда комиссия станет доступной.

Те же конверсии видны бизнесу в Аналитике, а партнёру — в его статистике и выплатах.

Проверка интеграции до боя

Не дожидайтесь реальной продажи — прогоните тестовый постбэк из кабинета. Он идёт через настоящий флоу и подтверждает, что ключ, подпись и привязка к офферу работают.

Чек-лист корректной интеграции

  • Секрет API-ключа лежит только на бэкенде, не во фронтенде и не в репозитории.
  • Подпись считается по сырым байтам тела; тело сериализуется один раз.
  • Часы сервера синхронизированы (NTP) — иначе POSTBACK_STALE_TIMESTAMP.
  • aff_click ловится на лендинге и сохраняется до оплаты, затем уходит в ref.
  • Ретраи — только на 5xx/таймаут, с backoff; на 2xx и 4xx (кроме replay) — стоп.
  • external_order_id стабилен на повторах — идемпотентность не задвоит начисление.

Что дальше