Skip to content

Create an OpenFGA instance

POST
/clusters/{cluster_id}/openfga-instances
curl --request POST \
  --url http://localhost:8000/clusters/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/openfga-instances \
  --header 'API-Key: <API-Key>' \
  --header 'API-Version: 2026-06-01.beta' \
  --header 'Content-Type: application/json' \
  --data '{ "realm": "my-service" }'

Creates an OpenFGA instance bound to one realm of the cluster. The instance starts in provisioning.

Returns 403 when the workspace’s plan does not include OpenFGA or the workspace has reached its instance limit, 409 when the realm already has an instance, and 422 when the realm is master, does not exist or is disabled.

Required scope: openfga:write

cluster_id
required
string format: uuid
API-Version
required
string
Allowed values: 2026-06-01.beta
Media typeapplication/json
object
realm
required

The realm to bind. It must exist and be enabled on the cluster, must not be master, and must not already have an instance.

string
>= 1 characters

Example

{
  "realm": "my-service"
}

The instance was saved and is provisioning. Poll GET /clusters/{cluster_id}/openfga-instances/{instance_id} until status is ready or failed.

Media typeapplication/json
object
id
required

OpenFGA instance identifier.

string format: uuid
cluster_id
required
string format: uuid
realm
required

The realm the instance is bound to. Chosen when the instance is created and never changed.

string
status
required
string
Allowed values: provisioning ready failed deleting
status_message

The reason the instance is failed.

string
api_url
required

Where the instance’s OpenFGA API answers.

string format: uri
issuer
required

The issuer the instance trusts. Only tokens from this issuer are accepted.

string format: uri
audience
required

The audience a token must carry. Add an audience mapper for this value to the realm’s client.

string
created_at
required
string format: date-time
updated_at
required
string format: date-time

Example

{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "cluster_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "realm": "my-service",
  "status": "ready",
  "api_url": "https://openfga-7c9e6679.eu.skycloak.io",
  "issuer": "https://auth.example.com/realms/my-service",
  "audience": "https://openfga-7c9e6679.eu.skycloak.io",
  "created_at": "2026-11-05T10:00:00Z",
  "updated_at": "2026-11-05T10:02:10Z"
}
Location
required
string format: uri

URL of the resource being created or modified. Poll this endpoint to track completion.

Retry-After
integer

Access is unauthorized.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Access is forbidden.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

The server cannot find the requested resource.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

The request conflicts with the current state of the server.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Client error

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri
errors
required
Array<object>
>= 1 items
object
field
required
string
detail
required
string
code
string
value

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com",
  "errors": [
    {
      "field": "example",
      "detail": "example",
      "code": "example",
      "value": "example"
    }
  ]
}

Client error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}
Retry-After
integer
RateLimit-Limit
integer
RateLimit-Remaining
integer
RateLimit-Reset
integer
X-RateLimit-Limit-Second
integer
X-RateLimit-Remaining-Second
integer
X-RateLimit-Limit-Minute
integer
X-RateLimit-Remaining-Minute
integer
X-RateLimit-Limit-Hour
integer
X-RateLimit-Remaining-Hour
integer
X-RateLimit-Limit-Day
integer
X-RateLimit-Remaining-Day
integer

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}