Crear un permiso
POST /v1/permissions · permiso apis:write
Añade un permiso (scope de OAuth) a una API, opcionalmente con los textos que se muestran en la pantalla de consentimiento. Admite Idempotency-Key.
Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
api_id |
cadena | sí | La API (api_…). |
value |
cadena | sí | Valor del scope, resource:action (^[a-z0-9_.-]{1,64}:[a-z0-9_.*-]{1,64}$). Único dentro de la API e inmutable. El prefijo idp_ está reservado. |
display_name |
cadena | null | no | Nombre corto que se muestra en la pantalla de consentimiento en lugar del valor del scope. Como máximo 128 caracteres. |
description |
cadena | null | no | Línea de detalle que se muestra debajo del nombre en la pantalla de consentimiento. Como máximo 1024 caracteres. |
consent_text_i18n |
objeto | null | no | Etiqueta de idioma → texto de la pantalla de consentimiento, por ejemplo {"en": "Read your orders"}. Como máximo 30 idiomas, cada texto de 1 a 1024 caracteres, 16 KiB en total. |
sensitivity |
cadena | no | normal (predeterminado) o sensitive. |
Textos de la pantalla de consentimiento
La pantalla de consentimiento alojada muestra cada scope solicitado así: la entrada de consent_text_i18n para el idioma de la página (etiqueta exacta; si no, su subetiqueta principal), si no, display_name, si no, el value del scope; description se muestra como línea de detalle. Los tres son texto plano. Los caracteres de control (incluidos saltos de línea y tabulaciones), los separadores de línea y de párrafo, y los caracteres de incrustación, anulación y aislamiento bidireccional (U+202A-U+202E, U+2066-U+2069) se rechazan con 422. Los espacios al principio y al final se recortan, y un texto que queda vacío tras el recorte se guarda como null. El HTML no se interpreta: la pantalla de consentimiento lo escapa.
Respuesta
201 Created
{
"id": "perm_01h455vb4pex5vsknk084sn02s",
"api_id": "api_01h455vb4pex5vsknk084sn02q",
"value": "read:orders",
"display_name": "Read orders",
"description": "See your past orders and their status",
"consent_text_i18n": {
"en": "Read your orders",
"tr": "Siparişlerinizi okuyun"
},
"sensitivity": "normal"
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 400 | unknown_field |
El cuerpo contiene un campo desconocido. |
| 403 | insufficient_permissions |
La credencial no tiene apis:write. |
| 403 | quota_exceeded |
La API ya tiene 1.000 permisos. |
| 404 | not_found |
No existe tal API en este entorno. |
| 409 | conflict |
El valor ya existe en esta API, o la API es la API del sistema. |
| 422 | validation_failed |
Falta un campo o no es válido, o un texto no es texto plano (errors[].pointer indica el campo, por ejemplo /consent_text_i18n). |
Ejemplo
curl -X POST https://api.eu.keenauth.com/v1/permissions \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1d2c1e-perm-create" \
-d '{"api_id":"api_01h455vb4pex5vsknk084sn02q","value":"read:orders","display_name":"Read orders","consent_text_i18n":{"en":"Read your orders"}}'
Con la CLI, pase el mapa de idiomas con --data:
echo '{"consent_text_i18n":{"en":"Read your orders"}}' | keenauth permissions create \
--api-id api_01h455vb4pex5vsknk084sn02q --value read:orders --display-name "Read orders" --data -