Settings
GET /orgs/{orgId}/api/v1/admin/settings
GET /orgs/{orgId}/api/v1/admin/settings/general
PUT /orgs/{orgId}/api/v1/admin/settings/general
PATCH /orgs/{orgId}/api/v1/admin/settings/general
GET /orgs/{orgId}/api/v1/admin/settings/authentication
PUT /orgs/{orgId}/api/v1/admin/settings/authentication
PATCH /orgs/{orgId}/api/v1/admin/settings/authentication
GET /orgs/{orgId}/api/v1/admin/settings/security
PUT /orgs/{orgId}/api/v1/admin/settings/security
PATCH /orgs/{orgId}/api/v1/admin/settings/security
GET /orgs/{orgId}/api/v1/admin/settings/email
PUT /orgs/{orgId}/api/v1/admin/settings/email
PATCH /orgs/{orgId}/api/v1/admin/settings/email
GET /orgs/{orgId}/api/v1/admin/settings/auth
PUT /orgs/{orgId}/api/v1/admin/settings/auth
PATCH /orgs/{orgId}/api/v1/admin/settings/auth
GET /orgs/{orgId}/api/v1/admin/settings/branding
PUT /orgs/{orgId}/api/v1/admin/settings/branding
PATCH /orgs/{orgId}/api/v1/admin/settings/branding
GET /orgs/{orgId}/api/v1/admin/settings/scim
PUT /orgs/{orgId}/api/v1/admin/settings/scim
PATCH /orgs/{orgId}/api/v1/admin/settings/scim
GET /orgs/{orgId}/api/v1/admin/organization
PUT /orgs/{orgId}/api/v1/admin/organization
/settings/auth is a shorter alias of /settings/authentication. The branding category exposes the hosted-login appearance (logo, colours, layout — see the branding block in the all-settings response), and scim exposes the SCIM provisioning configuration. All three follow the same GET / PUT / PATCH shape as the categories below.
Branding values are validated exactly as in the portal: enumerated fields (layout, theme, background_type, input_style, …) fall back to their default when the value is unknown, colours must be hex (or a basic colour name, stored as hex), image and link fields must be http(s) URLs, and custom_css / custom_html are filtered as described in Login Page & Branding. A refused value comes back as null in the response.
Organization settings control authentication behaviour, security policies, email configuration, and general organization information.
Secrets are redacted
Settings responses never return credential material. Every value stored under a secret-looking
key (client_secret, basic_password, oauth2_client_secret, bearer_token_hash,
initial_access_tokens, api_key, credentials, anything containing private_key, …) is
replaced by a marker:
{ "client_secret": { "configured": true, "redacted": true } }
Settings about a secret stay readable (bearer_token_preview, token_created_at,
public_key, booleans and lifetimes). Sending the marker back in a PUT or PATCH, for example
when you round-trip a fetched payload, leaves the stored value unchanged; send a new string to
replace a secret.
SCIM settings
GET /admin/settings/scim returns inbound (LumoAuth as SCIM server) and outbound
(LumoAuth pushing to another SCIM server) blocks.
- Inbound
bearer_tokenis write-only. Send it to set the provisioning token; LumoAuth stores only its SHA-256 hash and returnsbearer_token_previewand the creation time. The hash, preview and creation time cannot be written directly. Other writable inbound keys:enabled,allow_user_creation,allow_user_updates,allow_user_deletion,allow_group_operations,auto_activate_users,protected_attributes,attribute_mappinganddeprovisioning_action(soft_delete,deactivate,hard_delete). - Outbound authentication (
auth_type) isbearer,basicoroauth2. OAuth 2.0 client credentials useoauth2_client_id,oauth2_client_secret,oauth2_token_urland optionaloauth2_scope. The secret fields (bearer_token,basic_password,oauth2_client_secret) are encrypted at rest, redacted on read and may besecret://references to a secrets manager. Changingendpoint_urloroauth2_token_urlrequires re-entering the secret.
Authentication
All settings endpoints require an API key or a Bearer token carrying admin:settings:read
(for GET) or admin:settings:write (for PUT/PATCH). See Authentication.
Each endpoint needs the credential's scope and a permission. A session or Bearer caller must
hold the permission; for an API key its creator must still hold it. A missing permission
returns 403 forbidden with details.required_permissions. See
Required permissions.
| Method | Endpoint | Permission | API-key / token scope |
|---|---|---|---|
| GET | /admin/settings | settings.view | admin:settings:read |
| GET | /admin/settings/general | settings.view | admin:settings:read |
| PATCH PUT | /admin/settings/general | settings.edit | admin:settings:write |
| GET | /admin/settings/authentication | settings.view | admin:settings:read |
| PATCH PUT | /admin/settings/authentication | settings.manage | admin:settings:write |
| GET | /admin/settings/security | settings.view | admin:settings:read |
| PATCH PUT | /admin/settings/security | settings.manage | admin:settings:write |
| GET | /admin/settings/email | settings.view | admin:settings:read |
| PATCH PUT | /admin/settings/email | settings.edit | admin:settings:write |
| GET | /admin/tenant | settings.view | admin:settings:read |
| GET | /admin/organization | settings.view | admin:settings:read |
| PUT PATCH | /admin/tenant | settings.manage | admin:settings:write |
| PUT PATCH | /admin/organization | settings.manage | admin:settings:write |
| GET | /admin/settings/auth | settings.view | admin:settings:read |
| PUT PATCH | /admin/settings/auth | settings.manage | admin:settings:write |
| GET | /admin/settings/branding | branding.view | admin:settings:read |
| PUT PATCH | /admin/settings/branding | branding.edit | admin:settings:write |
| GET | /admin/settings/scim | scim.view | admin:settings:read |
| PUT PATCH | /admin/settings/scim | scim.edit | admin:settings:write |
| GET | /admin/analytics/dashboard | analytics.view | admin:analytics:read |
| GET | /admin/analytics/logins | analytics.view | admin:analytics:read |
| GET | /admin/analytics/users | analytics.view | admin:analytics:read |
| GET | /admin/email-templates | settings.view | admin:settings:read |
| GET | /admin/email-templates/{type} | settings.view | admin:settings:read |
| PUT | /admin/email-templates/{type} | settings.edit | admin:settings:write |
| DELETE | /admin/email-templates/{type} | settings.edit | admin:settings:write |
| POST | /admin/email-templates/{type}/preview | settings.edit | admin:settings:write |
| GET | /admin/email-templates/{type}/variables | settings.view | admin:settings:read |
| POST | /admin/sandbox/spawn | settings.manage | admin:settings:write |
| GET | /admin/sandbox | settings.view | admin:settings:read |
| POST | /admin/sandbox/{sandboxSlug}/destroy | settings.manage | admin:settings:write |
Get All Settings
Returns all setting categories in a single response.
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
GET responses return each category's stored settings using snake_case keys (the raw stored shape):
{
"data": {
"general": { "name": "Acme Corp" },
"authentication": {
"password_min_length": 8,
"mfa_required": false,
"mfa_methods": [],
"social_login_enabled": false,
"passkey_enabled": false,
"session_timeout": 1209600
},
"branding": { "enabled": false, "primary_color": "#667eea" },
"security": [],
"email": []
}
}
Keys are stored as sent. Each category's PUT/PATCH body is merged into the stored
settings under the same key names, and GET returns exactly what is stored. Use the
snake_case names shown in the GET responses when you update; a differently cased key is
stored as a new, unread key rather than mapped.
General Settings
Get General Settings
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Update General Settings
- curl
- Node
- Python
- Go
curl -X PATCH https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general \
-H "Authorization: ApiKey lmk_abc123" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation",
"display_name": "Acme",
"timezone": "Europe/Berlin",
"locale": "en"
}'
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general", {
method: "PATCH",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" },
body: JSON.stringify({
"name": "Acme Corporation",
"display_name": "Acme",
"timezone": "Europe/Berlin",
"locale": "en"
})
});
console.log(await resp.json());
import os, requests
resp = requests.patch(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general",
headers={"Authorization": os.environ["LUMO_AUTH"], "Content-Type": "application/json"},
json={
"name": "Acme Corporation",
"display_name": "Acme",
"timezone": "Europe/Berlin",
"locale": "en"
}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
body := strings.NewReader(`{
"name": "Acme Corporation",
"display_name": "Acme",
"timezone": "Europe/Berlin",
"locale": "en"
}`)
req, _ := http.NewRequest("PATCH", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/general", body)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
General Settings Fields
| Field | Type | Description |
|---|---|---|
name | string | Organization display name (alias: tenantName) |
display_name | string | Name shown on hosted pages (alias: displayName) |
timezone | string | IANA time zone, for example Europe/Berlin |
locale | string | Default locale, for example en |
Other keys in a general-settings body are ignored.
Sign-in settings
Controls password policies, MFA requirements, and login behaviour.
Get Sign-in settings
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Update Sign-in settings
- curl
- Node
- Python
- Go
curl -X PATCH https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication \
-H "Authorization: ApiKey lmk_abc123" \
-H "Content-Type: application/json" \
-d '{
"password_min_length": 12,
"password_require_special": true,
"social_login_enabled": true,
"session_timeout": 86400
}'
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication", {
method: "PATCH",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" },
body: JSON.stringify({
"password_min_length": 12,
"password_require_special": true,
"social_login_enabled": true,
"session_timeout": 86400
})
});
console.log(await resp.json());
import os, requests
resp = requests.patch(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication",
headers={"Authorization": os.environ["LUMO_AUTH"], "Content-Type": "application/json"},
json={
"password_min_length": 12,
"password_require_special": True,
"social_login_enabled": True,
"session_timeout": 86400
}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
body := strings.NewReader(`{
"password_min_length": 12,
"password_require_special": true,
"social_login_enabled": true,
"session_timeout": 86400
}`)
req, _ := http.NewRequest("PATCH", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/authentication", body)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Sign-in settings Fields
The body uses the same snake_case keys the GET response returns (see the full object on the
Organization settings page). The most common:
| Field | Type | Description |
|---|---|---|
password_min_length | integer | Minimum password length (default: 8) |
password_require_special | boolean | Require at least one symbol |
password_policy | object | template, min_length, require_special, require_numbers, require_uppercase, require_lowercase |
password_rotation_policy | object | enabled, max_age_days, notify_before_days, history_count |
mfa_policy | object | The organization MFA policy (requirement, allowed factors, tiers, grace period, trusted devices, SMS rules). Read and change it through GET/PUT /admin/policies/mfa; see the policy reference |
mfa_required | boolean | Legacy. Mirrors mfa_policy.requirement == "required". Writing it changes the policy: true → required, false → risk_based |
mfa_sms_enabled | boolean | Legacy. Mirrors whether sms_otp is in mfa_policy.allowed_factors; writing it adds or removes sms_otp |
mfa_methods | array | Legacy. Only read (for email) when no mfa_policy exists |
no_mfa_action | string | Adaptive auth: what to do on a risky sign-in by a user with no MFA factor (allow, prompt, email, block) |
passkey_enabled | boolean | Allow passkey (WebAuthn) sign-in |
social_login_enabled | boolean | Allow social provider login |
session_timeout | integer | Session lifetime in seconds |
dynamic_client_registration_enabled | boolean | Allow dynamic client registration: applications registering themselves through the API (an initial access token is still required unless require_initial_access_token is false) |
social_configs secrets (client_secret, private_key) are merged with the stored values, so
you can update a provider without resending its secret.
mfa_policy (a partial object), mfa_required and mfa_sms_enabled sent to this endpoint are not
stored as sent: they are applied as an MFA policy change, validated and clamped exactly like
PUT /admin/policies/mfa, and the legacy keys are kept in sync.
mfa_required: true sets the requirement to required, false sets it to risk_based;
mfa_sms_enabled adds or removes sms_otp in allowed_factors. Prefer the policy endpoint for
new integrations.
Security Settings
The security block holds OAuth hardening switches that apply to the whole organization. It
is stored as sent and returned verbatim by GET; the platform reads the keys listed under
Security Settings Fields.
Brute-force protection (5 failed logins per IP and per e-mail in 15 minutes, then a 15-minute account lock) is platform-wide and is not configurable here; see Rate limits.
Get Security Settings
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Update Security Settings
- curl
- Node
- Python
- Go
curl -X PATCH https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security \
-H "Authorization: ApiKey lmk_abc123" \
-H "Content-Type: application/json" \
-d '{
"dpop_require_nonce": true
}'
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security", {
method: "PATCH",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" },
body: JSON.stringify({
"dpop_require_nonce": true
})
});
console.log(await resp.json());
import os, requests
resp = requests.patch(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security",
headers={"Authorization": os.environ["LUMO_AUTH"], "Content-Type": "application/json"},
json={
"dpop_require_nonce": true
}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
body := strings.NewReader(`{
"dpop_require_nonce": true
}`)
req, _ := http.NewRequest("PATCH", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/security", body)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Security Settings Fields
| Field | Type | Default | Description |
|---|---|---|---|
dpop_require_nonce | boolean | false | Require a server-issued nonce in every DPoP proof (DPoP ties a token to the client's key so a stolen copy cannot be replayed). When true, the token endpoint answers a proof without a fresh nonce with 400 use_dpop_nonce and DPoP-protected resources with 401 use_dpop_nonce, each carrying a DPoP-Nonce header the client must echo in its next proof. Turn it on only for clients that implement the retry; see DPoP. |
PATCH /settings/security merges the body into the stored security block key by key, so
you can flip one switch without resending the others. The same block can be written through
PATCH /admin/organization (settings.security), but that path replaces the whole
security object; prefer this endpoint for single-key changes.
The organization-level allow_root_admin_login switch is not part of security and is not
writable through the API; it is changed only by LumoAuth operators at your request. See
allow_root_admin_login.
Email Settings
Configures outbound email — sender address and optional SMTP overrides.
Get Email Settings
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Update Email Settings
- curl
- Node
- Python
- Go
curl -X PATCH https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email \
-H "Authorization: ApiKey lmk_abc123" \
-H "Content-Type: application/json" \
-d '{
"fromName": "Acme Corp Auth",
"fromEmail": "noreply@acme.com",
"replyToEmail": "support@acme.com"
}'
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email", {
method: "PATCH",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" },
body: JSON.stringify({
"fromName": "Acme Corp Auth",
"fromEmail": "noreply@acme.com",
"replyToEmail": "support@acme.com"
})
});
console.log(await resp.json());
import os, requests
resp = requests.patch(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email",
headers={"Authorization": os.environ["LUMO_AUTH"], "Content-Type": "application/json"},
json={
"fromName": "Acme Corp Auth",
"fromEmail": "noreply@acme.com",
"replyToEmail": "support@acme.com"
}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
body := strings.NewReader(`{
"fromName": "Acme Corp Auth",
"fromEmail": "noreply@acme.com",
"replyToEmail": "support@acme.com"
}`)
req, _ := http.NewRequest("PATCH", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/settings/email", body)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Organization Profile
Get or update the top-level organization profile: name and the allow-listed settings keys.
There is no free-form metadata; any settings key outside the allow-list is rejected with
400 invalid_request and details.rejected_keys. The full contract is on the
Organization settings page.
Get Organization
- curl
- Node
- Python
- Go
curl "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization" \
-H "Authorization: ApiKey lmk_abc123"
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization", {
method: "GET",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" }
});
console.log(await resp.json());
import os, requests
resp = requests.get(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization",
headers={"Authorization": os.environ["LUMO_AUTH"]}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
req, _ := http.NewRequest("GET", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization", nil)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Update Organization
- curl
- Node
- Python
- Go
curl -X PUT https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization \
-H "Authorization: ApiKey lmk_abc123" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corporation",
"settings": { "timezone": "America/New_York", "locale": "en" }
}'
const resp = await fetch("https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization", {
method: "PUT",
headers: { "Authorization": process.env.LUMO_AUTH, "Content-Type": "application/json" },
body: JSON.stringify({
"name": "Acme Corporation",
"settings": { "timezone": "America/New_York", "locale": "en" }
})
});
console.log(await resp.json());
import os, requests
resp = requests.put(
"https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization",
headers={"Authorization": os.environ["LUMO_AUTH"], "Content-Type": "application/json"},
json={
"name": "Acme Corporation",
"settings": { "timezone": "America/New_York", "locale": "en" }
}
)
print(resp.json())
import (
"io"
"net/http"
"os"
"strings"
)
body := strings.NewReader(`{
"name": "Acme Corporation",
"settings": { "timezone": "America/New_York", "locale": "en" }
}`)
req, _ := http.NewRequest("PUT", "https://app.lumoauth.dev/orgs/acme-corp/api/v1/admin/organization", body)
req.Header.Set("Authorization", os.Getenv("LUMO_AUTH"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
Standards used on this page
| Plain name | Standard |
|---|---|
| SCIM 2.0 (user and group provisioning) | RFC 7642, RFC 7643 and RFC 7644 |
| Dynamic client registration | RFC 7591 and RFC 7592 |
| Sender-constrained tokens (DPoP) | RFC 9449 |
See the standards reference for what each one covers and how LumoAuth uses it.