Claves de API del Merchant

Enumera, crea y revoca las claves de API de un Merchant desde el Tokeflow Dashboard, y descubre qué scopes puede llevar cada tipo de clave.

Estos endpoints impulsan la pantalla de claves de API del Tokeflow Dashboard para un Merchant: enumerar las claves existentes, generar una nueva, consultar qué scopes puede llevar y revocar una clave que ya no deba funcionar. Las claves que gestionan son las mismas credenciales sk_… (secreta) y pk_… (pública) que tu integración presenta a la API pública — el Dashboard es simplemente la forma amigable de gestionarlas.

Las claves secretas otorgan acceso del lado del servidor y pertenecen a un gestor de secretos; las claves públicas son seguras para el cliente y están restringidas a lo que el Bridge SDK necesita en el navegador. Consulta Autenticación para conocer el modelo completo y Entornos y claves de API para saber cómo las claves codifican el entorno y la entidad en su prefijo.

Estos endpoints impulsan la interfaz del Tokeflow Dashboard. Se autentican por sesión (JWT bearer) — el token proviene de iniciar sesión en el Dashboard, no de una clave de API sk_/pk_. Toda solicitud también debe llevar el header x-merchant-id, que identifica al Merchant cuyas claves se están gestionando; el usuario con sesión iniciada debe ser miembro con acceso a ese Merchant. Para gestionar claves mediante programación desde tu backend, usa los endpoints públicos de claves de API.

Cómo funciona el flujo de la pantalla de claves

El endpoint de scopes alimenta el formulario de creación de claves: devuelve solo los scopes válidos para este Merchant y el tipo de clave elegido, de modo que el usuario nunca pueda seleccionar un scope que la clave no pudiera llevar. Después de la creación, la clave completa nunca se vuelve a mostrar — la lista identifica cada clave únicamente por su key_prefix.

El objeto de la clave de API

Se devuelve en la creación; el endpoint de listado devuelve el mismo objeto sin el secreto api_key, exclusivo de la creación.

FieldTypeDescription
idstringIdentificador único de la clave de API, con el prefijo ak_.
entity_typestringTipo de entidad a la que pertenece la clave — organization o merchant. Las claves creadas en esta superficie pertenecen a un merchant.
entity_idstringID de la entidad propietaria (mrc_… para claves de Merchant).
namestringNombre legible para la clave.
key_prefixstringPrefijo no secreto de la clave, usado para identificarla (p. ej., sk_live_mer_7d21). Es la única parte de la clave que se muestra después de la creación.
scopesarrayScopes (permisos) otorgados a la clave.
allowed_ipsarray | nullDirecciones IP y rangos CIDR autorizados para usar la clave. null cuando la clave no tiene restricciones.
is_activebooleanIndica si la clave está activa. Las solicitudes con una clave inactiva fallan la autenticación.
expires_atstring | nullFecha de expiración (ISO 8601 UTC), o null si la clave nunca expira.
last_used_atstring | nullÚltima vez que se usó la clave, o null si nunca se ha usado.
created_atstringMarca de tiempo de creación (ISO 8601 UTC).
api_keystringLa clave de API real. Solo se devuelve en la creación.
key_hashstringHash del material de la clave, usado del lado del servidor para verificación. No es una credencial — no se puede usar para autenticar.

last_used_at es la mejor señal del Dashboard sobre si una clave realmente está en uso. Antes de revocar una clave que parece inactiva, verifica que su last_used_at no se haya actualizado recientemente — un nombre desactualizado no garantiza que la clave lo esté.


Endpoints

GET/api/v1/merchant/api-keys

Merchant

Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.

Devuelve una lista paginada de las claves de API del Merchant — el Merchant se obtiene del header x-merchant-id.

Parámetros de consulta

FieldTypeRequiredDescription
pagenumberNoNúmero de página, indexado desde 1 (predeterminado 1, mín. 1).
limitnumberNoElementos por página (predeterminado 20, mín. 1, máx. 100).

Ejemplo de solicitud

