{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/faable-com/json-schema/faable-com-post-apis-request-schema.json",
  "title": "PostApisRequest",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_ae-authored/faable-com-openapi-generated.yml#/components/schemas/PostApisRequest",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Human-readable label shown in the dashboard and on consent screens."
    },
    "slug": {
      "type": "string",
      "description": "URL-safe identifier, derived from name if omitted. Unique per account."
    },
    "identifier": {
      "type": "string",
      "description": "The audience URL or URN used by clients ( audience=… ) and emitted as the aud claim. Immutable after creation. Must be unique per account."
    },
    "description": {
      "type": "string",
      "description": "Optional free-text description."
    },
    "permissions": {
      "type": "array",
      "description": "Array of { value, description? }. The value is the scope string clients request."
    },
    "signing_alg": {
      "type": "string",
      "description": "JWT signing algorithm. Only RS256 is supported today."
    },
    "token_dialect": {
      "type": "string",
      "description": "access_token (standard) or access_token_authz (adds a permissions claim listing the granted scopes)."
    },
    "token_lifetime": {
      "type": "integer",
      "description": "Access token TTL in seconds. Range: 60 to 2_592_000. Default: 86_400."
    },
    "enforce_policies": {
      "type": "boolean",
      "description": "When true, requested scopes are intersected with the API’s permissions list."
    },
    "rbac": {
      "type": "boolean",
      "description": "When true, a token issued to a user carries only the requested permissions that the user’s account-level roles grant."
    },
    "allow_offline_access": {
      "type": "boolean",
      "description": "When true, clients can request offline_access and receive a refresh_token."
    },
    "skip_consent": {
      "type": "boolean",
      "description": "When true, first-party clients skip the consent prompt for this API."
    }
  },
  "required": [
    "name",
    "identifier"
  ]
}