Host-to-Host API
Стройте свою страницу оплаты
REST-методы и вебхуки, подписанные по HMAC. Экраны оплаты вы рисуете сами и сами решаете, в каком порядке они идут. Бэкенд при этом тот же, что у остальных продуктов Paymos.

Как это работает
Три вызова. Ваш интерфейс посередине
Создайте счёт из своего бэкенда, нарисуйте платёжный экран сами, получите подписанное событие, когда платёж подтвердится. Граница остаётся чистой.
- 1
Создайте счёт
POST на /v1/invoices из вашего бэкенда. Передайте сумму, валюту и свой external_order_id. В ответ придут идентификатор счёта и ссылка на оплату.
- 2
Нарисуйте свой интерфейс
Актив и сеть клиент выбирает на вашей стороне, ваш сервер подтверждает выбор — в ответ приходит адрес для перевода. Дальше показывайте адрес, QR и таймер в том виде, как выглядит ваш продукт.
- 3
Получите подписанный вебхук
Когда платёж подтверждается, на ваш эндпоинт приходит POST-событие с подписью HMAC. Проверьте подпись, отметьте заказ оплаченным, верните 200.
Опробуйте каждый вызов до релиза
Интерактивная консоль в панели отправляет запросы в тестовую среду с вашим API-ключом и показывает подпись HMAC, заголовки и ответ.

