Skip to main content

Scopes

Cada API key se genera con uno de estos scopes: WRITE es un superset de READ: cualquier endpoint que acepta READ también acepta WRITE.

El scope SWAP es exacto

SWAP no se hereda de WRITE ni de READ, y tampoco los reemplaza:
  • Una llave WRITE o READ que llama a /swaps/* recibe 403 INSUFFICIENT_SCOPE.
  • Una llave SWAP que llama a cualquier ruta fuera de /swaps/* recibe 403 SCOPE_ROUTE_FORBIDDEN.
  • Solo puedes crear una llave SWAP si Mouv habilitó el servicio de conversión para tu empresa. Si no, la creación responde 403 SWAPS_NOT_ENABLED.
  • Opcionalmente, una llave puede restringirse a una lista de IPs (allowedIps); es recomendado para llaves SWAP. Una petición desde otra IP recibe 403 IP_NOT_ALLOWED. Ver Autenticación.

Permiso adicional: “Gestionar billeteras”

Una llave SWAP puede tener, además, el permiso Gestionar billeteras, que le permite registrar y eliminar billeteras de tu empresa por API (POST y DELETE /swaps/wallets). No es un scope nuevo: es una capacidad adicional del scope SWAP.
  • Solo existe en llaves SWAP; pedirlo con otro scope responde 400 INVALID_SCOPE_COMBINATION.
  • Exige allowedIps (400 IP_ALLOWLIST_REQUIRED si faltan) y que Mouv haya habilitado la función para tu empresa (403 WALLET_API_NOT_ENABLED).
  • Se define al crear la llave, en el dashboard y con 2FA; no se puede agregar después a una llave existente.
  • Máximo 2 llaves vigentes con el permiso por empresa (409 WALLET_API_KEY_LIMIT).
  • Una llave SWAP sin el permiso recibe 403 WALLET_PERMISSION_REQUIRED en el alta y la baja, pero puede listar y consultar billeteras.
Detalle en Conversión COP→USDT y Autenticación.

Tabla de permisos por endpoint

Los endpoints /swaps/* solo aceptan el scope SWAP:

Respuestas de scope insuficiente

Si una llave READ intenta una operación WRITE:

Multi-tenant scope (automático)

Tu API key está bound a UNA cuenta empresarial. Todos los endpoints filtran por tu companyId automáticamente — no podés ver ni operar datos de otras cuentas. Endpoints administrativos globales (/admin/*) usan un middleware de autenticación diferente y rechazan API keys cliente. Esto es defense-in-depth contra privilege escalation.

Multi-sig (firma múltiple)

Si tu empresa configuró multiSigThreshold >= 2, las transferencias salientes vía POST /transfers/send no se dispatchan inmediatamente:
La transacción espera firmas (ADMIN/OPERATOR roles via dashboard) hasta alcanzar el quorum. TTL 24h — si no se firma, expira y revierte automáticamente. API keys NO pueden firmar approvals (defense-in-depth — un actor humano siempre debe verificar). Las firmas se hacen desde el dashboard cliente o admin.

Buenas prácticas

Mínimo privilegio

Generá llaves READ separadas para reporting/observabilidad. Solo usá WRITE en servicios que estrictamente disparan movimientos.

Múltiples llaves por entorno

production-server · staging · local-dev · reporting-bi. Cada una con su label y su scope mínimo necesario.

Rotá cada 90 días

Cero downtime: generá nueva → switch → revocá vieja.

Audit por llave

El campo apiKeyId queda persistido en cada Transaction — podés filtrar el historial por llave para forensics.