Developers

API v1.0

Infraestructura.

Todo lo que necesitas para integrar cobros automáticos en Argentina y Brasil con la simplicidad de una sola línea de código.

SDK Oficial (TypeScript)

Nuestra recomendación para Backend: idempotencia automática en cada cobro, errores con hint accionable y verificación criptográfica de webhooks en una línea. Corre en Node 18+, Edge, Workers, Deno y Bun.

npm install @recasmart/sdk

¿Integrás con Claude Code, Cursor o VS Code? Andá a la pestaña Conectar IA (acá arriba): un click genera tu credencial sandbox y te deja el servidor MCP oficial @recasmart/mcp configurado en menos de 2 minutos. También podés apuntar a tu agente a recasmart.online/llms.txt.

Autenticación y Entornos

Ofrecemos dos entornos: Sandbox para pruebas (usando sk_test_...) y Producción (usando sk_live_...). Siempre envía tu API Key en el header `Authorization` de cada llamada.
Importante
Mantén tus llaves de producción a salvo. Nunca las expongas en código frontend público.
Motor de Retenciones
El motor integral de retenciones impositivas (AFIP, IIBB, etc.) está desactivado en Sandbox, y aplica exclusivamente a transacciones simuladas o cobradas en el entorno de Producción real.
curl -H "Authorization: Bearer sk_test_..." \
  https://recasmart.online/api/public/checkouts

Cobrar con PIX

Expande tu negocio a Brasil con una sola línea de código.
Misión Especial: PIX
Usa `currency: BRL` para habilitar automáticamente el flujo de PIX QR dinámico.
curl -X POST "https://recasmart.online/api/public/checkout/create" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 100.00,
    "currency": "BRL",
    "payment_method": "pix",
    "description": "Venda Teste PIX"
  }'

Cobrar con Transferencia (CVU)

Potencia tus ventas en Argentina con Alias Variables dinámicos.
Misión Especial: Argentina
Recibe transferencias de cualquier banco o billetera y concilia automáticamente sin mover un dedo.
Alias: recasmart.pago.x82
CVU: 00000031000... (Variable)

Máquinas y Cajas (POS físico)

Vending, líneas de caja de supermercado, kioscos de autoservicio, dispensers: todo lo que hoy cobra en efectivo. La terminal manda la intención de pago, muestra qr_image en su pantalla y despacha cuando el estado pasa a completed. El mismo código en los 3 países: currency elige el riel.
  • Device keys: cada terminal lleva su key atada a ella (emitida con POST /api/private/pos/:id/device-key). Si una máquina se compromete, revocás esa key sola — la flota sigue cobrando.
  • Un QR vigente por terminal: cada intención nueva expira la anterior; la pantalla nunca muestra un QR viejo cobrable. TTL default 5 minutos.
  • Polling sin key: el estado se consulta en el endpoint público — la máquina no expone credenciales para saber si le pagaron. Alternativa: webhook checkout.completed firmado al backend del operador.
curl -X POST "https://recasmart.online/api/public/pos/POS_ID/checkout" \
  -H "Authorization: Bearer sk_test_DEVICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 12000,
    "currency": "PYG",
    "description": "Coca-Cola 500ml",
    "expires_in_seconds": 300
  }'

Generación Masiva de QRs (B2B Corporativo)

Genera miles de facturas y QRs interoperables de una sola vez sin demoras. Soporta hasta 5000 registros por petición mediante un Array plano o un objeto { invoices: [...] }.
  • Límite Seguro (5000): Si envías más de 5000 facturas en un solo payload, la API retornará HTTP 400 previniendo un colapso en memoria. Fracciona lotes enormes.
  • interoperable_qr_data: Usa este texto *crudo* para renderizar e imprimir el QR final físico en la factura de papel. Lo escaneará nativamente cualquier banco.
  • recasmart_url: Opcionalmente envíales esta URL (Magic Checkout) por email o WhatsApp para pagar de forma digital fácil y segura.
curl -X POST "https://recasmart.online/api/public/invoices/bulk" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '[
      {
        "amount": 15000.00,
        "first_due_date": "2026-04-10T23:59:59Z",
        "currency": "ARS"
      }
  ]'

Crear Checkout (ARG/BRA)

El endpoint de creación genera un objeto `Checkout` que sirve como puerta de entrada al pago.
  • checkout_id: UUID de la orden — usalo para consultar estado o iniciar un intent.
  • payment_url: Redirige a tu cliente a nuestra interfaz de pago.
  • cvu: Alias variable para conciliación vía transferencia/PIX.
  • external_reference: Tu ID interno de orden, devuelto en el webhook al completarse el pago.
import { RecaSmart } from "@recasmart/sdk";

const reca = new RecaSmart(); // lee RECASMART_API_KEY

// Idempotency-Key manejada nativamente por el SDK
const checkout = await reca.checkouts.create({
  amount: 5000,
  currency: "ARS",
  description: "Servicios Digitales",
  external_reference: "ORDER-12345",
});

console.log(checkout.payment_url);

Magic Checkout (UI Embed)

Incrusta nuestra interfaz optimizada para conversión directamente en tu sitio web. Sin redirecciones, sin fricción.
Experiencia de Clase Mundial (DX)
El script magic.js crea un IFRAME seguro superpuesto en tu tienda. Cuando el usuario escanea el QR o el PIX y paga con éxito, nuestro motor en tiempo real detecta el pago instantáneamente y dispara el evento onSuccess en tu frontend.
  • Conversión: El cliente nunca abandona tu sitio.
  • PIX & Transferencias: Generación dinámica de QR en iframe.
<!-- 1. Agrega el script en tu <head> -->
<script src="https://recasmart.online/sdk/js/magic.js"></script>

<!-- 2. Abre el checkout cuando el cliente haga clic en Pagar -->
<script>
  window.RecaSmart.openCheckout({
    checkoutId: "14b1abb3-1458-...", // ID generado en tu backend
    onSuccess: (data) => {
      console.log("¡Pago exitoso!", data);
      window.location.href = "/gracias";
    },
    onClose: () => {
      console.log("El cliente cerró el modal");
    }
  });
</script>

Consultar Transacciones

Lista tus movimientos con filtros avanzados o consulta el detalle de uno en particular.
Parámetros Disponibles
start_date / end_dateFormato YYYY-MM-DD
statusPENDING, COMPLETED, FAILED
curl "https://recasmart.online/api/public/transactions?start_date=2026-01-01&end_date=2026-02-01" \
  -H "Authorization: Bearer sk_live_..."

Consultar Liquidaciones

Accede programáticamente a tus reportes de liquidación y payouts detallados.
Obtén el detalle de recaudación neta, comisiones e impuestos para cada ciclo de pago.
curl "https://recasmart.online/api/public/settlements" \
  -H "Authorization: Bearer sk_live_..."

Plugins & E-commerce

Integra RecaSmart en tus plataformas favoritas sin escribir una sola línea de código utilizando nuestros conectores oficiales.
WooCommerce

Configuración plug-and-play para WordPress.

Tiendanube

Activación instantánea vía OAuth2.

1. Plugin ZIP: recasmart-woo.zip
2. Admin → Plugins → Añadir nuevo
3. Webhook: ?wc-api=recasmart

Suscripciones y Cobros Recurrentes

Automatiza tus cobros sin intervención manual. Ideal para SaaS, membresías, gimnasios, servicios mensuales y cualquier modelo de negocio por suscripción.
Cuándo Usarlo
  • →SaaS y software: cobra la licencia mensual o anual automáticamente.
  • →Membresías y gimnasios: cuota mensual sin que el cliente tenga que recordarla.
  • →Servicios profesionales: honorarios recurrentes por consultoría, seguro, mantenimiento.
  • →Planes a medida: intervalos en días o meses — bimestral, trimestral, anual.
Cómo Funciona
1

Crear un Plan

Define monto, moneda, intervalo (month / day) y período de gracia.

2

Crear la Suscripción

Recibes un checkout_url para el primer pago y un customer_portal_url para que el cliente gestione su suscripción.

3

Ciclos Automáticos

Cada período el sistema genera un nuevo checkout, notifica al cliente por email y dispara el webhook. Si no paga en el período de gracia, la suscripción pasa a past_due.

Estados de la Suscripción

pending

Esperando primer pago

active

Al corriente de pagos

past_due

Pago vencido, en gracia

cancelled

Cancelada

Webhooks de Suscripción
subscription.createdNueva suscripción
subscription.activatedPrimer pago confirmado
subscription.renewedNuevo período generado
subscription.payment_succeededCuota pagada
subscription.payment_failedCuota no cobrada
subscription.past_dueSuscripción atrasada
subscription.cancelledSuscripción cancelada
Portal del Cliente
Cada suscripción incluye una URL de portal donde el cliente puede ver su estado, historial de cobros y pagar cuotas pendientes — sin necesidad de que lo gestiones tú.
curl -X POST "https://recasmart.online/api/public/subscriptions/plans" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Plan Mensual Pro",
    "amount": 5000,
    "currency": "ARS",
    "interval_unit": "month",
    "interval_count": 1,
    "grace_period_days": 3
  }'

Split de Pagos

Cobra el total al cliente y distribuye automáticamente los fondos entre múltiples destinatarios. Ideal para marketplaces, plataformas de servicios, redes de afiliados y cualquier negocio con múltiples beneficiarios.
Casos de Uso
  • →Marketplace: 90% al vendedor, 10% de comisión a la plataforma.
  • →Franquicias: distribuye entre casa central y sucursal automáticamente.
  • →Afiliados: paga comisiones a múltiples referidos en una sola transacción.
Parámetros del Split
destinationCVU o alias de destino
percentagePorcentaje (deben sumar 100%)
descriptionEtiqueta del destinatario
Distribución Instantánea
Los fondos se distribuyen en el momento que el pago se confirma. Cada destinatario recibe su porcentaje directamente en su CVU, sin intervención manual.
curl -X POST "https://recasmart.online/api/public/checkout/create" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10000,
    "currency": "ARS",
    "description": "Compra en marketplace",
    "splits": [
      {
        "destination": "cvu-o-alias-vendedor",
        "percentage": 90,
        "description": "Pago al vendedor"
      },
      {
        "destination": "cvu-o-alias-plataforma",
        "percentage": 10,
        "description": "Comisión plataforma"
      }
    ]
  }'

Webhooks y Validación de Firmas

Por seguridad, nunca debes confiar en peticiones a tu servidor que clamen ser Webhooks sin validarlas criptográficamente. Usa nuestro SDK Oficial Node.js para verificar las firmas usando tu Webhook Secret (`webh_live_...`).
import { constructEvent } from "@recasmart/sdk";
import express from "express";

const app = express();

// ¡OJO! raw body: la firma se calcula sobre los bytes exactos
app.post("/webhook", express.raw({ type: "application/json" }), async (req, res) => {
  try {
    // Valida X-RecaSmart-Signature + ventana anti-replay.
    // Lanza WebhookSignatureError si alguien falsifica la firma.
    const event = await constructEvent(
      req.body.toString("utf8"), // raw body, no parseado
      req.headers,
      process.env.RECASMART_WEBHOOK_SECRET // whsec_... del dashboard
    );

    if (event.type === "checkout.completed") {
      console.log("Cobro Completado:", event.data.checkout_id);
    }

    res.json({ received: true });
  } catch (err) {
    res.status(400).send(`Webhook Error: ${err.message}`);
  }
});

Webhooks — Notificación de Pagos

Recibe notificaciones automáticas cada vez que ocurre un evento importante. Los webhooks son la forma recomendada de saber cuándo un pago fue completado o falló.
Eventos Disponibles

Éxito

checkout.completed

Fallo

checkout.failed

Expirado

checkout.expired

Orden

order.completed

Reembolso

refund.created

Orden Fallo

order.failed

Suscripciones

Creada

subscription.created

Activada

subscription.activated

Renovada

subscription.renewed

Pago OK

subscription.payment_succeeded

Pago Fallo

subscription.payment_failed

Atrasada

subscription.past_due

Cancelada

subscription.cancelled

Campos del Payload
checkout_idID del checkout
transaction_idID de la transacción
statusCOMPLETED / FAILED
amountMonto cobrado
currencyARS / BRL
external_referenceTu ID de orden
paid_atFecha de pago (ISO 8601)
Reintentos Automáticos

Si tu servidor no responde con código 2xx, reintentamos automáticamente:

1 min → 2 min → 4 min → 1 hora (máx. 4 intentos en 72hs)

{
  "type": "checkout.completed",
  "data": {
    "checkout_id": "14b1abb3-1458-4f3d-8740-83e457a4596e",
    "transaction_id": "a3f8c2d1-9b7e-4f3a-bc21-5d8e1f2a9c4b",
    "status": "COMPLETED",
    "amount": 5000,
    "currency": "ARS",
    "external_reference": "ORDER-12345",
    "paid_at": "2026-02-19T12:00:00Z"
  },
  "timestamp": "2026-02-19T12:00:01Z"
}

Verificar Firma HMAC

Cada webhook incluye una firma HMAC-SHA256 para que puedas verificar que fue realmente enviado por RecaSmart y no por un atacante.
Headers de Seguridad
X-RecaSmart-Signaturesha256=firma_hmac
X-RecaSmart-TimestampUnix timestamp
Webhook Secret
Tu clave secreta para verificar webhooks está en la sección API Keys → Webhook Secret (acá mismo): podés verla, copiarla y rotarla. Se genera automáticamente al crear tu primera API key. Nunca la expongas en tu frontend.
Best Practices
  • Siempre verifica la firma antes de procesar el webhook
  • Rechaza timestamps mayores a 5 minutos para prevenir replay attacks
  • Responde con 200 OK rápidamente, procesa async si es necesario
  • Tu endpoint debe ser idempotente (puede recibir el mismo evento 2+ veces)
const crypto = require("crypto");

function verifyWebhook(req, webhookSecret) {
  const signature = req.headers["x-recasmart-signature"];
  const timestamp = req.headers["x-recasmart-timestamp"];
  const body = JSON.stringify(req.body);

  // 1. Verificar que el timestamp no sea viejo (5 min)
  const age = Math.floor(Date.now() / 1000) - parseInt(timestamp);
  if (age > 300) return false;

  // 2. Calcular firma esperada
  const signedPayload = `${timestamp}.${body}`;
  const expected = crypto
    .createHmac("sha256", webhookSecret)
    .update(signedPayload)
    .digest("hex");

  // 3. Comparar
  const received = signature.replace("sha256=", "");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(received)
  );
}

Idempotency Keys (Nivel Enterprise)

Prevé cobros duplicados en caso de fallas de red. Si tu servidor se desconecta esperando la respuesta de nuestra API, puedes reintentar la llamada enviando la misma Idempotency-Key.
Recuperaremos automáticamente el checkout_id original generado hace 24 horas y te devolveremos un Copia exacto de la primera respuesta exitosa, garantizando que el usuario no pague dos veces.
curl -X POST "https://recasmart.online/api/public/checkout/create" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: idm_8f29c1b3d..." \
  -H "Content-Type: application/json" \
  -d '{"amount": 5000, "currency": "ARS"}'

SDK Frontend: useCheckoutStatus (React)

Ofrecemos soporte nativo para **Supabase Realtime**. Descarga nuestro SDK de React, pásale las credenciales públicas de tu Supabase y escucha transferencias bancarias y pagos de PIX en tiempo real vía WebSockets.
import { useCheckoutStatus } from "./recasmart/sdk";

function StatusPantalla({ checkoutId }) {
  const { status, isPaid, isLoading } = useCheckoutStatus(
    "TU_SUPABASE_URL",
    "TU_SUPABASE_ANON_KEY",
    checkoutId
  );

  if (isLoading) return <p>Cargando websocket...</p>;

  if (isPaid) {
    return <p>✅ ¡Pago Completado al instante!</p>;
  }

  return <p>⏳ Esperando que escanees el QR...</p>;
}

Manejo de Errores

Todas las respuestas de error siguen el mismo formato:
{ "status": false, "code": 401, "message": "..." }
400 Bad RequestParámetros faltantes o inválidos
401 UnauthorizedAPI Key inválido o revocado
404 Not FoundRecurso no encontrado