OAuth 2.1

Registro de clientes (RFC 7591)

Registra tu aplicación dinámicamente como cliente OAuth en Whatalo.

El Dynamic Client Registration (RFC 7591) permite que tu aplicación se registre como cliente OAuth sin intervención manual del equipo de Whatalo. Cada instalación del mismo software puede obtener su propio client_id.

Endpoint

POST https://app.whatalo.com/oauth/register
Content-Type: application/json

No requiere autenticación previa. El endpoint es público.

Este endpoint tiene un límite de 10 solicitudes por IP por hora. Si lo excedes, recibirás HTTP 429 con el header Retry-After. Cachea el client_id recibido — no necesitas registrarte de nuevo en cada sesión.

Cuerpo de la solicitud

{
  "client_name": "Mi Integración SaaS",
  "redirect_uris": ["https://mi-app.com/oauth/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "scope": "read:orders read:products write:orders",
  "token_endpoint_auth_method": "client_secret_post",
  "software_id": "mi-integracion-saas",
  "software_version": "2.1.0",
  "logo_uri": "https://mi-app.com/logo.png",
  "client_uri": "https://mi-app.com",
  "policy_uri": "https://mi-app.com/privacidad",
  "tos_uri": "https://mi-app.com/terminos"
}

Campos del cuerpo

CampoRequeridoDescripción
client_nameNombre visible en la pantalla de consentimiento
redirect_urisLista de URIs de redirección. Deben ser HTTPS (salvo localhost)
grant_typesNoPor defecto ["authorization_code"]. Incluye "refresh_token" si necesitas refresh
response_typesNoSolo ["code"] está soportado
scopeNoScopes que la app puede solicitar. Ver Scopes
token_endpoint_auth_methodNo"client_secret_post", "client_secret_basic", o "none" (cliente público)
software_idNoIdentificador estable del software, compartido por todas las instancias
software_versionNoVersión opaca del software, solo para auditoría
logo_uriNoURL del logo de la app (se muestra en consentimiento)
client_uriNoURL de la página principal de la app
policy_uriNoURL de la política de privacidad
tos_uriNoURL de los términos de servicio

Respuesta exitosa (201 Created)

{
  "client_id": "abc123def456ghi789jkl012",
  "client_secret": "s3cr3t_v4lu3_xyz987wvu654",
  "client_name": "Mi Integración SaaS",
  "redirect_uris": ["https://mi-app.com/oauth/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "response_types": ["code"],
  "scope": "read:orders read:products write:orders",
  "token_endpoint_auth_method": "client_secret_post",
  "software_id": "mi-integracion-saas",
  "software_version": "2.1.0",
  "client_id_issued_at": 1746648000,
  "client_secret_expires_at": 0
}

Campos de la respuesta (RFC 7591 §3.2.1)

CampoTipoDescripción
client_idstringIdentificador único del cliente. Guárdalo de forma persistente.
client_secretstringSecreto del cliente (solo para clientes confidenciales). Mostrado una sola vez.
client_id_issued_atnumberTimestamp UNIX (segundos) de cuándo se emitió el client_id.
client_secret_expires_atnumberTimestamp UNIX de expiración del secreto. 0 significa que no expira.

El client_secret se muestra únicamente en esta respuesta. Guárdalo de inmediato en un almacén seguro de secretos — no podrás recuperarlo después.

Clientes públicos (sin secreto)

Si tu app no puede mantener un secreto de forma segura (aplicación de escritorio, extensión de navegador, herramienta CLI), regístrala como cliente público:

{
  "client_name": "Mi App de Escritorio",
  "redirect_uris": ["http://127.0.0.1:PORT/callback"],
  "grant_types": ["authorization_code", "refresh_token"],
  "token_endpoint_auth_method": "none"
}

La respuesta no incluirá client_secret. El flujo de autorización con PKCE sigue siendo obligatorio.

El patrón software_id

Cada instalación del mismo software obtiene un client_id distinto — eso es por diseño (RFC 7591 §2). El campo software_id sirve para que Whatalo identifique el paquete de software independientemente de la instancia.

CampoPor instanciaEstable entre instancias
client_idNo
software_idNoSí — elige uno fijo para tu software

Cuando el equipo de Whatalo verifica un software_id, todas las instancias heredan automáticamente la insignia de verificación en la pantalla de consentimiento.

Siguiente paso

Con tu client_id en mano, inicia el flujo de autorización.

On this page