# Organization and members The organizations a token can reach, their members, roles, single sign-on and dashboards. Read only. **Common tasks** - [List members](#get-organizations-organization-members) **Only in the app:** Inviting and removing members, roles and single sign-on. **How it works in the app:** [help article](https://infranest.io/docs/organizations). **Scopes:** Read with `members.read`. See [Tokens and scopes](../tokens-and-scopes.md#scopes).
[Invitations](#invitations) 1 · [Members](#members) 1 · [Organizations](#organizations) 2 · [Roles](#roles) 2 · [Sandbox](#sandbox) 1
Every endpoint below takes a token in the `Authorization: Bearer` header and answers JSON. Errors use the shared format in [Errors](../errors.md). Base address: `https://api.infranest.io/api`. ## Invitations ### List pending invitations {#get-organizations-organization-invitations}
`GET` `/organizations/{organization}/invitations` **Scope:** `members.read` · **Changes data:** no Invitations that have not been accepted yet, with who sent each one and the role it grants. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/invitations" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json [ { "id": 1, "organization_id": 1, "email": "newcolleague@northwind.example", "invited_by": 1, "accepted_at": null, "expires_at": "2026-01-20T12:00:00.000000Z", "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "org_role_id": 3, "origin": null, "inviter": { "id": 1, "name": "Alex Rivera", "email": "demo@example.com", "analytics_id": null }, "org_role": { "id": 3, "organization_id": null, "name": "Member", "slug": "member", "is_system": true, "permissions": { "dns.read": true, "dns.write": false, "cloud.read": true, "cloud.write": false, "billing.read": false, "domains.read": true, "roles.manage": false, "billing.write": false, "domains.write": false, "domains.delete": false, "members.manage": false, "monitoring.read": true, "monitoring.write": false }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null } } ] ```
## Members ### List members {#get-organizations-organization-members}
`GET` `/organizations/{organization}/members` **Scope:** `members.read` · **Changes data:** no Every member of the organization with their role. `email_undeliverable` is true when email to that address can no longer be delivered. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/members" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json [ { "id": 2, "name": "Sam Okoye", "email": "sam@example.com", "email_undeliverable": false, "org_role": { "id": 2, "organization_id": null, "name": "Admin", "slug": "admin", "is_system": true, "permissions": { "dns.read": true, "dns.write": true, "cloud.read": true, "cloud.write": true, "billing.read": true, "domains.read": true, "roles.manage": false, "billing.write": false, "domains.write": true, "domains.delete": false, "members.manage": true, "monitoring.read": true, "monitoring.write": true }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null }, "sso_external": false }, { "id": 3, "name": "Priya Raghunathan", "email": "priya@example.com", "email_undeliverable": false, "org_role": { "id": 3, "organization_id": null, "name": "Member", "slug": "member", "is_system": true, "permissions": { "dns.read": true, "dns.write": false, "cloud.read": true, "cloud.write": false, "billing.read": false, "domains.read": true, "roles.manage": false, "billing.write": false, "domains.write": false, "domains.delete": false, "members.manage": false, "monitoring.read": true, "monitoring.write": false }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null }, "sso_external": false } ] ```
## Organizations ### List your organizations {#get-organizations}
`GET` `/organizations` **Scope:** `members.read` · **Changes data:** no Every organization you are a member of, with your role and its member count. An organization that requires its own single sign-on, which this session has not used, is listed by name only. **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json [ { "id": 1, "name": "Northwind Cloud", "slug": "northwind-demo", "deleted_at": null, "created_at": "2025-10-17T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "avatar_url": null, "reseller_id": null, "entitlement_overrides": { "api": true, "cloud": true, "api.mcp": true, "domains": null, "servers": null, "api.read": true, "monitors": null, "webhooks": true, "api.write": true, "dns.drift": true, "dns_zones": null, "drop_catch": true, "module.api": true, "module.dns": true, "automations": null, "data_import": true, "dynamic_ips": null, "white_label": true, "certificates": null, "module.cloud": true, "security.sso": true, "status_pages": null, "team_members": null, "cloud.backups": true, "cloud.volumes": true, "custom_fields": true, "dns.templates": true, "organizations": null, "security.scim": true, "api.tokens_max": null, "cloud.networks": true, "cost_reporting": true, "email_branding": true, "module.domains": true, "cloud.firewalls": true, "cloud.providers": "all", "cloud.snapshots": true, "monitor_regions": true, "watched_domains": null, "module.dropcatch": true, "cloud.volumes_max": null, "external_monitors": null, "module.monitoring": true, "monitored_servers": null, "cloud.networks_max": null, "dropcatch.register": true, "module.automations": true, "monitoring.regions": "all", "cloud.firewalls_max": null, "dropcatch.backorder": true, "module.certificates": true, "module.integrations": true, "module.status_pages": true, "status_page_private": true, "cloud.load_balancers": true, "data_export_advanced": true, "domains.registration": true, "monitoring.incidents": true, "security.ip_allowlist": true, "integrations.providers": "all", "monitoring.check_types": "all", "monitoring.maintenance": true, "status_page_whitelabel": true, "dropcatch.parallel_race": true, "automations.action_types": "all", "cloud.load_balancers_max": null, "monitoring.calendar_feed": true, "status_page_custom_domain": true, "automations.premium_actions": true, "integrations.connections_max": null, "integrations.chat_destinations": null }, "stripe_customer_id": null, "require_reauth_destructive": false, "require_reauth_power": false, "dynamic_ip_default_strict": false, "dynamic_ip_default_fail_closed": false, "require_2fa": false, "password_min_length": null, "password_require_symbols": null, "password_max_age_days": null, "entitlement_overrides_meta": null, "base_currency": "EUR", "price_display": "net", "vat_rate": "21.00", "country": null, "is_demo": true, "timezone": null, "sso_required": false, "suspended_at": null, "suspended_reason": null, "ip_allowlist": null, "session_lifetime_days": null, "pagerduty_webhook_token": null, "vat_number": null, "vat_status": null, "vat_trader_name": null, "vat_country": null, "vat_consultation_number": null, "vat_checked_at": null, "billing_email": null, "billing_cc": null, "billing_reference": null, "purge_after": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null, "purge_reminder_sent_at": null, "alerts_quiet_until": null, "billing_country": null, "trial_used_at": null, "recap_cadence": "monthly", "brand_logo_url": "http://localhost/storage/org-brand-logos/docs-demo-northwind.svg", "brand_accent_color": "#0F766E", "brand_email_from_name": "Northwind Cloud", "acquisition_src": null, "acquisition_plan": null, "acquisition_cadence": null, "acquisition_code": null, "customer_number": "4200017", "size_band": null, "presignup_first_page": null, "presignup_sessions": null, "presignup_days": null, "sso_required_since": null, "is_internal": false, "client_field_id": null, "onboarding_report_sent_at": null, "notification_defaults": null, "api_writes_enabled_at": null, "is_sandbox": false, "referral_code": "northwind-cloud", "acquisition_ref": null, "users_count": 4, "analytics_id": "api.infranest.io-4200017", "pivot": { "user_id": 1, "organization_id": 1, "org_role_id": 1, "sso_external": false, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z" } } ] ```
--- ### Get an organization {#get-organizations-id}
`GET` `/organizations/{id}` **Scope:** `members.read` · **Changes data:** no The organization’s settings, with the name and email address of each member. | Field | Type | Notes | |---|---|---| | `id`
path · required | integer | The id's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/1" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "id": 1, "name": "Northwind Cloud", "slug": "northwind-demo", "deleted_at": null, "created_at": "2025-10-17T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "avatar_url": null, "reseller_id": null, "entitlement_overrides": { "api": true, "cloud": true, "api.mcp": true, "domains": null, "servers": null, "api.read": true, "monitors": null, "webhooks": true, "api.write": true, "dns.drift": true, "dns_zones": null, "drop_catch": true, "module.api": true, "module.dns": true, "automations": null, "data_import": true, "dynamic_ips": null, "white_label": true, "certificates": null, "module.cloud": true, "security.sso": true, "status_pages": null, "team_members": null, "cloud.backups": true, "cloud.volumes": true, "custom_fields": true, "dns.templates": true, "organizations": null, "security.scim": true, "api.tokens_max": null, "cloud.networks": true, "cost_reporting": true, "email_branding": true, "module.domains": true, "cloud.firewalls": true, "cloud.providers": "all", "cloud.snapshots": true, "monitor_regions": true, "watched_domains": null, "module.dropcatch": true, "cloud.volumes_max": null, "external_monitors": null, "module.monitoring": true, "monitored_servers": null, "cloud.networks_max": null, "dropcatch.register": true, "module.automations": true, "monitoring.regions": "all", "cloud.firewalls_max": null, "dropcatch.backorder": true, "module.certificates": true, "module.integrations": true, "module.status_pages": true, "status_page_private": true, "cloud.load_balancers": true, "data_export_advanced": true, "domains.registration": true, "monitoring.incidents": true, "security.ip_allowlist": true, "integrations.providers": "all", "monitoring.check_types": "all", "monitoring.maintenance": true, "status_page_whitelabel": true, "dropcatch.parallel_race": true, "automations.action_types": "all", "cloud.load_balancers_max": null, "monitoring.calendar_feed": true, "status_page_custom_domain": true, "automations.premium_actions": true, "integrations.connections_max": null, "integrations.chat_destinations": null }, "stripe_customer_id": null, "require_reauth_destructive": false, "require_reauth_power": false, "dynamic_ip_default_strict": false, "dynamic_ip_default_fail_closed": false, "require_2fa": false, "password_min_length": null, "password_require_symbols": null, "password_max_age_days": null, "entitlement_overrides_meta": null, "base_currency": "EUR", "price_display": "net", "vat_rate": "21.00", "country": null, "is_demo": true, "timezone": null, "sso_required": false, "suspended_at": null, "suspended_reason": null, "ip_allowlist": null, "session_lifetime_days": null, "pagerduty_webhook_token": null, "vat_number": null, "vat_status": null, "vat_trader_name": null, "vat_country": null, "vat_consultation_number": null, "vat_checked_at": null, "billing_email": null, "billing_cc": null, "billing_reference": null, "purge_after": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null, "purge_reminder_sent_at": null, "alerts_quiet_until": null, "billing_country": null, "trial_used_at": null, "recap_cadence": "monthly", "brand_logo_url": "http://localhost/storage/org-brand-logos/docs-demo-northwind.svg", "brand_accent_color": "#0F766E", "brand_email_from_name": "Northwind Cloud", "acquisition_src": null, "acquisition_plan": null, "acquisition_cadence": null, "acquisition_code": null, "customer_number": "4200017", "size_band": null, "presignup_first_page": null, "presignup_sessions": null, "presignup_days": null, "sso_required_since": null, "is_internal": false, "client_field_id": null, "onboarding_report_sent_at": null, "notification_defaults": null, "api_writes_enabled_at": null, "is_sandbox": false, "referral_code": "northwind-cloud", "acquisition_ref": null, "analytics_id": "api.infranest.io-4200017", "subscription": { "id": 1, "organization_id": 1, "plan_id": 2, "status": "active", "provider": "stripe", "provider_subscription_id": "sub_demo_northwind", "trial_ends_at": null, "current_period_start": "2026-01-01T00:00:00.000000Z", "current_period_end": "2026-02-15T12:00:00.000000Z", "canceled_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "cancel_at_period_end": false, "stripe_price_id": null, "currency": "eur", "trial_reminder_sent_at": null, "renewal_reminder_sent_at": null, "card_expiry_reminder_sent_at": null, "addons": [], "card_on_file": false, "trial_recap_sent_at": null, "trial_last_call_sent_at": null, "trial_first_steps_sent_at": null, "trial_ended_at": null, "trial_reactivation_sent_at": null, "recap_period_start": null, "renewal_recap_sent_for": null, "discount_code": null, "discount_percent": null, "discount_amount_off": null, "discount_duration": null, "discount_starts_at": null, "discount_ends_at": null, "discount_label": null, "plan": { "id": 2, "name": "Pro", "slug": "pro", "description": "For freelancers & solo devs — faster checks, cloud, API and automations.", "limits": { "api": true, "rate": { "manual_sync_per_hour": 30, "domain_checks_per_hour": 100, "monitor_checks_per_hour": 120, "provider_api_per_minute": 300 }, "cloud": true, "api.mcp": true, "domains": 100, "servers": 10, "api.read": true, "monitors": 50, "webhooks": true, "api.write": true, "dns.drift": true, "dns_zones": 100, "drop_catch": true, "automations": 25, "data_import": true, "dynamic_ips": 10, "certificates": 100, "status_pages": 3, "team_members": 3, "cloud.backups": true, "cloud.volumes": true, "dns.templates": true, "organizations": 1, "api.tokens_max": 5, "cloud.firewalls": true, "cloud.snapshots": true, "watched_domains": 50, "cloud.volumes_max": 10, "external_monitors": 5, "dropcatch.register": true, "cloud.firewalls_max": 5, "audit.retention_days": 30, "domains.registration": true, "monitor_min_interval": 60, "monitoring.incidents": true, "monitoring.maintenance": true, "cloud.load_balancers_max": 0, "monitoring.calendar_feed": true, "monitoring.retention_days": 90, "status_page_custom_domain": true, "dns.history_retention_days": 90, "automations.premium_actions": true, "integrations.connections_max": 5 }, "price_monthly": 2250, "price_yearly": 22800, "active": true, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "is_public": true, "sort_order": 2, "stripe_product_id": null, "stripe_prices": null, "prices": { "eur": { "yearly": 22800, "monthly": 2250 } }, "trial_days": 0, "recommended": false, "name_i18n": null, "description_i18n": null, "badge": null, "tagline_i18n": { "de": "Freelancer & Solo-Entwickler", "en": "Freelancers & solo devs", "fr": "Freelances & développeurs solo", "nl": "Freelancers & solo-ontwikkelaars" }, "highlights_i18n": { "de": [ "Alles in Free", "100 Domains" ], "en": [ "Everything in Free", "100 domains" ], "fr": [ "Tout dans Free", "100 domaines" ], "nl": [ "Alles in Free", "100 domeinen" ] }, "contact_sales": false, "contact_url": null } }, "users": [ { "id": 2, "name": "Sam Okoye", "email": "sam@example.com", "analytics_id": null, "pivot": { "organization_id": 1, "user_id": 2, "org_role_id": 2, "sso_role_managed": false, "sso_external": false, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z" } }, { "id": 3, "name": "Priya Raghunathan", "email": "priya@example.com", "analytics_id": null, "pivot": { "organization_id": 1, "user_id": 3, "org_role_id": 3, "sso_role_managed": false, "sso_external": false, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z" } } ] } ```
## Roles ### List roles {#get-organizations-organization-roles}
`GET` `/organizations/{organization}/roles` **Scope:** `members.read` · **Changes data:** no The built-in roles followed by the organization’s custom roles, each with its permissions. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/roles" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "data": [ { "id": 2, "organization_id": null, "name": "Admin", "slug": "admin", "is_system": true, "permissions": { "dns.read": true, "dns.write": true, "cloud.read": true, "cloud.write": true, "billing.read": true, "domains.read": true, "roles.manage": false, "billing.write": false, "domains.write": true, "domains.delete": false, "members.manage": true, "monitoring.read": true, "monitoring.write": true }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null }, { "id": 3, "organization_id": null, "name": "Member", "slug": "member", "is_system": true, "permissions": { "dns.read": true, "dns.write": false, "cloud.read": true, "cloud.write": false, "billing.read": false, "domains.read": true, "roles.manage": false, "billing.write": false, "domains.write": false, "domains.delete": false, "members.manage": false, "monitoring.read": true, "monitoring.write": false }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null } ] } ```
--- ### Get a role {#get-organizations-organization-roles-id}
`GET` `/organizations/{organization}/roles/{id}` **Scope:** `members.read` · **Changes data:** no One role and its permissions. Either a built-in role or one of this organization’s custom roles. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `id`
path · required | integer | The id's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/roles/1" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "data": { "id": 1, "organization_id": null, "name": "Owner", "slug": "owner", "is_system": true, "permissions": { "dns.read": true, "dns.write": true, "cloud.read": true, "cloud.write": true, "billing.read": true, "domains.read": true, "roles.manage": true, "billing.write": true, "domains.write": true, "domains.delete": true, "members.manage": true, "monitoring.read": true, "monitoring.write": true }, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "deleted_at": null, "purge_after": null, "purge_reminder_sent_at": null, "deleted_by_id": null, "deleted_by_label": null, "deletion_reason": null } } ```
## Sandbox ### Reset a sandbox {#post-organizations-organization-sandbox-reset}
`POST` `/organizations/{organization}/sandbox/reset` **Scope:** any token · **Changes data:** yes — only where API writes are switched on for the organization Removes everything in your sandbox organization and restores its sample zones, records, monitors, server and tags. Works only on a sandbox, with its own test token or from the app; any other organization answers 404. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`write_disabled`](../errors.md#write_disabled), [`organization_suspended`](../errors.md#organization_suspended), [`not_found`](../errors.md#not_found), [`idempotency_in_progress`](../errors.md#idempotency_in_progress), [`validation_failed`](../errors.md#validation_failed), [`idempotency_key_reused`](../errors.md#idempotency_key_reused), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl -X POST "https://api.infranest.io/api/organizations/42/sandbox/reset" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ```