Saltar al contenido
DocumentaciónBeta de prueba

El contrato actual del sandbox.

Reglas concretas para revisar la implementación autenticada. Todos los importes son dinero ficticio en MXN.

Entorno y autenticación

GET /api/sandbox y POST /api/sandbox requieren la identidad autenticada de la app. El servidor deriva el dueño de la sesión; el cliente no elige un propietario ni un identificador de usuario. No hay API keys comerciales ni OAuth para integradores. La vinculación de iPhone emite un acceso de dispositivo limitado a la cuenta de pruebas que lo aprueba. Sin identidad, la API responde 401.

La demo pública de este sitio utiliza memoria temporal independiente y no llama a estos endpoints. La app iOS puede vincularse mediante un código temporal aprobado en /app/devices. Después consulta y opera la misma cuenta mediante /api/device/sandbox. Su demo local permanece separada y no se importa al servidor.

Importes y respuesta

Usa centavos enteros positivos, hasta 100,000,000 por operación: 45000 representa MXN 450.00. Un resultado exitoso devuelve { "state": SandboxState }. Los errores devuelven { "error": "mensaje", "code": "ERROR_CODE" }. Las respuestas privadas no se cachean.

Crear un cobro de prueba

Este ejemplo se ejecuta desde la aplicación autenticada, en su mismo origen. Lee primero GET /api/sandbox y envía su accountId en la cabecera X-Plasma-Account; si tu sesión cambia, la operación responde SESSION_CHANGED sin afectar otra cuenta. La documentación es informativa; este botón solo copia texto y no cobra.

const response = await fetch('/api/sandbox', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    action: 'charge',
    payload: {
      amount: 45000,
      customer: 'Cliente de prueba',
      method: 'card',
      description: 'Pedido de prueba'
    },
    idempotencyKey: 'demo-charge-001',
    mode: 'sandbox'
  })
});
const result = await response.json();

Idempotencia

Cada nueva operación necesita una clave de 8–128 caracteres de [A-Za-z0-9_.:-]. Repetir clave y contenido devuelve el estado persistido con replayed: true, sin repetir el efecto. La misma clave con otro contenido devuelve 409 IDEMPOTENCY_CONFLICT. Un conflicto de concurrencia devuelve 409 CONCURRENT_UPDATE; actualiza el estado y reintenta con la misma clave.

Acciones disponibles

AcciónCampos del payload
chargeamount, customer, method, description
chargeCartitems[{productId, quantity}], customer, method
refundtransactionId, amount
createLinktitle, amount
toggleLink / payLinkid
transferamount, recipient, clabe
walletTransferamount, recipient
billPayamount, service, reference
topUpamount, phone
createCustomername, email, phone
createProductname, price, stock, category
createSubscriptioncustomer, plan, amount
toggleSubscriptionid
resolveDisputeid
submitKyclegalName, rfc
toggleCardObjeto vacío
updateSettingsbusinessName, email, notifications

Los métodos de charge son card, spei, qr, link y wallet, todos simulados. chargeCart calcula el importe con el catálogo guardado: no acepta precios o totales del cliente. payLink pertenece al comercio autenticado y no implementa un checkout público.

Límites y errores

Los cuerpos de petición están limitados a 64 KiB y deben usar application/json. Campos desconocidos, credenciales y datos de tarjetas son rechazados. mode solo acepta sandbox; ningún flag habilita dinero real.

Las mutaciones usan almacenamiento atómico, control de versión y registros balanceados. Un incumplimiento del ledger falla con LEDGER_INVARIANT; la capacidad del estado agregado falla con SANDBOX_CAPACITY. Estos controles pertenecen al sandbox y no certifican respaldo externo, carga de producción o resiliencia de una institución financiera.

Próxima integración

API externa versionada, scopes, claves, webhooks durables, SDKs, proveedores y conciliación son trabajo pendiente. Los contratos de acquiring, payouts, issuer, lending e inversión no equivalen a acuerdos comerciales o capacidades activas.

Tu siguiente venta,
con más contexto.

Explora el producto con datos ficticios y sin registro.

Explorar demo