Ir al contenido

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.

Construye tu propia página de pago

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. 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. 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. 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.

Tres llamadas. Tu interfaz en medio

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ón
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);

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

Construye hoy tu página de pago sobre la API de Paymos