{"components":{"responses":{},"schemas":{"EntraDirectoryResponse":{"description":"Response schema for single Entra Directory","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Entra"}},"properties":{"data":{"$ref":"#/components/schemas/EntraDirectory"}},"title":"EntraDirectoryResponse","type":"object"},"ActorResponse":{"description":"Response schema for single Actor","example":{"data":{"allow_email_otp_sign_in":false,"created_by_directory_id":null,"disabled_at":null,"email":"john.doe@example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2024-01-01T00:00:00Z","last_seen_at":"2024-01-15T10:30:00Z","name":"John Doe","type":"account_admin_user","updated_at":"2024-01-15T10:30:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/Actor"}},"title":"ActorResponse","type":"object"},"GoogleAuthProviderListResponse":{"description":"Response schema for multiple Google Auth Providers","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Google"}]},"properties":{"data":{"description":"Google Auth Provider details","items":{"$ref":"#/components/schemas/GoogleAuthProvider"},"type":"array"}},"title":"GoogleAuthProviderListResponse","type":"object"},"GroupResponse":{"description":"Response schema for single Group","example":{"data":{"directory_id":null,"email":null,"entity_type":"group","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":null,"inserted_at":"2024-01-15T10:30:00Z","name":"Engineering","synced_at":null,"updated_at":"2024-01-15T10:30:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/Group"}},"title":"GroupResponse","type":"object"},"ClientSessionResponse":{"description":"Response schema for single Client Session","example":{"data":{"client_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","client_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Mac OS/15.1.1 connlib/1.4.5 (arm64; 24.1.0)","last_seen_version":"1.4.5","updated_at":"2025-01-01T00:00:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/ClientSession"}},"title":"ClientSessionResponse","type":"object"},"GoogleDirectoryResponse":{"description":"Response schema for single Google Directory","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Google"}},"properties":{"data":{"$ref":"#/components/schemas/GoogleDirectory"}},"title":"GoogleDirectoryResponse","type":"object"},"MembershipPutRequest":{"description":"PUT body for updating Memberships","example":{"memberships":[{"actor_id":"1234-1234"},{"actor_id":"2345-2345"}]},"properties":{"memberships":{"items":{"properties":{"actor_id":{"description":"Actor ID","format":"uuid","type":"string"}},"type":"object"},"type":"array"}},"required":["memberships"],"title":"MembershipPutRequest","type":"object"},"PolicyCreateParams":{"description":"Policy attributes accepted when creating a Policy","example":{"conditions":[{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]}],"description":"Policy to allow something","group_id":"88eae9ce-9179-48c6-8430-770e38dd4775","resource_id":"a9f60587-793c-46ae-8525-597f43ab2fb1"},"properties":{"conditions":{"description":"Conditions that must be satisfied for the Policy to grant access","items":{"$ref":"#/components/schemas/PolicyCondition"},"type":"array"},"description":{"description":"Policy Description","nullable":true,"type":"string"},"group_id":{"description":"Group ID","format":"uuid","type":"string"},"resource_id":{"description":"Resource ID","format":"uuid","type":"string"}},"required":["group_id","resource_id"],"title":"PolicyCreateParams","type":"object"},"OktaAuthProvider":{"description":"Okta Auth Provider","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta","okta_domain":"example.okta.com"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_id":{"description":"Client ID","type":"string"},"client_session_lifetime_secs":{"description":"Client session lifetime in seconds","type":"integer"},"context":{"description":"Context","enum":["clients_and_portal","clients_only","portal_only"],"type":"string"},"id":{"description":"Provider ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_default":{"description":"Whether provider is default","type":"boolean"},"is_disabled":{"description":"Whether provider is disabled","type":"boolean"},"issuer":{"description":"Issuer","type":"string"},"name":{"description":"Provider name","type":"string"},"okta_domain":{"description":"Okta domain","type":"string"},"portal_session_lifetime_secs":{"description":"Portal session lifetime in seconds","type":"integer"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"OktaAuthProvider","type":"object"},"GatewayResponse":{"description":"Response schema for single Gateway","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","ipv4":"1.2.3.4","ipv6":"","name":"vpc-us-east","online":true}},"properties":{"data":{"$ref":"#/components/schemas/Gateway"}},"title":"GatewayResponse","type":"object"},"ResourceCreateRequest":{"description":"POST body for creating a Resource. `site_id` is required unless `type` is `static_device_pool`.","example":{"resource":{"address":"10.0.0.10","address_description":"Production Database","filters":[{"ports":["5432"],"protocol":"tcp"}],"name":"Prod DB","site_id":"0642e09d-b3a2-47e4-9cd1-c2195faeeb67","type":"ip"}},"properties":{"resource":{"properties":{"address":{"description":"Resource address. Not applicable to `static_device_pool`.","nullable":true,"type":"string"},"address_description":{"description":"Resource address description","nullable":true,"type":"string"},"filters":{"description":"Traffic filters restricting the protocols and ports the Resource exposes","items":{"$ref":"#/components/schemas/ResourceFilter"},"type":"array"},"ip_stack":{"description":"IP stack type. Only supported for DNS resources.","enum":["ipv4_only","ipv6_only","dual"],"nullable":true,"type":"string"},"name":{"description":"Resource name","type":"string"},"site_id":{"description":"Site to connect the Resource to. Required for all types except `static_device_pool`.","format":"uuid","nullable":true,"title":"SiteID","type":"string"},"type":{"description":"Resource type. For `static_device_pool`, `address` is not applicable.","enum":["cidr","ip","dns","static_device_pool"],"type":"string"}},"required":["name","type"],"type":"object"}},"required":["resource"],"title":"ResourceCreateRequest","type":"object"},"ClientTokenCreateResponse":{"description":"Response schema for a new Client Token","example":{"data":{"actor_id":"43a7f82f-831a-4a9d-8f17-c66c2bb6e205","expires_at":"2025-01-15T12:34:56.789Z","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2025-01-15T12:34:56.789Z","token":"secret-token-here","updated_at":"2025-01-15T12:34:56.789Z"}},"properties":{"data":{"$ref":"#/components/schemas/ClientTokenResponse"}},"title":"ClientTokenCreateResponse","type":"object"},"ClientToken":{"description":"Client Token metadata","example":{"actor_id":"43a7f82f-831a-4a9d-8f17-c66c2bb6e205","expires_at":"2025-01-15T12:34:56.789Z","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2025-01-15T12:34:56.789Z","updated_at":"2025-01-15T12:34:56.789Z"},"properties":{"actor_id":{"description":"Actor ID","format":"uuid","type":"string"},"expires_at":{"description":"Expiration","format":"date-time","type":"string"},"id":{"description":"Client Token ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","actor_id","expires_at","inserted_at","updated_at"],"title":"ClientToken","type":"object"},"EntraAuthProvider":{"description":"Entra Auth Provider","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","issuer":"https://login.microsoftonline.com/tenant-id/v2.0","name":"Entra"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_session_lifetime_secs":{"description":"Client session lifetime in seconds","type":"integer"},"context":{"description":"Context","enum":["clients_and_portal","clients_only","portal_only"],"type":"string"},"email_claim":{"description":"OIDC claim to use as email","enum":["email","upn","preferred_username"],"type":"string"},"id":{"description":"Provider ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_default":{"description":"Whether provider is default","type":"boolean"},"is_disabled":{"description":"Whether provider is disabled","type":"boolean"},"issuer":{"description":"Issuer","type":"string"},"name":{"description":"Provider name","type":"string"},"portal_session_lifetime_secs":{"description":"Portal session lifetime in seconds","type":"integer"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"EntraAuthProvider","type":"object"},"EntraAuthProviderResponse":{"description":"Response schema for single Entra Auth Provider","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Entra"}},"properties":{"data":{"$ref":"#/components/schemas/EntraAuthProvider"}},"title":"EntraAuthProviderResponse","type":"object"},"ClientTokenRequest":{"description":"POST body for creating a Client Token","example":{"client_token":{"expires_at":"2025-01-15T12:34:56.789Z"}},"properties":{"client_token":{"$ref":"#/components/schemas/ClientTokenCreate"}},"required":["client_token"],"title":"ClientTokenRequest","type":"object"},"ExternalIdentity":{"description":"External Identity","example":{"account_id":"5e6f7d8c-9b0a-1c2d-3e4f-5a6b7c8d9e0f","actor_id":"cdfa97e6-cca1-41db-8fc7-864daedb46df","directory_id":"9f8e7d6c-5b4a-3c2b-1a0e-9f8e7d6c5b4a","family_name":"Doe","given_name":"John","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":"2551705710219359","inserted_at":"2025-01-15T12:34:56.789Z","issuer":"https://accounts.google.com","name":"John Doe","picture":"https://example.com/avatar.jpg","synced_at":"2025-01-15T12:34:56.789Z"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"actor_id":{"description":"Actor ID","format":"uuid","type":"string"},"directory_id":{"description":"Directory UUID reference","format":"uuid","type":"string"},"family_name":{"description":"Family name","type":"string"},"firezone_avatar_url":{"description":"Firezone-hosted avatar URL","type":"string"},"given_name":{"description":"Given name","type":"string"},"id":{"description":"External Identity ID","format":"uuid","type":"string"},"idp_id":{"description":"IDP-specific identifier for this identity","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"issuer":{"description":"Identity issuer URL (e.g., 'https://accounts.google.com', 'https://company.okta.com')","type":"string"},"middle_name":{"description":"Middle name","type":"string"},"name":{"description":"Full name","type":"string"},"nickname":{"description":"Nickname","type":"string"},"picture":{"description":"Profile picture URL","type":"string"},"preferred_username":{"description":"Preferred username","type":"string"},"profile":{"description":"Profile URL","type":"string"},"synced_at":{"description":"Last sync timestamp","format":"date-time","type":"string"}},"required":["id","actor_id","issuer","idp_id"],"title":"ExternalIdentity","type":"object"},"ClientPutRequest":{"description":"PUT body for updating a Client","example":{"client":{"name":"John's Macbook Air"}},"properties":{"client":{"$ref":"#/components/schemas/ClientPut"}},"required":["client"],"title":"ClientPutRequest","type":"object"},"OktaDirectoryResponse":{"description":"Response schema for single Okta Directory","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta"}},"properties":{"data":{"$ref":"#/components/schemas/OktaDirectory"}},"title":"OktaDirectoryResponse","type":"object"},"GatewayTokenResponse":{"description":"Response schema for a new Gateway Token","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","token":"secret-token-here"}},"properties":{"data":{"$ref":"#/components/schemas/GatewayToken"}},"title":"GatewayTokenResponse","type":"object"},"GroupCreateRequest":{"description":"POST body for creating a Group","example":{"group":{"name":"Engineering"}},"properties":{"group":{"properties":{"name":{"description":"Group Name","type":"string"}},"required":["name"],"type":"object"}},"required":["group"],"title":"GroupCreateRequest","type":"object"},"DeletedClientTokenResponse":{"description":"Response schema for a deleted Client Token","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205"}},"properties":{"data":{"properties":{"id":{"description":"Client Token ID","format":"uuid","type":"string"}},"required":["id"],"type":"object"}},"title":"DeletedClientTokenResponse","type":"object"},"ChangeLog":{"description":"A single entry from the account audit log.\n\nEach entry records one create, update, or delete event against an\naccount-scoped object. Entries are returned in time-based order with\nthe most recent change first.\n","example":{"after":{"email":"jane.smith@example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Jane Smith"},"before":{"email":"jane@example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Jane Doe"},"event_id":"c00060db0c2c8eb400000000","object":"actors","operation":"update","subject":{"actor_email":"admin@example.com","actor_id":"84e7f82f-831a-4a9d-8f17-c66c2bb6e205","actor_name":"Admin User","actor_type":"account_admin_user","auth_provider_id":"98776234-1234-5678-9012-345678901234","ip":"1.2.3.4","ip_city":"San Francisco","ip_lat":37.7749,"ip_lon":-122.4194,"ip_region":"California","user_agent":"Mozilla/5.0"},"timestamp":"2026-05-26T12:34:56.789Z"},"properties":{"after":{"additionalProperties":true,"description":"The state of the object after the change. `null` for `delete`\nevents. Sensitive fields such as tokens, secrets, and password\nhashes are replaced with the literal string `\"[redacted]\"`.\n","nullable":true,"type":"object"},"before":{"additionalProperties":true,"description":"The state of the object before the change. `null` for `insert`\nevents. Sensitive fields such as tokens, secrets, and password\nhashes are replaced with the literal string `\"[redacted]\"`.\n","nullable":true,"type":"object"},"event_id":{"description":"Opaque identifier for the audit log entry. A 24-character lowercase\nhexadecimal string, lexicographically sortable within an account and\naligned with the order changes were committed.\n","example":"c00060db0c2c8eb400000000","type":"string"},"object":{"description":"The kind of object that was changed.","example":"actors","type":"string"},"operation":{"description":"The kind of change that was applied.","enum":["insert","update","delete"],"type":"string"},"subject":{"$ref":"#/components/schemas/Subject"},"timestamp":{"description":"RFC 3339 timestamp identifying when the change was committed.","format":"date-time","type":"string"}},"required":["event_id","timestamp","object","operation"],"title":"ChangeLog","type":"object"},"Site":{"description":"Site","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"vpc-us-east"},"properties":{"id":{"description":"Site ID","format":"uuid","type":"string"},"name":{"description":"Site Name","type":"string"}},"required":["id","name"],"title":"Site","type":"object"},"SiteResponse":{"description":"Response schema for single Site","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"vpc-us-east"}},"properties":{"data":{"$ref":"#/components/schemas/Site"}},"title":"SiteResponse","type":"object"},"ClientTokenListResponse":{"description":"Response schema for multiple Client Tokens","example":{"data":[{"actor_id":"43a7f82f-831a-4a9d-8f17-c66c2bb6e205","expires_at":"2025-01-15T12:34:56.789Z","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2025-01-15T12:34:56.789Z","updated_at":"2025-01-15T12:34:56.789Z"}],"metadata":{"count":1,"limit":10,"next_page":null,"prev_page":null}},"properties":{"data":{"description":"Client Token metadata","items":{"$ref":"#/components/schemas/ClientToken"},"type":"array"},"metadata":{"description":"Pagination metadata","properties":{"count":{"description":"Total number of matching records","type":"integer"},"limit":{"description":"Page size","type":"integer"},"next_page":{"description":"Cursor to fetch the next page","nullable":true,"type":"string"},"prev_page":{"description":"Cursor to fetch the previous page","nullable":true,"type":"string"}},"required":["count","limit","next_page","prev_page"],"type":"object"}},"title":"ClientTokenListResponse","type":"object"},"GoogleDirectory":{"description":"Google Directory","example":{"domain":"example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Google"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"disabled_reason":{"description":"Reason for disabling","type":"string"},"domain":{"description":"Google Workspace domain","type":"string"},"error":{"description":"Last error message","type":"string"},"error_count":{"description":"Error count","type":"integer"},"error_emailed_at":{"description":"Error email timestamp","format":"date-time","type":"string"},"group_sync_mode":{"description":"Group sync mode","enum":["all","filtered","disabled"],"type":"string"},"id":{"description":"Directory ID","format":"uuid","type":"string"},"impersonation_email":{"description":"Impersonation email","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_disabled":{"description":"Whether directory is disabled","type":"boolean"},"name":{"description":"Directory name","type":"string"},"orgunit_sync_enabled":{"description":"Whether org unit sync is enabled","type":"boolean"},"synced_at":{"description":"Last sync timestamp","format":"date-time","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"GoogleDirectory","type":"object"},"ChangeLogsResponse":{"description":"Response schema for a page of Change Log entries.\n\nEntries are returned in `event_id` order with the most recent change\nfirst. Each page contains at most 100 entries (50 by default); use the\n`metadata.next_page` cursor to fetch the following page.\n","example":{"data":[{"after":{"name":"Jane Smith"},"before":{"name":"Jane Doe"},"event_id":"c00060db0c2c8eb400000000","object":"actors","operation":"update","subject":null,"timestamp":"2026-05-26T12:34:56.789Z"}],"metadata":{"count":1,"limit":50,"next_page":null,"prev_page":null}},"properties":{"data":{"description":"Change log entries for the requested window.","items":{"$ref":"#/components/schemas/ChangeLog"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ChangeLogsResponse","type":"object"},"PolicyResponse":{"description":"Response schema for single Policy","example":{"data":{"conditions":[{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]}],"description":"Policy to allow something","group_id":"88eae9ce-9179-48c6-8430-770e38dd4775","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","resource_id":"a9f60587-793c-46ae-8525-597f43ab2fb1"}},"properties":{"data":{"$ref":"#/components/schemas/Policy"}},"title":"PolicyResponse","type":"object"},"DeletedClientTokensResponse":{"description":"Response schema for deleted Client Tokens","example":{"data":{"deleted_count":3}},"properties":{"data":{"properties":{"deleted_count":{"description":"Number of tokens that were deleted","type":"integer"}},"required":["deleted_count"],"type":"object"}},"title":"DeletedClientTokensResponse","type":"object"},"GroupListResponse":{"description":"Response schema for multiple Groups","example":{"data":[{"directory_id":null,"email":null,"entity_type":"group","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":null,"inserted_at":"2024-01-15T10:30:00Z","name":"Engineering","synced_at":null,"updated_at":"2024-01-15T10:30:00Z"},{"directory_id":"6b4e3a2c-1234-5678-9abc-def012345678","email":"firezone-sync-admins@example.com","entity_type":"group","id":"4ae929a7-1973-43f2-a1a8-9221b91a4c0e","idp_id":"google-workspace-group-123","inserted_at":"2024-01-10T08:15:00Z","name":"firezone-sync-admins","synced_at":"2024-01-14T16:00:00Z","updated_at":"2024-01-14T16:45:00Z"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Group details","items":{"$ref":"#/components/schemas/Group"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"GroupListResponse","type":"object"},"OktaAuthProviderListResponse":{"description":"Response schema for multiple Okta Auth Providers","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta"}]},"properties":{"data":{"description":"Okta Auth Provider details","items":{"$ref":"#/components/schemas/OktaAuthProvider"},"type":"array"}},"title":"OktaAuthProviderListResponse","type":"object"},"DeletedGatewayTokenResponse":{"description":"Response schema for a deleted Gateway Token","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205"}},"properties":{"data":{"properties":{"id":{"description":"Gateway Token ID","format":"uuid","type":"string"}},"required":["id"],"type":"object"}},"title":"DeletedGatewayTokenResponse","type":"object"},"EntraAuthProviderListResponse":{"description":"Response schema for multiple Entra Auth Providers","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Entra"}]},"properties":{"data":{"description":"Entra Auth Provider details","items":{"$ref":"#/components/schemas/EntraAuthProvider"},"type":"array"}},"title":"EntraAuthProviderListResponse","type":"object"},"Membership":{"description":"Membership","example":[{"id":"7cb89288-1fb3-433e-a522-2d087e45988d","name":"John Doe","type":"account_user"}],"items":{"properties":{"id":{"description":"Actor ID","format":"uuid","type":"string"},"name":{"description":"Actor Name","type":"string"},"type":{"description":"Actor Type","type":"string"}},"type":"object"},"title":"Membership","type":"array"},"OIDCAuthProvider":{"description":"OIDC Auth Provider","example":{"client_id":"my-client-id","email_verification_method":"claim","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"OIDC Provider"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_id":{"description":"Client ID","type":"string"},"client_session_lifetime_secs":{"description":"Client session lifetime in seconds","type":"integer"},"context":{"description":"Context","enum":["clients_and_portal","clients_only","portal_only"],"type":"string"},"discovery_document_uri":{"description":"Discovery document URI","type":"string"},"email_verification_method":{"description":"How sign-in verifies the email claim","enum":["none","claim","proof"],"type":"string"},"id":{"description":"Provider ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_default":{"description":"Whether provider is default","type":"boolean"},"is_disabled":{"description":"Whether provider is disabled","type":"boolean"},"issuer":{"description":"Issuer","type":"string"},"name":{"description":"Provider name","type":"string"},"portal_session_lifetime_secs":{"description":"Portal session lifetime in seconds","type":"integer"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"OIDCAuthProvider","type":"object"},"ExternalIdentityListResponse":{"description":"Response schema for multiple External Identities","example":{"data":[{"account_id":"5e6f7d8c-9b0a-1c2d-3e4f-5a6b7c8d9e0f","actor_id":"8f44a02b-b8eb-406f-8202-4274bf60ebd0","directory_id":"9f8e7d6c-5b4a-3c2b-1a0e-9f8e7d6c5b4a","family_name":"Doe","given_name":"John","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":"2551705710219359","inserted_at":"2025-01-15T12:34:56.789Z","issuer":"https://accounts.google.com","name":"John Doe","picture":"https://example.com/avatar1.jpg","synced_at":"2025-01-15T12:34:56.789Z"},{"account_id":"5e6f7d8c-9b0a-1c2d-3e4f-5a6b7c8d9e0f","actor_id":"38c92cda-1ddb-45b3-9d1a-7efc375e00c1","directory_id":"1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d","family_name":"Smith","given_name":"Jane","id":"8a70eb96-e74b-4cdc-91b8-48c05ef74d4c","idp_id":"2638957392736483","inserted_at":"2025-01-15T11:22:33.456Z","issuer":"https://company.okta.com","name":"Jane Smith","picture":"https://example.com/avatar2.jpg","synced_at":"2025-01-15T11:22:33.456Z"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"External Identity details","items":{"$ref":"#/components/schemas/ExternalIdentity"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ExternalIdentityListResponse","type":"object"},"ClientPut":{"description":"Put schema for updating a single Client","example":{"name":"John's Macbook Air"},"properties":{"name":{"description":"Client Name","type":"string"}},"required":["name"],"title":"ClientPut","type":"object"},"ClientsResponse":{"description":"Response schema for multiple Clients","example":{"data":[{"actor_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","device_serial":"GCCFX0DBQ6L5","device_uuid":"7A461FF9-0BE2-64A9-A418-539D9A21827B","firebase_installation_id":null,"firezone_id":"b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c","hostname":"johns-macbook.example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","identifier_for_vendor":null,"ipv4":"100.64.0.1","ipv6":"fd00:2021:1111::1","name":"John's Macbook Air","online":true,"updated_at":"2025-01-01T00:00:00Z","verified_at":"2025-01-01T00:00:00Z"},{"actor_id":"2ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","device_serial":null,"device_uuid":null,"firebase_installation_id":null,"firezone_id":"6c37c0042f40bbb16e007d0d6c8e77c0ac2cab3cc3b923c42d1157a934e436ac","hostname":null,"id":"9a7f82f-831a-4a9d-8f17-c66c2bb6e205","identifier_for_vendor":"7A461FF9-0BE2-64A9-A418-539D9A21827B","ipv4":"100.64.0.2","ipv6":"fd00:2021:1111::2","name":"iPad","online":false,"updated_at":"2025-01-01T00:00:00Z","verified_at":null}],"metadata":{"limit":2,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Clients details","items":{"$ref":"#/components/schemas/Client"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ClientsResponse","type":"object"},"GoogleDirectoryListResponse":{"description":"Response schema for multiple Google Directories","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Google"}]},"properties":{"data":{"description":"Google Directory details","items":{"$ref":"#/components/schemas/GoogleDirectory"},"type":"array"}},"title":"GoogleDirectoryListResponse","type":"object"},"GatewaysResponse":{"description":"Response schema for multiple Gateways","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","ipv4":"1.2.3.4","ipv6":"","name":"vpc-us-east","online":true},{"id":"6ecc106b-75c1-48a5-846c-14782180c1ff","ipv4":"5.6.7.8","ipv6":"","name":"vpc-us-west","online":true}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Gateways details","items":{"$ref":"#/components/schemas/Gateway"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"GatewaysResponse","type":"object"},"PolicyCreateRequest":{"description":"POST body for creating a Policy","example":{"policy":{"conditions":[{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]}],"description":"Policy to allow something","group_id":"88eae9ce-9179-48c6-8430-770e38dd4775","resource_id":"a9f60587-793c-46ae-8525-597f43ab2fb1"}},"properties":{"policy":{"$ref":"#/components/schemas/PolicyCreateParams"}},"required":["policy"],"title":"PolicyCreateRequest","type":"object"},"ResourceResponse":{"description":"Response schema for single Resource","example":{"data":{"address":"10.0.0.10","address_description":"Production Database","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Prod DB","type":"ip"}},"properties":{"data":{"$ref":"#/components/schemas/Resource"}},"title":"ResourceResponse","type":"object"},"ExternalIdentityResponse":{"description":"Response schema for single External Identity","example":{"data":{"account_id":"5e6f7d8c-9b0a-1c2d-3e4f-5a6b7c8d9e0f","actor_id":"cdfa97e6-cca1-41db-8fc7-864daedb46df","directory_id":"9f8e7d6c-5b4a-3c2b-1a0e-9f8e7d6c5b4a","family_name":"Doe","given_name":"John","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":"2551705710219359","inserted_at":"2025-01-15T12:34:56.789Z","issuer":"https://accounts.google.com","name":"John Doe","picture":"https://example.com/avatar.jpg","synced_at":"2025-01-15T12:34:56.789Z"}},"properties":{"data":{"$ref":"#/components/schemas/ExternalIdentity"}},"title":"ExternalIdentityResponse","type":"object"},"OktaDirectory":{"description":"Okta Directory","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta","okta_domain":"example.okta.com"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_id":{"description":"Client ID","type":"string"},"disabled_reason":{"description":"Reason for disabling","type":"string"},"error":{"description":"Last error message","type":"string"},"error_count":{"description":"Error count","type":"integer"},"error_emailed_at":{"description":"Error email timestamp","format":"date-time","type":"string"},"id":{"description":"Directory ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_disabled":{"description":"Whether directory is disabled","type":"boolean"},"kid":{"description":"Key ID","type":"string"},"name":{"description":"Directory name","type":"string"},"okta_domain":{"description":"Okta domain","type":"string"},"synced_at":{"description":"Last sync timestamp","format":"date-time","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"OktaDirectory","type":"object"},"OktaDirectoryListResponse":{"description":"Response schema for multiple Okta Directories","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta"}]},"properties":{"data":{"description":"Okta Directory details","items":{"$ref":"#/components/schemas/OktaDirectory"},"type":"array"}},"title":"OktaDirectoryListResponse","type":"object"},"GatewaySessionsResponse":{"description":"Response schema for multiple Gateway Sessions","example":{"data":[{"created_at":"2025-01-01T00:00:00Z","gateway_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","gateway_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Linux/6.1.0 connlib/1.4.5 (x86_64)","last_seen_version":"1.4.5"}],"metadata":{"limit":50,"next_page":"abc123","prev_page":null,"total":100}},"properties":{"data":{"description":"Gateway Sessions details","items":{"$ref":"#/components/schemas/GatewaySession"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"GatewaySessionsResponse","type":"object"},"OktaAuthProviderResponse":{"description":"Response schema for single Okta Auth Provider","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Okta"}},"properties":{"data":{"$ref":"#/components/schemas/OktaAuthProvider"}},"title":"OktaAuthProviderResponse","type":"object"},"Subject":{"description":"Identifies the actor and request context that initiated an action.\n\nUsed to describe the principal behind an audit log entry, an authorized\nflow, or any other event surfaced through the API. May be `null` when\nthe action originated outside the context of a Firezone session.\n","example":{"actor_email":"admin@example.com","actor_id":"84e7f82f-831a-4a9d-8f17-c66c2bb6e205","actor_name":"Admin User","actor_type":"account_admin_user","auth_provider_id":"98776234-1234-5678-9012-345678901234","ip":"1.2.3.4","ip_city":"San Francisco","ip_lat":37.7749,"ip_lon":-122.4194,"ip_region":"California","user_agent":"Mozilla/5.0"},"nullable":true,"properties":{"actor_email":{"description":"Email address of the actor, if any.","nullable":true,"type":"string"},"actor_id":{"description":"Identifier of the actor that initiated the action.","format":"uuid","type":"string"},"actor_name":{"description":"Display name of the actor.","type":"string"},"actor_type":{"description":"Type of the actor.","enum":["account_user","account_admin_user","service_account","api_client"],"type":"string"},"auth_provider_id":{"description":"Identifier of the authentication provider that authenticated the actor.","format":"uuid","nullable":true,"type":"string"},"ip":{"description":"IP address the action originated from.","nullable":true,"type":"string"},"ip_city":{"description":"Geo-located city for `ip`, if known.","nullable":true,"type":"string"},"ip_lat":{"description":"Geo-located latitude for `ip`, if known.","nullable":true,"type":"number"},"ip_lon":{"description":"Geo-located longitude for `ip`, if known.","nullable":true,"type":"number"},"ip_region":{"description":"Geo-located region for `ip`, if known.","nullable":true,"type":"string"},"user_agent":{"description":"User agent of the client that initiated the action.","nullable":true,"type":"string"}},"title":"Subject","type":"object"},"ActorsResponse":{"description":"Response schema for multiple Actors","example":{"data":[{"allow_email_otp_sign_in":false,"created_by_directory_id":null,"disabled_at":null,"email":"john.doe@example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2024-01-01T00:00:00Z","last_seen_at":"2024-01-15T10:30:00Z","name":"John Doe","type":"account_admin_user","updated_at":"2024-01-15T10:30:00Z"},{"allow_email_otp_sign_in":true,"created_by_directory_id":"98776234-1234-5678-9012-345678901234","disabled_at":null,"email":"jane.smith@example.com","id":"84e7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2024-01-02T00:00:00Z","last_seen_at":"2024-01-14T15:45:00Z","name":"Jane Smith","type":"account_user","updated_at":"2024-01-14T15:45:00Z"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Actors details","items":{"$ref":"#/components/schemas/Actor"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ActorsResponse","type":"object"},"GoogleAuthProviderResponse":{"description":"Response schema for single Google Auth Provider","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Google"}},"properties":{"data":{"$ref":"#/components/schemas/GoogleAuthProvider"}},"title":"GoogleAuthProviderResponse","type":"object"},"ActorUpdateRequest":{"description":"PATCH/PUT body for updating an Actor. All fields are optional; omitted fields keep their current value.","example":{"actor":{"allow_email_otp_sign_in":false,"email":"joe.user@example.com","name":"Joe User","type":"account_admin_user"}},"properties":{"actor":{"properties":{"allow_email_otp_sign_in":{"default":false,"description":"Allow Email OTP Sign In","type":"boolean"},"email":{"description":"Actor Email. Optional for service accounts.","nullable":true,"type":"string"},"name":{"description":"Actor Name","pattern":"[a-zA-Z][a-zA-Z0-9_]+","type":"string"},"type":{"description":"Actor Type","enum":["account_user","account_admin_user","service_account"],"type":"string"}},"type":"object"}},"required":["actor"],"title":"ActorUpdateRequest","type":"object"},"MembershipResponse":{"description":"Response schema for Membership Updates","example":{"data":{"actor_ids":["4ddfa557-7dfc-484f-894c-2024ec3fe9f7","89d22f71-939d-442d-b148-897b730adfb4"]}},"properties":{"data":{"description":"Memberships","properties":{"actor_ids":{"description":"Actor IDs","items":{"description":"Actor ID","format":"uuid","type":"string"},"type":"array"}},"type":"object"}},"title":"MembershipResponse","type":"object"},"MembershipListResponse":{"description":"Response schema for Memberships","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"John Doe","type":"account_user"},{"id":"cc9f561a-444d-4083-ab38-0abc6cf2314c","name":"Jane Smith","type":"account_admin_user"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Membership details","items":{"$ref":"#/components/schemas/Membership"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"MembershipListResponse","type":"object"},"Actor":{"description":"Actor","example":{"allow_email_otp_sign_in":false,"created_by_directory_id":null,"disabled_at":null,"email":"john.doe@example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2024-01-01T00:00:00Z","last_seen_at":"2024-01-15T10:30:00Z","name":"John Doe","type":"account_admin_user","updated_at":"2024-01-15T10:30:00Z"},"properties":{"allow_email_otp_sign_in":{"default":false,"description":"Allow Email OTP Sign In","type":"boolean"},"created_by_directory_id":{"description":"Directory ID that created this actor","format":"uuid","nullable":true,"type":"string"},"disabled_at":{"description":"When the actor was disabled","format":"date-time","nullable":true,"type":"string"},"email":{"description":"Actor Email","nullable":true,"type":"string"},"id":{"description":"Actor ID","format":"uuid","type":"string"},"inserted_at":{"description":"When the actor was created","format":"date-time","type":"string"},"last_seen_at":{"description":"Last time the actor was seen","format":"date-time","nullable":true,"type":"string"},"name":{"description":"Actor Name","pattern":"[a-zA-Z][a-zA-Z0-9_]+","type":"string"},"type":{"description":"Actor Type","type":"string"},"updated_at":{"description":"When the actor was last updated","format":"date-time","type":"string"}},"required":["name","email","type"],"title":"Actor","type":"object"},"DeletedGatewayTokensResponse":{"description":"Response schema for deleted Gateway Tokens","example":{"data":{"deleted_count":5}},"properties":{"data":{"properties":{"deleted_count":{"description":"Number of tokens that were deleted","type":"integer"}},"required":["deleted_count"],"type":"object"}},"title":"DeletedGatewayTokensResponse","type":"object"},"PolicyUpdateParams":{"description":"Policy attributes accepted when updating a Policy. All fields are optional; omitted fields keep their current value.","example":{"conditions":[{"operator":"is_in_cidr","property":"remote_ip","values":["10.0.0.0/8"]}],"description":"Updated description"},"properties":{"conditions":{"description":"Conditions that must be satisfied for the Policy to grant access","items":{"$ref":"#/components/schemas/PolicyCondition"},"type":"array"},"description":{"description":"Policy Description","nullable":true,"type":"string"},"group_id":{"description":"Group ID","format":"uuid","type":"string"},"resource_id":{"description":"Resource ID","format":"uuid","type":"string"}},"title":"PolicyUpdateParams","type":"object"},"Resource":{"description":"Resource","example":{"address":"10.0.0.10","address_description":"Production Database","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Prod DB","type":"ip"},"properties":{"address":{"description":"Resource address","type":"string"},"address_description":{"description":"Resource address description","type":"string"},"id":{"description":"Resource ID","format":"uuid","type":"string"},"ip_stack":{"description":"IP stack type. Only supported for DNS resources.","enum":["ipv4_only","ipv6_only","dual"],"type":"string"},"name":{"description":"Resource name","type":"string"},"site_id":{"description":"Site to connect the Resource to. Required for all types except `static_device_pool`.","format":"uuid","title":"SiteID","type":"string"},"type":{"description":"Resource type. For `static_device_pool`, `address` is not applicable.","enum":["cidr","ip","dns","static_device_pool"],"type":"string"}},"required":["name","type"],"title":"Resource","type":"object"},"ClientTokenCreate":{"description":"Client Token attributes","example":{"expires_at":"2025-01-15T12:34:56.789Z"},"properties":{"expires_at":{"description":"Expiration","format":"date-time","type":"string"}},"required":["expires_at"],"title":"ClientTokenCreate","type":"object"},"EntraDirectory":{"description":"Entra Directory","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Entra","tenant_id":"12345678-1234-1234-1234-123456789012"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"disabled_reason":{"description":"Reason for disabling","type":"string"},"email_field":{"description":"Graph API user field to use as email","enum":["mail","userPrincipalName"],"type":"string"},"error":{"description":"Last error message","type":"string"},"error_count":{"description":"Error count","type":"integer"},"error_emailed_at":{"description":"Error email timestamp","format":"date-time","type":"string"},"id":{"description":"Directory ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_disabled":{"description":"Whether directory is disabled","type":"boolean"},"name":{"description":"Directory name","type":"string"},"sync_all_groups":{"description":"Sync all groups","type":"boolean"},"synced_at":{"description":"Last sync timestamp","format":"date-time","type":"string"},"tenant_id":{"description":"Microsoft Entra tenant ID","format":"uuid","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"EntraDirectory","type":"object"},"Client":{"description":"Client","example":{"actor_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","device_serial":"GCCFX0DBQ6L5","device_uuid":"7A461FF9-0BE2-64A9-A418-539D9A21827B","firebase_installation_id":null,"firezone_id":"b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c","hostname":"johns-macbook.example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","identifier_for_vendor":null,"ipv4":"100.64.0.1","ipv6":"fd00:2021:1111::1","name":"John's Macbook Air","online":true,"updated_at":"2025-01-01T00:00:00Z","verified_at":"2025-01-01T00:00:00Z"},"properties":{"actor_id":{"description":"Actor ID","format":"uuid","type":"string"},"created_at":{"description":"Client creation timestamp","type":"string"},"device_serial":{"description":"Device manufacturer serial number (unavailable for mobile devices)","type":"string"},"device_uuid":{"description":"Device manufacturer UUID (unavailable for mobile devices)","format":"uuid","type":"string"},"firebase_installation_id":{"description":"Firebase installation ID (Android only)","type":"string"},"firezone_id":{"description":"Firezone ID","type":"string"},"hostname":{"description":"Client hostname (FQDN used for dynamic device pool DNS resolution)","nullable":true,"type":"string"},"id":{"description":"Client ID","format":"uuid","type":"string"},"identifier_for_vendor":{"description":"App installation ID (iOS only)","type":"string"},"ipv4":{"description":"Tunnel IPv4 Address of Client","type":"string"},"ipv6":{"description":"Tunnel IPv6 Address of Client","type":"string"},"name":{"description":"Client Name","type":"string"},"online":{"description":"Online status of Client","type":"boolean"},"updated_at":{"description":"Client update timestamp","type":"string"},"verified_at":{"description":"Client verification timestamp","type":"string"}},"required":["id","actor_id","firezone_id","name","ipv4","ipv6","online","created_at","updated_at"],"title":"Client","type":"object"},"GatewaySessionResponse":{"description":"Response schema for single Gateway Session","example":{"data":{"created_at":"2025-01-01T00:00:00Z","gateway_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","gateway_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Linux/6.1.0 connlib/1.4.5 (x86_64)","last_seen_version":"1.4.5"}},"properties":{"data":{"$ref":"#/components/schemas/GatewaySession"}},"title":"GatewaySessionResponse","type":"object"},"ClientTokenResponse":{"description":"Client Token response","example":{"actor_id":"43a7f82f-831a-4a9d-8f17-c66c2bb6e205","expires_at":"2025-01-15T12:34:56.789Z","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","inserted_at":"2025-01-15T12:34:56.789Z","token":"secret-token-here","updated_at":"2025-01-15T12:34:56.789Z"},"properties":{"actor_id":{"description":"Actor ID","format":"uuid","type":"string"},"expires_at":{"description":"Expiration","format":"date-time","type":"string"},"id":{"description":"Client Token ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"token":{"description":"Encoded token secret","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","actor_id","expires_at","inserted_at","updated_at","token"],"title":"ClientTokenResponse","type":"object"},"EmailOTPAuthProviderResponse":{"description":"Response schema for single Email OTP Auth Provider","example":{"data":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Email OTP"}},"properties":{"data":{"$ref":"#/components/schemas/EmailOTPAuthProvider"}},"title":"EmailOTPAuthProviderResponse","type":"object"},"EntraDirectoryListResponse":{"description":"Response schema for multiple Entra Directories","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Entra"}]},"properties":{"data":{"description":"Entra Directory details","items":{"$ref":"#/components/schemas/EntraDirectory"},"type":"array"}},"title":"EntraDirectoryListResponse","type":"object"},"ClientSessionsResponse":{"description":"Response schema for multiple Client Sessions","example":{"data":[{"client_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","client_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Mac OS/15.1.1 connlib/1.4.5 (arm64; 24.1.0)","last_seen_version":"1.4.5","updated_at":"2025-01-01T00:00:00Z"}],"metadata":{"limit":50,"next_page":"abc123","prev_page":null,"total":100}},"properties":{"data":{"description":"Client Sessions details","items":{"$ref":"#/components/schemas/ClientSession"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ClientSessionsResponse","type":"object"},"PolicyUpdateRequest":{"description":"PUT/PATCH body for updating a Policy","example":{"policy":{"conditions":[{"operator":"is_in_cidr","property":"remote_ip","values":["10.0.0.0/8"]}],"description":"Updated description"}},"properties":{"policy":{"$ref":"#/components/schemas/PolicyUpdateParams"}},"required":["policy"],"title":"PolicyUpdateRequest","type":"object"},"OIDCAuthProviderListResponse":{"description":"Response schema for multiple OIDC Auth Providers","example":{"data":[{"email_verification_method":"claim","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"OIDC Provider"}]},"properties":{"data":{"description":"OIDC Auth Provider details","items":{"$ref":"#/components/schemas/OIDCAuthProvider"},"type":"array"}},"title":"OIDCAuthProviderListResponse","type":"object"},"Gateway":{"description":"Gateway","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","ipv4":"100.64.0.1","ipv6":"fd00:2021:1111::1","name":"vpc-us-east","online":true},"properties":{"id":{"description":"Gateway ID","format":"uuid","type":"string"},"ipv4":{"description":"IPv4 Address of Gateway","type":"string"},"ipv6":{"description":"IPv6 Address of Gateway","type":"string"},"name":{"description":"Gateway Name","pattern":"[a-zA-Z][a-zA-Z0-9_]+","type":"string"},"online":{"description":"Online status of Gateway","type":"boolean"}},"required":["id","name","ipv4","ipv6","online"],"title":"Gateway","type":"object"},"GatewayToken":{"description":"Gateway Token","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","token":"secret-token-here"},"properties":{"id":{"description":"Gateway Token ID","format":"uuid","type":"string"},"token":{"description":"Gateway Token","type":"string"}},"required":["id","token"],"title":"GatewayToken","type":"object"},"SiteID":{"description":"Site to connect the Resource to. Required for all types except `static_device_pool`.","format":"uuid","nullable":true,"title":"SiteID","type":"string"},"Group":{"description":"Group","example":{"directory_id":null,"email":null,"entity_type":"group","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","idp_id":null,"inserted_at":"2024-01-15T10:30:00Z","name":"Engineering","synced_at":null,"updated_at":"2024-01-15T10:30:00Z"},"properties":{"directory_id":{"description":"Directory ID this group belongs to","format":"uuid","nullable":true,"type":"string"},"email":{"description":"Group email address for synced groups","nullable":true,"type":"string"},"entity_type":{"description":"Entity type","enum":["group","org_unit"],"type":"string"},"id":{"description":"Group ID","format":"uuid","type":"string"},"idp_id":{"description":"Identity provider ID for synced groups","nullable":true,"type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"name":{"description":"Group Name","type":"string"},"synced_at":{"description":"Last sync timestamp for synced groups","format":"date-time","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","type":"string"}},"required":["id","name","entity_type","inserted_at","updated_at"],"title":"Group","type":"object"},"ProblemDetails":{"description":"RFC 9457 (Problem Details for HTTP APIs) error response.","example":{"detail":"The requested resource could not be found.","status":404,"title":"Not Found","type":"about:blank"},"properties":{"detail":{"description":"Human-readable explanation specific to this occurrence of the problem.","example":"The requested resource could not be found.","type":"string"},"status":{"description":"HTTP status code.","example":404,"type":"integer"},"title":{"description":"Short, human-readable summary of the problem type (the HTTP status phrase).","example":"Not Found","type":"string"},"type":{"description":"URI identifying the problem type. Always \"about:blank\" for now.","example":"about:blank","type":"string"}},"required":["type","title","status"],"title":"ProblemDetails","type":"object"},"ResourceUpdateRequest":{"description":"PATCH/PUT body for updating a Resource. All fields are optional; omitted fields keep their current value.","example":{"resource":{"address":"10.0.0.10","address_description":"Production Database","filters":[{"ports":["5432"],"protocol":"tcp"}],"name":"Prod DB","site_id":"0642e09d-b3a2-47e4-9cd1-c2195faeeb67","type":"ip"}},"properties":{"resource":{"properties":{"address":{"description":"Resource address. Not applicable to `static_device_pool`.","nullable":true,"type":"string"},"address_description":{"description":"Resource address description","nullable":true,"type":"string"},"filters":{"description":"Traffic filters restricting the protocols and ports the Resource exposes","items":{"$ref":"#/components/schemas/ResourceFilter"},"type":"array"},"ip_stack":{"description":"IP stack type. Only supported for DNS resources.","enum":["ipv4_only","ipv6_only","dual"],"nullable":true,"type":"string"},"name":{"description":"Resource name","type":"string"},"site_id":{"description":"Site to connect the Resource to. Required for all types except `static_device_pool`.","format":"uuid","nullable":true,"title":"SiteID","type":"string"},"type":{"description":"Resource type. For `static_device_pool`, `address` is not applicable.","enum":["cidr","ip","dns","static_device_pool"],"type":"string"}},"type":"object"}},"required":["resource"],"title":"ResourceUpdateRequest","type":"object"},"ResourceFilter":{"description":"Traffic filter restricting the protocols and ports the Resource exposes","example":{"ports":["80","443","8000 - 9000"],"protocol":"tcp"},"properties":{"ports":{"description":"Port numbers or ranges (e.g. `80` or `8000 - 9000`) the filter allows. Not applicable to `icmp`.","items":{"type":"string"},"type":"array"},"protocol":{"description":"Transport protocol the filter applies to","enum":["tcp","udp","icmp"],"type":"string"}},"required":["protocol"],"title":"ResourceFilter","type":"object"},"ActorCreateRequest":{"description":"POST body for creating an Actor","example":{"actor":{"allow_email_otp_sign_in":false,"email":"joe.user@example.com","name":"Joe User","type":"account_admin_user"}},"properties":{"actor":{"properties":{"allow_email_otp_sign_in":{"default":false,"description":"Allow Email OTP Sign In","type":"boolean"},"email":{"description":"Actor Email. Optional for service accounts.","nullable":true,"type":"string"},"name":{"description":"Actor Name","pattern":"[a-zA-Z][a-zA-Z0-9_]+","type":"string"},"type":{"description":"Actor Type","enum":["account_user","account_admin_user","service_account"],"type":"string"}},"required":["name","type"],"type":"object"}},"required":["actor"],"title":"ActorCreateRequest","type":"object"},"MembershipPatchRequest":{"description":"PATCH body for updating Memberships","example":{"memberships":{"add":["1234-1234"],"remove":["2345-2345"]}},"properties":{"memberships":{"properties":{"add":{"description":"Array of Actor IDs","items":{"description":"Actor ID","format":"uuid","type":"string"},"type":"array"},"remove":{"description":"Array of Actor IDs","items":{"description":"Actor ID","format":"uuid","type":"string"},"type":"array"}},"type":"object"}},"required":["memberships"],"title":"MembershipPatchRequest","type":"object"},"ClientResponse":{"description":"Response schema for single Client","example":{"data":{"actor_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","device_serial":"GCCFX0DBQ6L5","device_uuid":"7A461FF9-0BE2-64A9-A418-539D9A21827B","firebase_installation_id":null,"firezone_id":"b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c","hostname":"johns-macbook.example.com","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","identifier_for_vendor":null,"ipv4":"100.64.0.1","ipv6":"fd00:2021:1111::1","name":"John's Macbook Air","online":true,"updated_at":"2025-01-01T00:00:00Z","verified_at":"2025-01-01T00:00:00Z"}},"properties":{"data":{"$ref":"#/components/schemas/Client"}},"title":"ClientResponse","type":"object"},"Policy":{"description":"Policy","example":{"conditions":[{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]}],"description":"Policy to allow something","group_id":"88eae9ce-9179-48c6-8430-770e38dd4775","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","resource_id":"a9f60587-793c-46ae-8525-597f43ab2fb1"},"properties":{"conditions":{"description":"Conditions that must be satisfied for the Policy to grant access","items":{"$ref":"#/components/schemas/PolicyCondition"},"type":"array"},"description":{"description":"Policy Description","nullable":true,"type":"string"},"group_id":{"description":"Group ID. Null if the Group was deleted during directory sync; it is relinked automatically if the Group reappears on a subsequent sync.","format":"uuid","nullable":true,"type":"string"},"id":{"description":"Policy ID","format":"uuid","type":"string"},"resource_id":{"description":"Resource ID","format":"uuid","type":"string"}},"required":["id","group_id","resource_id","description","conditions"],"title":"Policy","type":"object"},"AccountResponse":{"description":"Response schema for Account","properties":{"data":{"$ref":"#/components/schemas/Account"}},"required":["data"],"title":"AccountResponse","type":"object"},"EmailOTPAuthProvider":{"description":"Email OTP Auth Provider","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","issuer":"firezone","name":"Email OTP"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_session_lifetime_secs":{"description":"Client session lifetime in seconds","type":"integer"},"context":{"description":"Context","enum":["clients_and_portal","clients_only","portal_only"],"type":"string"},"id":{"description":"Provider ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_disabled":{"description":"Whether provider is disabled","type":"boolean"},"issuer":{"description":"Issuer","type":"string"},"name":{"description":"Provider name","type":"string"},"portal_session_lifetime_secs":{"description":"Portal session lifetime in seconds","type":"integer"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"EmailOTPAuthProvider","type":"object"},"PolicyCondition":{"description":"A condition that must be satisfied for the Policy to grant access.\n\nAll conditions on a Policy must evaluate to true for access to be\ngranted. A condition is made up of a `property`, an `operator`, and a\nlist of `values`. The valid operators and the meaning of `values`\ndepend on the `property`:\n\n* `remote_ip_location_region` with `is_in` / `is_not_in`: `values` are\n  ISO 3166-1 alpha-2 country codes, e.g. `[\"US\", \"CA\"]`.\n* `remote_ip` with `is_in_cidr` / `is_not_in_cidr`: `values` are CIDR\n  ranges (IPv4 or IPv6), e.g. `[\"10.0.0.0/8\", \"2607:f8b0::/32\"]`.\n* `auth_provider_id` with `is_in` / `is_not_in`: `values` are\n  authentication provider IDs (UUIDs).\n* `current_utc_datetime` with `is_in_day_of_week_time_ranges`: each\n  value is a `DAY/TIME_RANGES/TIMEZONE` string where `DAY` is one of\n  `M T W R F S U` (Monday through Sunday), `TIME_RANGES` is a\n  comma-separated list of `HH:MM-HH:MM` ranges, and `TIMEZONE` is an\n  IANA timezone name, e.g. `\"M/09:00-17:00/America/New_York\"`.\n* `client_verified` with `is`: `values` is a single-element list\n  containing `\"true\"` or `\"false\"`.\n","example":{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]},"properties":{"operator":{"description":"How the values are compared against the property","enum":["is_in","is_not_in","is_in_cidr","is_not_in_cidr","is_in_day_of_week_time_ranges","is"],"type":"string"},"property":{"description":"The attribute of the connection being matched against","enum":["remote_ip_location_region","remote_ip","auth_provider_id","current_utc_datetime","client_verified"],"type":"string"},"values":{"description":"The values to compare against, interpreted per the property","items":{"type":"string"},"type":"array"}},"required":["property","operator","values"],"title":"PolicyCondition","type":"object"},"ValidationProblemDetails":{"description":"RFC 9457 error response for request validation failures. The `validation_errors` member maps each invalid field to a list of human-readable messages.","example":{"detail":"The request body failed validation.","status":422,"title":"Unprocessable Content","type":"about:blank","validation_errors":{"name":["can't be blank"]}},"properties":{"detail":{"example":"The request body failed validation.","type":"string"},"status":{"example":422,"type":"integer"},"title":{"example":"Unprocessable Content","type":"string"},"type":{"example":"about:blank","type":"string"},"validation_errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Map of field name to a list of validation error messages.","type":"object"}},"required":["type","title","status","validation_errors"],"title":"ValidationProblemDetails","type":"object"},"Account":{"description":"Account schema","properties":{"id":{"description":"Account ID","format":"uuid","type":"string"},"key":{"description":"6-character account key","maxLength":6,"minLength":6,"type":"string"},"legal_name":{"description":"Account legal name","type":"string"},"limits":{"$ref":"#/components/schemas/AccountLimits"},"name":{"description":"Account name","type":"string"},"slug":{"description":"Account slug","type":"string"}},"required":["id","slug","key","name"],"title":"Account","type":"object"},"AccountLimits":{"description":"Account limits and usage information","properties":{"account_admin_users":{"$ref":"#/components/schemas/AccountLimit"},"monthly_active_users":{"$ref":"#/components/schemas/AccountLimit"},"service_accounts":{"$ref":"#/components/schemas/AccountLimit"},"sites":{"$ref":"#/components/schemas/AccountLimit"},"users":{"$ref":"#/components/schemas/AccountLimit"}},"title":"AccountLimits","type":"object"},"GoogleAuthProvider":{"description":"Google Auth Provider","example":{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","issuer":"https://accounts.google.com","name":"Google"},"properties":{"account_id":{"description":"Account ID","format":"uuid","type":"string"},"client_session_lifetime_secs":{"description":"Client session lifetime in seconds","type":"integer"},"context":{"description":"Context","enum":["clients_and_portal","clients_only","portal_only"],"type":"string"},"id":{"description":"Provider ID","format":"uuid","type":"string"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"is_default":{"description":"Whether provider is default","type":"boolean"},"is_disabled":{"description":"Whether provider is disabled","type":"boolean"},"issuer":{"description":"Issuer","type":"string"},"name":{"description":"Provider name","type":"string"},"portal_session_lifetime_secs":{"description":"Portal session lifetime in seconds","type":"integer"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","name"],"title":"GoogleAuthProvider","type":"object"},"GroupUpdateRequest":{"description":"PATCH/PUT body for updating a Group. All fields are optional; omitted fields keep their current value.","example":{"group":{"name":"Engineering"}},"properties":{"group":{"properties":{"name":{"description":"Group Name","type":"string"}},"type":"object"}},"required":["group"],"title":"GroupUpdateRequest","type":"object"},"SiteUpdateRequest":{"description":"PATCH/PUT body for updating a Site. All fields are optional; omitted fields keep their current value.","example":{"site":{"name":"vpc-us-east"}},"properties":{"site":{"properties":{"name":{"description":"Site Name","type":"string"}},"type":"object"}},"required":["site"],"title":"SiteUpdateRequest","type":"object"},"ChangeLogResponse":{"description":"Response schema for a single Change Log entry.","properties":{"data":{"$ref":"#/components/schemas/ChangeLog"}},"title":"ChangeLogResponse","type":"object"},"SiteListResponse":{"description":"Response schema for multiple Sites","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"vpc-us-east"},{"id":"6301d7d2-4938-4123-87de-282c01cca656","name":"vpc-us-west"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Site details","items":{"$ref":"#/components/schemas/Site"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"SiteListResponse","type":"object"},"PolicyListResponse":{"description":"Response schema for multiple Policies","example":{"data":[{"conditions":[{"operator":"is_in","property":"remote_ip_location_region","values":["US","CA"]}],"description":"Policy to allow something","group_id":"88eae9ce-9179-48c6-8430-770e38dd4775","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","resource_id":"a9f60587-793c-46ae-8525-597f43ab2fb1"},{"conditions":[],"description":"Policy to allow something else","group_id":"343385a2-5437-4c66-8744-1332421ff736","id":"6301d7d2-4938-4123-87de-282c01cca656","resource_id":"9876bd25-0f6c-48fb-a9fd-196ba9be86e5"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Policy details","items":{"$ref":"#/components/schemas/Policy"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"PolicyListResponse","type":"object"},"EmailOTPAuthProviderListResponse":{"description":"Response schema for multiple Email OTP Auth Providers","example":{"data":[{"id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Email OTP"}]},"properties":{"data":{"description":"Email OTP Auth Provider details","items":{"$ref":"#/components/schemas/EmailOTPAuthProvider"},"type":"array"}},"title":"EmailOTPAuthProviderListResponse","type":"object"},"GatewaySession":{"description":"Gateway Session","example":{"created_at":"2025-01-01T00:00:00Z","gateway_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","gateway_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Linux/6.1.0 connlib/1.4.5 (x86_64)","last_seen_version":"1.4.5"},"properties":{"created_at":{"description":"Session creation timestamp","type":"string"},"gateway_id":{"description":"Gateway ID","format":"uuid","type":"string"},"gateway_token_id":{"description":"Gateway Token ID","format":"uuid","type":"string"},"id":{"description":"Gateway Session ID","format":"uuid","type":"string"},"last_seen_at":{"description":"Timestamp of the session","type":"string"},"last_seen_remote_ip":{"description":"Remote IP at time of session","type":"string"},"last_seen_remote_ip_location_city":{"description":"Remote IP location city","type":"string"},"last_seen_remote_ip_location_lat":{"description":"Remote IP location latitude","type":"number"},"last_seen_remote_ip_location_lon":{"description":"Remote IP location longitude","type":"number"},"last_seen_remote_ip_location_region":{"description":"Remote IP location region","type":"string"},"last_seen_user_agent":{"description":"User agent at time of session","type":"string"},"last_seen_version":{"description":"Gateway version at time of session","type":"string"}},"required":["id","gateway_id","gateway_token_id","last_seen_at","created_at"],"title":"GatewaySession","type":"object"},"SiteCreateRequest":{"description":"POST body for creating a Site","example":{"site":{"name":"vpc-us-east"}},"properties":{"site":{"properties":{"name":{"description":"Site Name","type":"string"}},"required":["name"],"type":"object"}},"required":["site"],"title":"SiteCreateRequest","type":"object"},"ResourceListResponse":{"description":"Response schema for multiple Resources","example":{"data":[{"address":"10.0.0.10","address_description":"Production Database","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"Prod DB","type":"ip"},{"address":"10.0.0.20","address_description":"Production Admin Dashboard","id":"3b9451c9-5616-48f8-827f-009ace22d015","name":"Admin Dashboard","type":"ip"}],"metadata":{"limit":10,"next_page":"98776234123","prev_page":"123123425","total":100}},"properties":{"data":{"description":"Resource details","items":{"$ref":"#/components/schemas/Resource"},"type":"array"},"metadata":{"description":"Pagination metadata","type":"object"}},"title":"ResourceListResponse","type":"object"},"ClientSession":{"description":"Client Session","example":{"client_id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","client_token_id":"6ecc106b-75c1-48a5-846c-14782180c1ff","created_at":"2025-01-01T00:00:00Z","id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","last_seen_at":"2025-01-01T00:00:00Z","last_seen_remote_ip":"1.2.3.4","last_seen_remote_ip_location_city":"San Francisco","last_seen_remote_ip_location_lat":37.7749,"last_seen_remote_ip_location_lon":-122.4194,"last_seen_remote_ip_location_region":"California","last_seen_user_agent":"Mac OS/15.1.1 connlib/1.4.5 (arm64; 24.1.0)","last_seen_version":"1.4.5","updated_at":"2025-01-01T00:00:00Z"},"properties":{"client_id":{"description":"Client ID","format":"uuid","type":"string"},"client_token_id":{"description":"Client Token ID","format":"uuid","type":"string"},"created_at":{"description":"Session creation timestamp","type":"string"},"id":{"description":"Client Session ID","format":"uuid","type":"string"},"last_seen_at":{"description":"Timestamp of the session","type":"string"},"last_seen_remote_ip":{"description":"Remote IP at time of session","type":"string"},"last_seen_remote_ip_location_city":{"description":"Remote IP location city","type":"string"},"last_seen_remote_ip_location_lat":{"description":"Remote IP location latitude","type":"number"},"last_seen_remote_ip_location_lon":{"description":"Remote IP location longitude","type":"number"},"last_seen_remote_ip_location_region":{"description":"Remote IP location region","type":"string"},"last_seen_user_agent":{"description":"User agent at time of session","type":"string"},"last_seen_version":{"description":"Client version at time of session","type":"string"},"updated_at":{"description":"Session update timestamp","type":"string"}},"required":["id","client_id","client_token_id","last_seen_at","created_at","updated_at"],"title":"ClientSession","type":"object"},"AccountLimit":{"description":"Account limit with usage information","properties":{"available":{"description":"Remaining available count","type":"integer"},"total":{"description":"Total allowed count","type":"integer"},"used":{"description":"Current usage count","type":"integer"}},"required":["used","available","total"],"title":"AccountLimit","type":"object"},"OIDCAuthProviderResponse":{"description":"Response schema for single OIDC Auth Provider","example":{"data":{"email_verification_method":"claim","id":"42a7f82f-831a-4a9d-8f17-c66c2bb6e205","name":"OIDC Provider"}},"properties":{"data":{"$ref":"#/components/schemas/OIDCAuthProvider"}},"title":"OIDCAuthProviderResponse","type":"object"}},"securitySchemes":{"authorization":{"scheme":"bearer","type":"http"}}},"info":{"description":"The Firezone REST API is eventually consistent. After creating or updating a resource, it may take a second or two for the change to be reflected in subsequent read requests. If you receive a 404 for a recently created or updated entity, wait briefly and retry the request.","title":"Firezone API","version":"1.0"},"openapi":"3.0.0","paths":{"/groups":{"get":{"callbacks":{},"operationId":"PortalAPI.GroupController.index","parameters":[{"description":"Limit Groups returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupListResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Groups","tags":["Groups"]},"post":{"callbacks":{},"operationId":"PortalAPI.GroupController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreateRequest"}}},"description":"Group Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create Group","tags":["Groups"]}},"/actors/{actor_id}/external_identities":{"get":{"callbacks":{},"operationId":"PortalAPI.ExternalIdentityController.index","parameters":[{"description":"Actor ID","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"Limit External Identities returned","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalIdentityListResponse"}}},"description":"ExternalIdentity List Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List External Identities for an Actor","tags":["ExternalIdentities"]}},"/change_logs/{event_id}":{"get":{"callbacks":{},"description":"Fetches a single Change Log entry by its `event_id`.\n","operationId":"PortalAPI.ChangeLogController.show","parameters":[{"description":"Identifier of the Change Log entry. A 24-character lowercase hexadecimal string.","example":"c00060db0c2c8eb400000000","in":"path","name":"event_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeLogResponse"}}},"description":"Change Log Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Change Log","tags":["Change Logs"]}},"/clients/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.ClientController.delete","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Client","tags":["Clients"]},"get":{"callbacks":{},"operationId":"PortalAPI.ClientController.show","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Client","tags":["Clients"]},"patch":{"callbacks":{},"operationId":"PortalAPI.ClientController.update (2)","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPutRequest"}}},"description":"Client Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update Client","tags":["Clients"]},"put":{"callbacks":{},"operationId":"PortalAPI.ClientController.update","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientPutRequest"}}},"description":"Client Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update Client","tags":["Clients"]}},"/sites/{site_id}/gateways/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.GatewayController.delete","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}},{"description":"Gateway ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayResponse"}}},"description":"Gateway Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Gateway","tags":["Gateways"]},"get":{"callbacks":{},"operationId":"PortalAPI.GatewayController.show","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}},{"description":"Gateway ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayResponse"}}},"description":"Gateway Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Gateway","tags":["Gateways"]}},"/client_sessions":{"get":{"callbacks":{},"operationId":"PortalAPI.ClientSessionController.index","parameters":[{"description":"Limit Client Sessions returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}},{"description":"Filter by Client ID","example":"00000000-0000-0000-0000-000000000000","in":"query","name":"client_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSessionsResponse"}}},"description":"Client Sessions Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Client Sessions","tags":["Client Sessions"]}},"/oidc_auth_providers":{"get":{"callbacks":{},"operationId":"PortalAPI.OIDCAuthProviderController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCAuthProviderListResponse"}}},"description":"OIDC Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List OIDC Auth Providers","tags":["OIDC Auth Providers"]}},"/sites/{site_id}/gateway_tokens/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.GatewayTokenController.delete","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}},{"description":"Token ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedGatewayTokenResponse"}}},"description":"Deleted Token Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Gateway Token","tags":["Gateway Tokens"]}},"/actors/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.ActorController.delete","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorResponse"}}},"description":"ActorResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete an Actor","tags":["Actors"]},"get":{"callbacks":{},"operationId":"PortalAPI.ActorController.show","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorResponse"}}},"description":"ActorResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Actor","tags":["Actors"]},"patch":{"callbacks":{},"description":"Updates an Actor.\n\n**Warning: changing an Actor's email signs them out and unlinks their identity providers.**\n\nIf the `email` field is changed to a different address, Firezone will:\n\n- Unlink every identity provider (Google, Okta, Entra, etc.) connected to this Actor.\n- End all active sessions for this Actor, both in the admin portal and on\n  connected Client devices. The user will be signed out immediately.\n\nThe Actor will need to sign in again through their identity provider, which\nre-links it under the new email.\n\nEmail comparison ignores case and surrounding whitespace, so changes like\n`User@Example.com` → `user@example.com` are not treated as a real change\nand will not unlink identities.\n","operationId":"PortalAPI.ActorController.update (2)","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorUpdateRequest"}}},"description":"Actor attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorResponse"}}},"description":"ActorResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update an Actor","tags":["Actors"]},"put":{"callbacks":{},"description":"Updates an Actor.\n\n**Warning: changing an Actor's email signs them out and unlinks their identity providers.**\n\nIf the `email` field is changed to a different address, Firezone will:\n\n- Unlink every identity provider (Google, Okta, Entra, etc.) connected to this Actor.\n- End all active sessions for this Actor, both in the admin portal and on\n  connected Client devices. The user will be signed out immediately.\n\nThe Actor will need to sign in again through their identity provider, which\nre-links it under the new email.\n\nEmail comparison ignores case and surrounding whitespace, so changes like\n`User@Example.com` → `user@example.com` are not treated as a real change\nand will not unlink identities.\n","operationId":"PortalAPI.ActorController.update","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorUpdateRequest"}}},"description":"Actor attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorResponse"}}},"description":"ActorResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update an Actor","tags":["Actors"]}},"/clients/{id}/verify":{"put":{"callbacks":{},"operationId":"PortalAPI.ClientController.verify","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Verify Client","tags":["Clients"]}},"/gateway_sessions/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.GatewaySessionController.show","parameters":[{"description":"Gateway Session ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewaySessionResponse"}}},"description":"Gateway Session Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Gateway Session","tags":["Gateway Sessions"]}},"/actors/{actor_id}/client_tokens":{"delete":{"callbacks":{},"operationId":"PortalAPI.ClientTokenController.delete_all","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedClientTokensResponse"}}},"description":"Deleted Client Tokens Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete all Client Tokens for service_account, account_user, or account_admin_user actors","tags":["Client Tokens"]},"get":{"callbacks":{},"operationId":"PortalAPI.ClientTokenController.index","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"Limit Client Tokens returned","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTokenListResponse"}}},"description":"Client Token List Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Client Tokens for service_account, account_user, or account_admin_user actors","tags":["Client Tokens"]},"post":{"callbacks":{},"operationId":"PortalAPI.ClientTokenController.create","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTokenRequest"}}},"description":"Client Token Attributes","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTokenCreateResponse"}}},"description":"Client Token Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create a Client Token for a Service Account","tags":["Client Tokens"]}},"/actors/{actor_id}/client_tokens/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.ClientTokenController.delete","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"Client Token ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedClientTokenResponse"}}},"description":"Deleted Client Token Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Client Token","tags":["Client Tokens"]},"get":{"callbacks":{},"operationId":"PortalAPI.ClientTokenController.show","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"Client Token ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTokenResponse"}}},"description":"Client Token Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show a Client Token for service_account, account_user, or account_admin_user actors","tags":["Client Tokens"]}},"/email_otp_auth_providers":{"get":{"callbacks":{},"operationId":"PortalAPI.EmailOTPAuthProviderController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailOTPAuthProviderListResponse"}}},"description":"Email OTP Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Email OTP Auth Providers","tags":["Email OTP Auth Providers"]}},"/entra_auth_providers":{"get":{"callbacks":{},"operationId":"PortalAPI.EntraAuthProviderController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntraAuthProviderListResponse"}}},"description":"Entra Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Entra Auth Providers","tags":["Entra Auth Providers"]}},"/sites":{"get":{"callbacks":{},"operationId":"PortalAPI.SiteController.index","parameters":[{"description":"Limit Sites returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteListResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Sites","tags":["Sites"]},"post":{"callbacks":{},"operationId":"PortalAPI.SiteController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteCreateRequest"}}},"description":"Site Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create Site","tags":["Sites"]}},"/sites/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.SiteController.delete","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Site","tags":["Sites"]},"get":{"callbacks":{},"operationId":"PortalAPI.SiteController.show","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Site","tags":["Sites"]},"patch":{"callbacks":{},"operationId":"PortalAPI.SiteController.update (2)","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpdateRequest"}}},"description":"Site Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Site","tags":["Sites"]},"put":{"callbacks":{},"operationId":"PortalAPI.SiteController.update","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteUpdateRequest"}}},"description":"Site Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteResponse"}}},"description":"Site Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Site","tags":["Sites"]}},"/google_auth_providers":{"get":{"callbacks":{},"operationId":"PortalAPI.GoogleAuthProviderController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthProviderListResponse"}}},"description":"Google Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Google Auth Providers","tags":["Google Auth Providers"]}},"/client_sessions/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.ClientSessionController.show","parameters":[{"description":"Client Session ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSessionResponse"}}},"description":"Client Session Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Client Session","tags":["Client Sessions"]}},"/policies/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.PolicyController.delete","parameters":[{"description":"Policy ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Policy","tags":["Policies"]},"get":{"callbacks":{},"operationId":"PortalAPI.PolicyController.show","parameters":[{"description":"Policy ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Policy","tags":["Policies"]},"patch":{"callbacks":{},"operationId":"PortalAPI.PolicyController.update (2)","parameters":[{"description":"Policy ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdateRequest"}}},"description":"Policy Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Policy","tags":["Policies"]},"put":{"callbacks":{},"operationId":"PortalAPI.PolicyController.update","parameters":[{"description":"Policy ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdateRequest"}}},"description":"Policy Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Policy","tags":["Policies"]}},"/resources":{"get":{"callbacks":{},"operationId":"PortalAPI.ResourceController.index","parameters":[{"description":"Limit Resources returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceListResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Resources","tags":["Resources"]},"post":{"callbacks":{},"operationId":"PortalAPI.ResourceController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceCreateRequest"}}},"description":"Resource Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create Resource","tags":["Resources"]}},"/actors/{actor_id}/external_identities/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.ExternalIdentityController.delete","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"External Identity ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalIdentityResponse"}}},"description":"ExternalIdentity Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete an External Identity","tags":["ExternalIdentities"]},"get":{"callbacks":{},"operationId":"PortalAPI.ExternalIdentityController.show","parameters":[{"description":"Actor ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"actor_id","required":true,"schema":{"type":"string"}},{"description":"External Identity ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalIdentityResponse"}}},"description":"ExternalIdentity Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show External Identity","tags":["ExternalIdentities"]}},"/okta_auth_providers":{"get":{"callbacks":{},"operationId":"PortalAPI.OktaAuthProviderController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OktaAuthProviderListResponse"}}},"description":"Okta Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Okta Auth Providers","tags":["Okta Auth Providers"]}},"/groups/{group_id}/memberships":{"get":{"callbacks":{},"operationId":"PortalAPI.MembershipController.index","parameters":[{"description":"ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"group_id","required":true,"schema":{"type":"string"}},{"description":"Limit Memberships returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipListResponse"}}},"description":"Membership Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Memberships","tags":["Memberships"]},"patch":{"callbacks":{},"operationId":"PortalAPI.MembershipController.update_patch","parameters":[{"description":"ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipPatchRequest"}}},"description":"Membership Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Membership Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update an Membership","tags":["Memberships"]},"put":{"callbacks":{},"operationId":"PortalAPI.MembershipController.update_put","parameters":[{"description":"ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipPutRequest"}}},"description":"Membership Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}},"description":"Membership Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update Memberships","tags":["Memberships"]}},"/change_logs":{"get":{"callbacks":{},"description":"Lists audit Change Log entries for the authenticated account.\n\nEach entry records a single insert, update, or delete event against an\naccount-scoped object. Entries are returned in `event_id` order with\nthe most recent change first.\n\nThe `begin` and `end` query parameters bound the window in which to\nlook up Change Logs by their `timestamp`. Both must be RFC 3339 (ISO\n8601) timestamps, for example `2026-05-26T00:00:00Z`; values with a\nnon-UTC offset are accepted and converted to UTC. When omitted,\n`begin` defaults to 90 days before the current time and `end`\ndefaults to the current time. `begin` must be less than or equal to\n`end`.\n\nResults can be further narrowed by `actor_id` or `actor_email`, which\nmatch against the corresponding fields on the entry's `subject`.\n\nUse the `next_page` cursor returned in `metadata` to fetch the\nfollowing page of results.\n","operationId":"PortalAPI.ChangeLogController.index","parameters":[{"description":"Maximum number of Change Logs to return per page. Defaults to 50.\nValues greater than 100 are capped to 100, and values less than 1\nare raised to 1.\n","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor returned by a previous request.","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}},{"description":"Inclusive lower bound on `timestamp`. RFC 3339 timestamp; non-UTC\noffsets are accepted and converted to UTC. Defaults to 90 days\nbefore the current time when omitted.\n","example":"2026-02-25T00:00:00Z","in":"query","name":"begin","required":false,"schema":{"type":"string"}},{"description":"Inclusive upper bound on `timestamp`. RFC 3339 timestamp; non-UTC\noffsets are accepted and converted to UTC. Defaults to the current\ntime when omitted.\n","example":"2026-05-26T00:00:00Z","in":"query","name":"end","required":false,"schema":{"type":"string"}},{"description":"Filter to entries whose `subject.actor_id` matches.","example":"84e7f82f-831a-4a9d-8f17-c66c2bb6e205","in":"query","name":"actor_id","required":false,"schema":{"type":"string"}},{"description":"Filter to entries whose `subject.actor_email` matches.","example":"admin@example.com","in":"query","name":"actor_email","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeLogsResponse"}}},"description":"Change Logs Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Change Logs","tags":["Change Logs"]}},"/google_directories":{"get":{"callbacks":{},"operationId":"PortalAPI.GoogleDirectoryController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleDirectoryListResponse"}}},"description":"Google Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Google Directories","tags":["Google Directories"]}},"/google_directories/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.GoogleDirectoryController.show","parameters":[{"description":"Google Directory ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleDirectoryResponse"}}},"description":"Google Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Google Directory","tags":["Google Directories"]}},"/clients/{id}/unverify":{"put":{"callbacks":{},"operationId":"PortalAPI.ClientController.unverify","parameters":[{"description":"Client ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Unverify Client","tags":["Clients"]}},"/gateway_sessions":{"get":{"callbacks":{},"operationId":"PortalAPI.GatewaySessionController.index","parameters":[{"description":"Filter by Gateway ID","example":"00000000-0000-0000-0000-000000000000","in":"query","name":"gateway_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewaySessionsResponse"}}},"description":"Gateway Sessions Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Gateway Sessions","tags":["Gateway Sessions"]}},"/resources/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.ResourceController.delete","parameters":[{"description":"Resource ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete Resource","tags":["Resources"]},"get":{"callbacks":{},"operationId":"PortalAPI.ResourceController.show","parameters":[{"description":"Resource ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Resource","tags":["Resources"]},"patch":{"callbacks":{},"operationId":"PortalAPI.ResourceController.update (2)","parameters":[{"description":"Resource ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceUpdateRequest"}}},"description":"Resource Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update Resource","tags":["Resources"]},"put":{"callbacks":{},"operationId":"PortalAPI.ResourceController.update","parameters":[{"description":"Resource ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceUpdateRequest"}}},"description":"Resource Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceResponse"}}},"description":"Resource Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update Resource","tags":["Resources"]}},"/entra_directories":{"get":{"callbacks":{},"operationId":"PortalAPI.EntraDirectoryController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntraDirectoryListResponse"}}},"description":"Entra Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Entra Directories","tags":["Entra Directories"]}},"/entra_auth_providers/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.EntraAuthProviderController.show","parameters":[{"description":"Entra Auth Provider ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntraAuthProviderResponse"}}},"description":"Entra Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Entra Auth Provider","tags":["Entra Auth Providers"]}},"/clients":{"get":{"callbacks":{},"operationId":"PortalAPI.ClientController.index","parameters":[{"description":"Limit Clients returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientsResponse"}}},"description":"Client Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Clients","tags":["Clients"]}},"/account":{"get":{"callbacks":{},"operationId":"PortalAPI.AccountController.show","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}},"description":"AccountResponse"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Account","tags":["Account"]}},"/sites/{site_id}/gateway_tokens":{"delete":{"callbacks":{},"operationId":"PortalAPI.GatewayTokenController.delete_all","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedGatewayTokensResponse"}}},"description":"Deleted Tokens Response"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete all Gateway Tokens for a Site","tags":["Gateway Tokens"]},"post":{"callbacks":{},"operationId":"PortalAPI.GatewayTokenController.create","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewayTokenResponse"}}},"description":"New Token Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create a Gateway Token","tags":["Gateway Tokens"]}},"/entra_directories/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.EntraDirectoryController.show","parameters":[{"description":"Entra Directory ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntraDirectoryResponse"}}},"description":"Entra Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Entra Directory","tags":["Entra Directories"]}},"/email_otp_auth_providers/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.EmailOTPAuthProviderController.show","parameters":[{"description":"Email OTP Auth Provider ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailOTPAuthProviderResponse"}}},"description":"Email OTP Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Email OTP Auth Provider","tags":["Email OTP Auth Providers"]}},"/okta_directories/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.OktaDirectoryController.show","parameters":[{"description":"Okta Directory ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OktaDirectoryResponse"}}},"description":"Okta Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Okta Directory","tags":["Okta Directories"]}},"/groups/{id}":{"delete":{"callbacks":{},"operationId":"PortalAPI.GroupController.delete","parameters":[{"description":"Group ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Delete a Group","tags":["Groups"]},"get":{"callbacks":{},"operationId":"PortalAPI.GroupController.show","parameters":[{"description":"Group ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Group","tags":["Groups"]},"patch":{"callbacks":{},"operationId":"PortalAPI.GroupController.update (2)","parameters":[{"description":"Group ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdateRequest"}}},"description":"Group Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Group","tags":["Groups"]},"put":{"callbacks":{},"operationId":"PortalAPI.GroupController.update","parameters":[{"description":"Group ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupUpdateRequest"}}},"description":"Group Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}},"description":"Group Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Update a Group","tags":["Groups"]}},"/oidc_auth_providers/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.OIDCAuthProviderController.show","parameters":[{"description":"OIDC Auth Provider ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OIDCAuthProviderResponse"}}},"description":"OIDC Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show OIDC Auth Provider","tags":["OIDC Auth Providers"]}},"/sites/{site_id}/gateways":{"get":{"callbacks":{},"operationId":"PortalAPI.GatewayController.index","parameters":[{"description":"Site ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"site_id","required":true,"schema":{"type":"string"}},{"description":"Limit Gateways returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GatewaysResponse"}}},"description":"Gateway Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Gateways","tags":["Gateways"]}},"/policies":{"get":{"callbacks":{},"operationId":"PortalAPI.PolicyController.index","parameters":[{"description":"Limit Policies returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyListResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Policies","tags":["Policies"]},"post":{"callbacks":{},"operationId":"PortalAPI.PolicyController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreateRequest"}}},"description":"Policy Attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}},"description":"Policy Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create Policy","tags":["Policies"]}},"/actors":{"get":{"callbacks":{},"operationId":"PortalAPI.ActorController.index","parameters":[{"description":"Limit Users returned","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Next/Prev page cursor","in":"query","name":"page_cursor","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorsResponse"}}},"description":"ActorsResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Actors","tags":["Actors"]},"post":{"callbacks":{},"operationId":"PortalAPI.ActorController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorCreateRequest"}}},"description":"Actor attributes","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActorResponse"}}},"description":"ActorResponse"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Forbidden"},"422":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ValidationProblemDetails"}}},"description":"Unprocessable Content"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Create an Actor","tags":["Actors"]}},"/okta_directories":{"get":{"callbacks":{},"operationId":"PortalAPI.OktaDirectoryController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OktaDirectoryListResponse"}}},"description":"Okta Directory Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"List Okta Directories","tags":["Okta Directories"]}},"/okta_auth_providers/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.OktaAuthProviderController.show","parameters":[{"description":"Okta Auth Provider ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OktaAuthProviderResponse"}}},"description":"Okta Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Okta Auth Provider","tags":["Okta Auth Providers"]}},"/google_auth_providers/{id}":{"get":{"callbacks":{},"operationId":"PortalAPI.GoogleAuthProviderController.show","parameters":[{"description":"Google Auth Provider ID","example":"00000000-0000-0000-0000-000000000000","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthProviderResponse"}}},"description":"Google Auth Provider Response"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Unauthorized"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Not Found"},"429":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}},"description":"Too Many Requests"}},"summary":"Show Google Auth Provider","tags":["Google Auth Providers"]}}},"security":[{"authorization":[]}],"servers":[{"url":"https://api.firezone.dev","variables":{}}],"tags":[]}