Skip to content

Set up your own sign-in provider with a key

What an organisation's own sign-in provider is and whom it signs in is explained in Organisations and customers.

A key holding the management capability lets its own organisation's administrators sign in to the console through that organisation's identity provider: OpenID Connect, Google Workspace or Microsoft Entra ID. How to switch management on is in Administer your organisation with a key. Without it, every route on this page answers 404.

These routes cover the key's own organisation only. For an organisation below you, set it up in the console, or with a key you register in that organisation (Work inside an organisation below you).

Four rules hold whatever the provider:

  • Nobody gets an account by signing in. Only someone the organisation has already invited as an administrator can sign in this way, matched on the email address the provider has verified.
  • The provider's own second factor counts. If the provider asks for a code, the console does not ask for another.
  • Someone who administers more than one organisation cannot sign in through any organisation's provider and signs in with a password.
  • Removing a provider does not remove accounts. Anyone who also has a password keeps signing in with it.

Prove an email domain

A provider signs in only addresses in an email domain the organisation has proved it owns. Registering a provider for an organisation that has proved no domain is refused. Claim the domain first:

curl -s -X POST "$CORE_URL/organisation/email-domains" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{"domain": "example.com"}'

The answer (201) names the TXT record that proves the domain:

{
  "object": "email_domain",
  "domain": "example.com",
  "verified": false,
  "proof_record_name": "_artific-challenge.example.com",
  "proof_record_value": "<random value>",
  "verified_at": null,
  "created_at": "2026-10-07T09:12:00Z"
}

With whoever runs your domain's DNS, publish a TXT record at proof_record_name holding proof_record_value. Then ask for the check:

curl -s -X POST "$CORE_URL/organisation/email-domains/example.com/verify" \
    -H "Authorization: Bearer $CORE_KEY"

The answer is the same domain with verified: true and verified_at filled in. Asking again for a domain already proved changes nothing. GET /organisation/email-domains lists every claimed domain in one page; an organisation claims at most fifty.

Answer Meaning What to do
422 on domain when claiming a wildcard, a top-level domain or a shared mailbox domain such as gmail.com claim your own organisation's domain
409 when claiming your organisation already claims it, another organisation has already proved it, your organisation already claims fifty, or your organisation is being erased give up a domain you no longer need, or use the one you already have
422 on domain when checking the TXT record was not found yet wait for your DNS to update and ask again
409 when checking another organisation proved the domain first, or your organisation is being erased the domain cannot be yours here; give up the claim
503 when checking the domain's DNS could not be read in time, or account management is temporarily unavailable try again
404 your organisation does not claim this domain claim it first

DELETE /organisation/email-domains/example.com gives the domain up (204). Your provider stops signing in anybody in it at once; accounts stay. If it answers 503, the claim stands; send the same request again later.

Allow the provider's hosts

The sign-in service talks to the provider on your organisation's behalf, so the organisation has to allow the provider's hosts before you register it:

kind Hosts to allow
oidc the issuer's host, and the hosts its discovery document names for tokens, keys and user information -- usually the same one
google oauth2.googleapis.com, openidconnect.googleapis.com and www.googleapis.com
entra login.microsoftonline.com

Add each host with POST /organisation/allowed-hosts:

curl -s -X POST "$CORE_URL/organisation/allowed-hosts" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{"host": "login.microsoftonline.com"}'

That answers 403 while the organisation above keeps key management to itself (Reserved key management); ask that organisation to allow the host.

Register a provider

PUT /organisation/sign-in-providers/{name} creates the provider of that name, or replaces it. The name is lowercase letters, digits and hyphens, at most 32 characters, with no hyphen at the start or end. It becomes part of the redirect address, so choose it once.

curl -s -X PUT "$CORE_URL/organisation/sign-in-providers/entra" \
    -H "Authorization: Bearer $CORE_KEY" -H "Content-Type: application/json" \
    -d '{
          "kind": "entra",
          "directory_id": "8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b",
          "client_id": "<client id at your provider>",
          "client_secret": "<client secret at your provider>",
          "display_name": "Jansen"
        }'

kind decides which one other field the body carries:

kind Field What it does
oidc issuer, an https address Core reads the discovery document at <issuer>/.well-known/openid-configuration. The provider's ID tokens must carry email_verified: true.
google hosted_domain Only accounts of this Workspace domain sign in; personal Google accounts are refused. It must be a domain your organisation proved.
entra directory_id, a UUID Only accounts of that directory sign in. Its ID tokens must carry the optional claims email and xms_edov.

client_id and client_secret are those of the client you created at your provider for this console; display_name is optional. The secret is never answered back. A replacement carries it again: a body without client_secret is refused.

The answer (200) is the provider as it now stands:

{
  "object": "sign_in_provider",
  "name": "entra",
  "kind": "entra",
  "issuer": "https://login.microsoftonline.com/8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b/v2.0",
  "hosted_domain": null,
  "directory_id": "8c1f5a2e-3b4d-4e6f-9a0b-1c2d3e4f5a6b",
  "client_id": "<client id at your provider>",
  "display_name": "Jansen",
  "enabled": true,
  "sign_in_hint": "org.ten_8f2c41.entra",
  "redirect_uri": "https://login.example.com/realms/artific/broker/org.ten_8f2c41.entra/endpoint"
}
Answer Meaning What to do
409 the organisation has proved no email domain yet, already holds ten providers, or is being erased prove a domain, or remove a provider
422 on name the name does not follow the rule above choose another name
422 on issuer, directory_id or kind one of the provider's hosts is not allowed or is blocked by the deployment, or no discovery document could be read allow the hosts and check the address
422 on hosted_domain the Workspace domain is not one your organisation proved prove it first
503 account management is temporarily unavailable try again

The answer carries two things you need next:

  • Register redirect_uri on your client at the provider as an allowed redirect. The provider only starts working once that is done. If the provider asked for a redirect address before you could create the client, create it with a placeholder, register the provider here, and replace the placeholder with redirect_uri.
  • sign_in_hint makes the sign-in link. The ordinary sign-in page lists no organisation's providers, so give your administrators the console's sign-in address with the hint in it: https://<console address>/en/login?provider=org.ten_8f2c41.entra (or /nl/ for the Dutch console). Opening it sends them straight to your provider (Sign in).

Read, change and remove providers

Request Does
GET /organisation/sign-in-providers every provider of the organisation, in one page; there are at most ten
GET /organisation/sign-in-providers/{name} one provider, with its redirect_uri and sign_in_hint; 404 when it does not exist
PUT /organisation/sign-in-providers/{name} replaces it; send the whole body again, client_secret included
DELETE /organisation/sign-in-providers/{name} nobody signs in through it any more (204); accounts stay as they are

Every registration and removal is a management event on the organisation's trail (Management events), without the secret.