curl -G https://api.tokeflow.com/api/v1/merchant/api-keys \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
  -H "x-merchant-id: mrc_8a3f12d9" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Ejemplo de respuesta — 200 OK

{
  "data": [
    {
      "id": "ak_9f2e6c81",
      "entity_type": "merchant",
      "entity_id": "mrc_8a3f12d9",
      "name": "Checkout service (production)",
      "key_prefix": "sk_live_mer_7d21",
      "scopes": ["transactions:read", "transactions:write"],
      "allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
      "is_active": true,
      "expires_at": null,
      "last_used_at": "2026-08-11T18:22:04.000Z",
      "created_at": "2026-03-02T09:15:00.000Z"
    },
    {
      "id": "ak_5b0d3a47",
      "entity_type": "merchant",
      "entity_id": "mrc_8a3f12d9",
      "name": "Storefront widget",
      "key_prefix": "pk_live_mer_0c1d",
      "scopes": ["tokens:read"],
      "allowed_ips": null,
      "is_active": false,
      "expires_at": "2026-12-31T23:59:59.000Z",
      "last_used_at": "2026-07-30T10:41:52.000Z",
      "created_at": "2026-01-20T16:00:00.000Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 2,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false
  }
}

data contiene las claves de la página actual y meta los metadatos de paginación — avanza page mientras has_next sea true. La clave completa nunca se incluye aquí; cada clave se identifica por su key_prefix, que no es secreto.


POST/api/v1/merchant/api-keys

Merchant

Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.

Crea una clave de API para el Merchant identificado por x-merchant-id. La respuesta es el único lugar donde se devuelve la clave completa (api_key).

Campos de la solicitud

FieldTypeRequiredDescription
namestringSíNombre legible para la clave (máximo 255 caracteres). Nómbrala según la carga de trabajo, p. ej., Checkout service (production).
scopesarray of stringsSíScopes para la clave — al menos uno. Deben ser válidos para este Merchant y el tipo de clave; carga los valores asignables con GET /merchant/api-keys/scopes.
allowed_ipsarray of stringsNoDirecciones IP autorizadas para usar la clave — hasta 50 entradas, cada una de hasta 45 caracteres. Omite el campo por completo para no tener restricción — un array vacío se rechaza, ya que se interpreta como una restricción pero no aplica ninguna. Consulta la nota siguiente para conocer los formatos aceptados.
key_typestringNoTipo de clave a crear — secret (del lado del servidor, sk_…) o public (segura para el cliente, pk_…).
expires_atstringNoFecha de expiración de la clave (ISO 8601). Omítela para una clave que nunca expire.
entity_typestringNoTipo de entidad a la que pertenece la clave — organization o merchant. En esta superficie, omítelo o envía merchant.
entity_idstringNoID de la entidad a la que pertenece la clave (p. ej., mrc_8a3f12d9). Omítelo para usar el Merchant de x-merchant-id.

Formatos de allowed_ips. Las direcciones IPv4 deben tener notación decimal con puntos (203.0.113.10); las entradas CIDR deben estar en forma de red (192.168.1.0/24, no 192.168.1.5/24); se aceptan direcciones y rangos IPv6 (2001:db8::/32). Una entrada comodín — *, 0.0.0.0/0 o ::/0 — permite cualquier IP y no se puede combinar con direcciones específicas.

La clave completa se devuelve exactamente una vez. El campo api_key aparece solo en esta respuesta de creación — Tokeflow almacena un hash, no la clave en sí, y no puede volver a mostrarla. Cópiala en un gestor de secretos de inmediato; toda respuesta posterior identifica la clave únicamente por su key_prefix, que no es secreto.

Ejemplo de solicitud

curl -X POST https://api.tokeflow.com/api/v1/merchant/api-keys \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
  -H "x-merchant-id: mrc_8a3f12d9" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Checkout service (production)",
    "scopes": ["transactions:read", "transactions:write"],
    "allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
    "key_type": "secret"
  }'

Ejemplo de respuesta — 201 Created

