Cobra en dólares por PayPal o tarjeta desde tu tienda, tu app o tu sistema, y deja que FulaYa entregue el dinero en Cuba: CUP, MLC, Clásica, saldo móvil o efectivo.
Cobra en dólares por PayPal o tarjeta y deja que tu cliente o beneficiario reciba en moneda cubana: CUP por transferencia, MLC, tarjeta Clásica, saldo móvil o efectivo a domicilio.
La API de FulaYa es una API REST con respuestas JSON. Tu servidor crea un cobro (payment_intent) con el importe en USD; FulaYa te devuelve una checkout_url alojada en fulaya.app donde el comprador paga, y se encarga de convertir el neto y entregarlo en la moneda que el beneficiario configuró.
1
Tu servidor
Creas el cobro
POST /store/payment-intents con el importe y tu id de pedido.
2
Tu web o app
Rediriges al checkout
Envías al comprador a la checkout_url que devuelve la API.
3
FulaYa → tu servidor
Recibes el webhook
payment_intent.paid llega firmado cuando el dinero ya entró.
4
Opcional
Consultas el estado
GET /store/payment-intents/{id} cuando quieras confirmarlo.
Tu primer cobro de prueba en cinco minutos, sin mover dinero real.
1
Crea tu cuenta
Regístrate en fulaya.app. Con la cuenta ya puedes trabajar en modo prueba.
2
Configura tu método de cobro
En Panel → Métodos indica dónde recibes la moneda cubana. Sin método, la API responde 409 payout_method_missing al crear cobros.
3
Crea una clave de prueba
En Panel → Desarrollo genera una clave TEST (fy_test_…); ahí mismo crearás la LIVE cuando pases a producción. Copia el secreto en ese momento: no se vuelve a mostrar. Guárdalo como variable de entorno de tu servidor.
Registra un destino en Panel → Desarrollo —sin usar la API key— o por la API de Webhooks, y verás llegar payment_intent.paid firmado. Verifica la firma y marca el pedido como pagado.
Reintenta sin miedo a cobrar dos veces: la misma clave de idempotencia devuelve el mismo cobro.
Envía la cabecera Idempotency-Key (de 1 a 255 caracteres ASCII imprimibles) en POST /store/payment-intents. FulaYa guarda la clave junto con una huella del cuerpo de la petición.
Situación
Resultado
Misma clave y mismo cuerpo
Devuelve el cobro original con la cabecera Idempotent-Replayed: true.
Misma clave y cuerpo distinto
422 idempotency_key_reused.
Clave vacía, demasiado larga o con caracteres no imprimibles
400 idempotency_key_invalid.
El ámbito es por API key y las claves no caducan.
Recomendación: usa el id de tu pedido (pedido-1042). Así un doble clic o un reintento de red nunca crea un segundo cobro.
Las cancelaciones (/cancel) son idempotentes por naturaleza: cancelar dos veces devuelve el mismo cobro cancelado.
Respuesta repetida
HTTP
HTTP/1.1201 Created
Idempotent-Replayed: true
X-Request-Id: req_6sYk2Lw9QeTb
Content-Type: application/json
Códigos HTTP convencionales y un cuerpo de error estable que tu código puede leer.
Cuerpo de error
JSON
{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "amount_usd debe estar entre 1 y 5000.",
"param": "amount_usd"
},
"detail": "amount_usd debe estar entre 1 y 5000.",
"request_id": "req_6sYk2Lw9QeTb"
}
Cada respuesta incluye la cabecera X-Request-Id, igual al campo request_id. Inclúyelo cuando escribas a soporte: nos permite encontrar tu petición al instante. detail repite el mensaje por compatibilidad; programa contra error.code.
type
HTTP
Significado
authentication_error
401
La clave falta, es incorrecta o fue revocada.
permission_error
403
La clave es válida pero no puede hacer esa operación.
invalid_request_error
400 / 404 / 409 / 422
Parámetros, recurso inexistente o estado incompatible.
{ amount, coin_tick, applied_rate }: lo que recibe el beneficiario, en qué moneda y a qué tasa. null hasta que hay cotización; en los eventos de webhook siempre viene el objeto.
Solo pruebas. Recorre los estados intermedios hasta el desenlace pedido y emite los webhooks correspondientes. La respuesta añade simulated_steps con los estados recorridos. Con clave live responde 403 livemode_forbidden.
Cuerpo
Parámetro
Descripción
outcomeenumrequerido
paid, completed, expired, disputed o refund_pending.
Responde 2xx en menos de 10 s. Guarda el evento y procésalo de forma asíncrona.
La entrega es al menos una vez y sin orden garantizado: deduplica por id de evento y, si dudas del estado, consulta GET /store/payment-intents/{id}.
Reintentos ante error o timeout: inmediato, 30 s, 2 min, 10 min, 1 h, 6 h y 24 h.
Si se agotan, el destino queda DEGRADED (verás consecutive_failures y last_failure_at). No se desactiva solo: puedes reenviar entregas a mano con /retry.
Devuelve el secret (whsec_…) una sola vez. Guárdalo en el servidor que recibe los eventos.
Cuerpo
Parámetro
Descripción
urlurlrequerido
HTTPS, puerto 443 y host público. Se rechazan IP privadas, localhost, otros puertos y URL con usuario/contraseña (400 url_not_allowed). El dominio se vuelve a comprobar en cada entrega.
eventsstring
Lista separada por comas, p. ej. payment_intent.paid,payment_intent.completed. Cadena vacía = todos (el destino lo muestra como *).
v1. Sandbox con fy_test_ y /simulate, idempotencia con huella del cuerpo, límites de uso por capas (IP, clave y cuenta), rotación de secretos de webhook con 24 h de solape y listados paginados por cursor.
Al crear una clave de API o usar la API de FulaYa aceptas estos términos, además de los Términos y la Política de privacidad generales de FulaYa. Si integras la API en nombre de una empresa, declaras que puedes obligarla a cumplirlos.
02Uso permitido
Solo puedes usar la API para crear y gestionar cobros, destinos de webhook y consultas de tu propio comercio, siguiendo esta documentación.
03Usos prohibidos
No puedes: usar la API para actividades ilícitas, fraude, lavado de dinero o bienes y servicios prohibidos; revender, sublicenciar o compartir tu acceso o tus claves; hacer scraping de la plataforma o sacar datos fuera de los endpoints documentados; eludir o repartir entre varias claves, cuentas o IP los límites de uso; operar en nombre de terceros sin su autorización expresa y verificable.
04Credenciales y secretos
Eres responsable de guardar de forma segura tus claves de API y los secretos de firma de webhook, y de todo lo que se haga con ellos. Si sospechas que una clave se ha filtrado, revócala o rota el secreto de inmediato desde el panel y avísanos. Debes verificar la firma Fulaya-Signature antes de dar por bueno un webhook.
05Entorno de pruebas
Las claves de prueba (livemode=false) no mueven dinero real, no publican ofertas y no generan obligaciones de pago. Los cobros simulados no tienen valor monetario ni sirven como comprobante.
06Tasas indicativas
Las tasas de cambio y los importes estimados que devuelve la API son orientativos. El importe que se liquida depende de la tasa y las comisiones vigentes cuando se confirma el pago y se ejecuta la oferta P2P, y puede ser distinto del estimado.
07Límites de uso
La API aplica límites por IP, por clave y por cuenta. Si los superas, recibirás respuestas 429. Podemos cambiar estos límites para proteger el servicio.
08Disponibilidad y cambios
La API se ofrece «tal cual» y no garantizamos un nivel de servicio (SLA) ni que funcione sin interrupciones. Los cambios que rompan la compatibilidad de la v1 se anunciarán con antelación razonable por correo o en esta página, salvo los urgentes por seguridad o por obligación legal.
09Suspensión
Podemos limitar, suspender o revocar claves y cuentas, sin aviso previo, si detectamos abuso, riesgo de fraude, incumplimiento de estos términos o un requerimiento de nuestros proveedores o de una autoridad. Mientras se aclare la situación, podemos retener los cobros afectados.
10Protección de datos
Envía solo los datos personales estrictamente necesarios para cada cobro. Nunca envíes números de tarjeta, CVV ni credenciales de PayPal o QvaPay. Si nos transmites datos de tus compradores o beneficiarios, garantizas que tienes base legal para hacerlo y que les has informado. FulaYa trata esos datos según su Política de privacidad.
11Dependencia de terceros
Los cobros dependen de QvaPay y PayPal, y la liquidación depende de que contrapartes P2P acepten las ofertas. El uso de esos servicios se rige además por sus propios términos. FulaYa no responde por sus caídas, bloqueos, retenciones, cambios de condiciones ni por la conducta de las contrapartes P2P.
12Limitación de responsabilidad
En la medida en que la ley lo permita, FulaYa no responde por daños indirectos, lucro cesante ni pérdida de datos derivados del uso de la API. Su responsabilidad total queda limitada a las comisiones que hayas pagado a FulaYa en los [3/12] meses anteriores al hecho.
13Modificación de los términos
Podemos actualizar estos términos. La versión y la fecha vigentes se publican en esta página, y seguir usando la API después del aviso implica aceptar los cambios.
14Contacto
Para consultas, incidentes de seguridad o avisos legales escribe a soporte@fulaya.app.
Versión 1.0 — Prestador: [razón social, forma jurídica y domicilio] — Ley aplicable y fuero: [a definir].