Создано для контроля
Когда нужен собственный платёжный интерфейс
Для команд, которые собирают свою форму оплаты по API — точно под свой бренд и со связкой со своими системами. Host-to-host нужен, когда не подходит ни одна готовая форма.
Свой экран оплаты
Выбор кошелька, QR-код и обновления статуса рисуете вы. В своей дизайн-системе и своими словами.
Работает с любым сервером
API работает с Node, Python, PHP, Go, Ruby, Java, .NET и любым сервером с поддержкой HTTP. Обязательной клиентской библиотеки нет.
Подписанные вебхуки с повторами
Тело запроса подписано по HMAC. Если обработчик не ответил, доставка повторяется: одиннадцать попыток примерно за шестнадцать часов, с растущей паузой. Дальше событие отправляете заново вручную. Подпись проверяете у себя, дубли — тоже.
Тестовый режим
Тестовый режим рядом с рабочим. Те же эндпоинты, изолированные данные, без реального перевода в блокчейне.
Что вы контролируете
Вы рисуете интерфейс. Мы следим за блокчейном
Всё, что видит клиент, рисует ваш код. Выдача адресов, наблюдение за сетью, глубина подтверждений и расчёт остаются за Paymos.
Ваш интерфейс
Выбор кошелька и сети, адрес, QR-код и статусы оплаты отображаются в вашем интерфейсе.
Ваш поток
Стройте порядок шагов как нужно продукту. Встройте оплату в онбординг, разбейте на экраны, спрячьте за аутентификацией.
Ваш бренд
Paymos не появляется ни в адресе, ни в оформлении для клиента. Платёжная поверхность полностью под вашим брендом.
Ваш расчёт
Выводите на казначейский кошелёк тогда, когда решите: запрос уходит в сеть сразу. Баланс тот же, что и у остальных способов подключения.
Начало работы
Тот же бэкенд, без SDK
Создайте счёт REST-вызовом, опрашивайте статус по таймеру или подпишитесь на вебхук, рисуйте интерфейс как удобно. Восемь официальных серверных SDK, одинаковая схема подписи везде.
Документацияimport { Paymos, externalOrderId } from '@paymos/sdk';
const paymos = new Paymos({
apiKey: process.env.PAYMOS_API_KEY,
apiSecret: process.env.PAYMOS_API_SECRET,
});
const invoice = await paymos.invoices.create({
projectId: 'prj_xxxxxxxxxxxx',
amount: '100.00',
currency: 'USD',
externalOrderId: externalOrderId('order'),
clientId: 'customer-456',
});
console.log(invoice.invoiceId, invoice.paymentUrl);import os
from paymos import Paymos
paymos = Paymos(
api_key=os.environ["PAYMOS_API_KEY"],
api_secret=os.environ["PAYMOS_API_SECRET"],
)
invoice = paymos.invoices.create(
project_id="prj_xxxxxxxxxxxx",
amount="100.00",
currency="USD",
external_order_id="order-123",
client_id="customer-456",
)
print(invoice["invoice_id"], invoice["payment_url"])<?php
use Paymos\Client;
use Paymos\ClientConfig;
use Paymos\IdempotencyKey;
$paymos = new Client(new ClientConfig(
getenv('PAYMOS_API_KEY'),
getenv('PAYMOS_API_SECRET')
));
$invoice = $paymos->invoices()->create(array(
'project_id' => 'prj_xxxxxxxxxxxx',
'amount' => '100.00',
'currency' => 'USD',
'external_order_id' => IdempotencyKey::externalOrderId('order'),
'client_id' => 'customer-456',
));
echo $invoice['invoice_id'] . ' ' . $invoice['payment_url'];package main
import (
"context"
"fmt"
"os"
paymos "github.com/Paymos-labs/go-sdk/v2"
)
func main() {
client, err := paymos.NewClient(os.Getenv("PAYMOS_API_KEY"), os.Getenv("PAYMOS_API_SECRET"))
if err != nil {
panic(err)
}
invoice, err := client.Invoices.Create(context.Background(), paymos.CreateInvoiceParams{
ProjectID: "prj_xxxxxxxxxxxx",
Amount: "100.00",
Currency: "USD",
ExternalOrderID: "order-123",
ClientID: stringPointer("customer-456"),
})
if err != nil {
panic(err)
}
fmt.Println(invoice.InvoiceID, invoice.PaymentURL)
}
func stringPointer(value string) *string { return &value }using Paymos;
using var paymos = new PaymosClient(
Environment.GetEnvironmentVariable("PAYMOS_API_KEY")!,
Environment.GetEnvironmentVariable("PAYMOS_API_SECRET")!);
var invoice = await paymos.Invoices.CreateAsync(new CreateInvoiceRequest(
ProjectId: "prj_xxxxxxxxxxxx",
Amount: "100.00",
Currency: "USD",
ExternalOrderId: "order-123",
ClientId: "customer-456"));
Console.WriteLine($"{invoice.InvoiceId} {invoice.PaymentUrl}");import io.paymos.CreateInvoiceRequest;
import io.paymos.Invoice;
import io.paymos.PaymosClient;
PaymosClient paymos = new PaymosClient(
System.getenv("PAYMOS_API_KEY"),
System.getenv("PAYMOS_API_SECRET"));
Invoice invoice = paymos.invoices.create(
CreateInvoiceRequest.builder()
.projectId("prj_xxxxxxxxxxxx")
.amount("100.00")
.currency("USD")
.externalOrderId("order-123")
.clientId("customer-456")
.build());
System.out.println(invoice.invoiceId() + " " + invoice.paymentUrl());require 'paymos'
paymos = Paymos::Client.new(
api_key: ENV.fetch('PAYMOS_API_KEY'),
api_secret: ENV.fetch('PAYMOS_API_SECRET')
)
invoice = paymos.invoices.create(
project_id: 'prj_xxxxxxxxxxxx',
amount: '100.00',
currency: 'USD',
external_order_id: 'order-123',
client_id: 'customer-456'
)
puts "#{invoice.invoice_id} #{invoice.payment_url}"use paymos::{CreateInvoiceRequest, PaymosClient};
let paymos = PaymosClient::new(
std::env::var("PAYMOS_API_KEY")?,
std::env::var("PAYMOS_API_SECRET")?,
)?;
let invoice = paymos
.invoices()
.create(&CreateInvoiceRequest {
project_id: "prj_xxxxxxxxxxxx".to_owned(),
amount: "100.00".to_owned(),
currency: "USD".to_owned(),
external_order_id: "order-123".to_owned(),
network: None,
allow_multiple_payments: None,
customer_fee_percent: None,
client_id: Some("customer-456".to_owned()),
})
.await?;
println!("{} {}", invoice.invoice_id, invoice.payment_url);Одна схема подписи
HMAC-SHA256 с общим секретом. Та же схема для создания счёта, опроса статуса, вывода, проверки вебхука — единый поток аутентификации.
Для платформ
Несколько проектов в одном аккаунте, API-ключи с ограниченными правами, идемпотентность через external_order_id. Собирайте оплату как удобно — API остаётся тем же.
Кто использует Host-to-Host
Для бизнесов, которые строят остальной стек сами
Для бирж, кастодиальных кошельков и торговых платформ с собственной инженерной командой и отдельным платёжным интерфейсом.
Криптобиржи
Депозиты как часть самого торгового интерфейса, а не редирект на сторонний сайт.
Кастодиальные кошельки
Пополнение прямо внутри кошелька. Без выхода в браузер, без перехода в сторонний процесс.
Торговые платформы
Пополнение маржи, сверка депозитов и расчёты по нескольким счетам строятся на методах REST API.
Платформы со своим экраном оплаты
Продуктовые команды, которым проще собрать экран оплаты самим, чем встроить чужой. Адреса, статус подтверждения и подписанные события приходят из API, а то, что видит пользователь, пишет ваш код.
Тарифы
1,0 % с оплаченного счёта. Enterprise — 0,3 %
Цифры те же, что и на других способах подключения. Enterprise — 0,3 % по запросу: порога по обороту нет, запросить можно в первый день.
Тарифы