API Host-to-Host
Construye tu propia página de pago
Primitivas REST puras y webhooks firmados con HMAC. Pon tu frontend, pinta tu propio flujo de pago y controla cada parte de la experiencia. El mismo backend de Paymos, con la superficie entera en tus manos.

Cómo funciona
Tres llamadas. Tu interfaz en medio
Crea la factura desde tu backend, pinta tú la superficie de pago y recibe un evento firmado cuando el pago se confirme. La frontera queda limpia.
- 1
Crea la factura
Un POST a /v1/invoices desde tu backend. Pasas el importe, la moneda y tu propio identificador de pedido. Recibes el id de la factura y su URL de pago.
- 2
Pinta tu propia interfaz
Recoges el token y la red por tu lado y los confirmas desde tu servidor: esa llamada devuelve la dirección de depósito. Muéstrala, con el QR y el temporizador, con la cara que tenga tu producto.
- 3
Recibe el webhook firmado
Paymos hace POST de un evento firmado con HMAC a tu endpoint cuando el pago se confirma. Verificas la firma, marcas el pedido como pagado y devuelves 200.
Prueba cada llamada antes de publicar
El Playground del panel lanza peticiones reales de Sandbox con tu clave de prueba. Eliges el endpoint, rellenas los parámetros y pulsas Enviar: ves la firma HMAC en vivo, las cabeceras y la respuesta. Sin Postman, sin curl y sin copiar y pegar de la documentación.

Control de la interfaz
Cuando la página alojada se te queda corta
Para equipos que construyen su propio formulario de pago sobre la API, calcado a su marca y conectado a sus sistemas. Host-to-host es lo que eliges cuando ninguna superficie lista encaja.
Control total de la superficie
El selector de billetera, el QR y los avisos de estado los pintas tú. Tu sistema de diseño, tu lenguaje de interacción, tu marca.
Nativo en cualquier stack
Node, Python, PHP, Go, Ruby, Java, .NET: cualquier cosa que hable HTTP funciona. Sin atarte a un SDK.
Webhooks firmados con reintentos
Cargas firmadas con HMAC, entrega al menos una vez y reintentos con espera creciente. Verificas de tu lado, deduplicas de tu lado.
Entorno Sandbox
El modo de prueba vive al lado de producción. Mismos endpoints, datos aislados y ni un céntimo real en movimiento.
Qué controlas
Tú pintas la interfaz. Nosotros vigilamos la cadena
La frontera está clara: tu frontend se encarga de cada píxel que ve el cliente. Nuestra infraestructura se encarga de derivar direcciones, vigilar la cadena, medir la profundidad de confirmación y liquidar.
Tu interfaz
Selector de billetera, selector de red, dirección en pantalla, generación del QR y avisos de estado: los diseñas tú.
Tu flujo
Ordena los pasos como pida tu producto. Mete el pago dentro del alta, repártelo en varias pantallas o ponlo detrás de una autenticación.
Tu marca
Paymos no aparece ni en la URL ni en el marco visual del cliente. La superficie de pago es tuya de principio a fin.
Tu liquidación
Retira a la billetera de tu tesorería cuando te venga bien. El mismo libro de saldos donde liquida cualquier otra superficie de Paymos.
Empezar
Mismo backend, ningún SDK que aprender
Crea la factura por REST, consulta los cambios de estado o suscríbete a los webhooks y pinta la interfaz que encaje. Nueve ejemplos de lenguaje en la documentación y el mismo esquema de firma en todos los endpoints.
Ver la documentaciónimport { 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);Un solo esquema de firma
HMAC-SHA256 con un secreto compartido. El mismo esquema para crear facturas, consultar estados, retirar y verificar webhooks: una sola tubería de autenticación que mantener.
Integración de plataforma
Cuentas con varios proyectos, claves de API acotadas y creación idempotente de facturas por external_order_id. Construye el pago a tu manera: la API no cambia.
Quién usa Host-to-Host
Para productos con su propia interfaz de pago
Allí donde la interfaz alojada se queda estrecha y el negocio tiene equipo para construir la suya. Exchanges de cripto, billeteras con custodia, plataformas de trading y rampas de entrada.
Exchanges de cripto
Los depósitos son parte nativa de tu interfaz de trading, no una redirección a un tercero.
Billeteras con custodia
Flujos de recarga que viven enteros dentro de tu aplicación. Sin saltar al navegador y sin pasos fuera de tu proceso.
Plataformas de trading
Recargas de margen, conciliación de depósitos y liquidación entre varias cuentas, todo con las mismas primitivas REST.
Plataformas con su propio frontend
Equipos de producto que prefieren construir la pantalla de pago antes que incrustar una. Las direcciones, el estado de confirmación y los eventos firmados salen de la API; lo que mira el usuario lo escribe tu propio código.
Precios
1,0 % por factura liquidada, 0,3 % en Enterprise
Los dos mismos números que en cualquier otra superficie de Paymos. El 0,3 % se pide desde el primer día: cuentan el volumen y las redes por las que cobras.
Ver precios