{
  "id": "ak_9f2e6c81",
  "entity_type": "merchant",
  "entity_id": "mrc_8a3f12d9",
  "name": "Checkout service (production)",
  "key_prefix": "sk_live_mer_7d21",
  "scopes": ["transactions:read", "transactions:write"],
  "allowed_ips": ["203.0.113.10", "198.51.100.0/24"],
  "is_active": true,
  "expires_at": null,
  "last_used_at": null,
  "created_at": "2026-08-12T14:03:00.000Z",
  "api_key": "sk_live_mer_7d21c39ab8e4f560",
  "key_hash": "6dcd4ce23d88e2ee9568ba546c007c63d9131c1b"
}

Trata esta respuesta como la credencial que contiene: muestra el api_key al usuario exactamente una vez y mantén el cuerpo fuera de los logs, los rastreadores de errores y las analíticas. De aquí en adelante, identifica la clave por su id y reconócela por su key_prefix.


GET/api/v1/merchant/api-keys/scopes

Merchant

Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.

Devuelve los scopes que se pueden asignar a las claves de API de este Merchant. Se excluyen los scopes exclusivos de la Organization. Filtra por key_type para obtener los scopes válidos para claves públicas o secretas — esto es lo que usa el formulario de creación de claves del Dashboard para completar su selector de scopes antes de llamar a POST /merchant/api-keys.

Parámetros de consulta

FieldTypeRequiredDescription
key_typestringSíTipo de clave para listar los scopes — secret o public. Las claves públicas están restringidas a scopes seguros para el cliente.

Ejemplo de solicitud

curl -G https://api.tokeflow.com/api/v1/merchant/api-keys/scopes \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
  -H "x-merchant-id: mrc_8a3f12d9" \
  --data-urlencode "key_type=secret"

Ejemplo de respuesta — 200 OK (truncado)

{
  "scopes": [
    {
      "scope": "transactions:read",
      "description": "List and view transactions"
    },
    {
      "scope": "transactions:write",
      "description": "Create, capture, and refund transactions"
    },
    {
      "scope": "customers:read",
      "description": "List and view customers"
    }
  ],
  "wildcards": [
    "transactions:*",
    "customers:*"
  ]
}

Cada elemento de scopes empareja la cadena del scope con una descripción legible. wildcards enumera las cadenas de scopes comodín válidas para esta entidad y tipo de clave — un comodín otorga todos los scopes que cubre, así que resérvalos para servicios de confianza y estrictamente controlados, y prefiere listas explícitas de scopes en todos los demás casos.


DELETE/api/v1/merchant/api-keys/:id

Merchant

Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.

Revoca una clave de API de forma permanente. La revocación surte efecto de inmediato: cualquier solicitud que presente la clave revocada falla la autenticación a partir de ese momento. No hay forma de deshacerlo — si la carga de trabajo aún necesita acceso, crea primero una clave de reemplazo.

Parámetros de ruta

FieldTypeRequiredDescription
idstringSíID de la clave de API que se va a revocar (p. ej., ak_9f2e6c81).

Ejemplo de solicitud

curl -X DELETE https://api.tokeflow.com/api/v1/merchant/api-keys/ak_9f2e6c81 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
  -H "x-merchant-id: mrc_8a3f12d9"

Ejemplo de respuesta — 204 No Content

El cuerpo de la respuesta está vacío.

Si una clave secreta se filtra, revócala ahora mismo — antes de crear el reemplazo. Una breve interrupción de una carga de trabajo es un resultado mejor que dejar a un atacante con una credencial activa del lado del servidor. Para una rotación planificada (sin exposición), haz lo contrario: crea la nueva clave, despliégala, confirma que funciona y luego revoca la anterior.


Errores

Los casos más comunes para estos endpoints:

HTTPTypical cause
400Entrada inválida — falta name o scopes, un scope desconocido, una lista allowed_ips vacía o malformada, o falta key_type en el endpoint de scopes.
401Token de sesión del Dashboard ausente, inválido o expirado.
403Con sesión iniciada, pero no es miembro con acceso al Merchant en x-merchant-id.
404Clave de API no encontrada, o no pertenece a este Merchant.

Consulta Errores para conocer el formato general de error usado en toda la API.

Relacionado

En esta página