{"openapi":"3.1.0","info":{"title":"Polyguard Identity Verification API","description":"The Polyguard Identity Verification API provides enterprise-grade identity verification and secure communication services. This API enables real-time identity verification through multiple proof types including biometric authentication, government ID verification, phone number validation, and hardware attestation.\n\n## Core Features\n\n**Identity Verification**\n- Multi-factor biometric authentication with liveness detection\n- Government-issued document verification\n- Phone number verification through SMS OTP\n- Hardware-based device attestation (Apple AppAttest, Android Integrity)\n- NFC passport verification support\n\n**Secure Communication**\n- Polyguard Secure Line (PSL) for verified-to-verified calls\n- STIR/SHAKEN call authentication and security scoring\n- Real-time verification status during calls\n- WebSocket-based live verification updates\n\n**Security & Compliance**\n- NIST 800-63b 5.2.3 compliant authentication\n- ISO/IEC 24745 biometric template protection\n- Zero-trust architecture with hardware-enclave key storage\n- OpenID Connect compatible JWT token format\n- AppAttest and Android Integrity API integration\n\nThe API supports both mobile applications (iOS/Android) and web clients, providing a unified identity verification platform for the AI era.","version":"1.0.1"},"paths":{"/portal_login":{"post":{"tags":["authz"],"summary":"Portal Login","description":"This endpoint starts a logged in session for the user\nit accepts a Polyguard JWT bundle and returns a scoped token that can be used to make API calls\nto the backend.","operationId":"portal_login_portal_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/session/switch_account":{"post":{"tags":["authz"],"summary":"Switch Account","description":"Re-mint the caller's session JWT scoped to a different account.\n\nWorks for every session type (cert- and email-established): the new token\npreserves the original ``auth_method`` and expiry — switching accounts\nmust never extend a session or raise its assurance level. Roles are\nrevalidated from the database at mint time, and mint_session_for_user\n401s if the caller has no membership in the requested account.\n\nThis replaces the frontend's bundle re-exchange for account switching, so\nit also works when the original verification bundle has expired (or, for\nemail sessions, never existed).","operationId":"switch_account_v2_session_switch_account_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/session/step_up":{"post":{"tags":["authz"],"summary":"Step Up Session","description":"Elevate an email session to cert assurance with a verification bundle.\n\nAutomatic identity linking requires both credentials in this one request:\nthe email session authenticates the caller, the bundle authenticates the\nmobile identity. A root email-only PolyUser is adopted under the bundle's\ncert-backed user; an email identity owned by a different cert-backed user\nis a 409 (the console falls back to a full Polyguard login).","operationId":"step_up_session_v2_session_step_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecureLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/create_invite_exchange_token":{"post":{"tags":["authz"],"summary":"Create Invite Exchange Token","description":"Store raw_jwt in Redis behind a one-time token (5min TTL).","operationId":"create_invite_exchange_token_create_invite_exchange_token_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/exchange_invite_token":{"post":{"tags":["authz"],"summary":"Exchange Invite Token","description":"Exchange one-time token for raw_jwt. Deletes token on use.","operationId":"exchange_invite_token_exchange_invite_token_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/email/login/request":{"post":{"tags":["email-login"],"summary":"Email Login Request","description":"Send a magic link. Response is identical for every address — known,\nunknown, or rate-limited — so it leaks nothing about registration state.\nUnknown addresses become email-only signups at verify time.","operationId":"email_login_request_v2_email_login_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLoginRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/email/login/verify":{"post":{"tags":["email-login"],"summary":"Email Login Verify","description":"Exchange a consumed magic-link token for an email-assurance session\nJWT, creating an email-only PolyUser on first login.","operationId":"email_login_verify_v2_email_login_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLoginVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/email/link/request":{"post":{"tags":["email-login"],"summary":"Email Link Request","description":"Start attaching an email to the caller's cert-backed identity. Sends\nthe same magic-link email; the pending record is bound to the caller so\nthe eventual verify can't be replayed by anyone else.","operationId":"email_link_request_v2_email_link_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLoginRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/email/link/verify":{"post":{"tags":["email-login"],"summary":"Email Link Verify","description":"Complete the email-attach round-trip.\n\nOwnership branches (PlatformIdentity.upsert would silently adopt an\nexisting row, so ownership is checked explicitly here):\n- no row: create it, login-eligible.\n- row already in the caller's linked group: refresh to login-eligible\n  (also the re-claim path for a previously revoked address).\n- row owned by a root email-only user: the caller proved control of that\n  user's only credential — re-parent it under the caller (auto-merge).\n- row owned by another cert-backed user: 409; reassignment is an explicit\n  support action, never a silent takeover.","operationId":"email_link_verify_v2_email_link_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLinkVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/email/link":{"get":{"tags":["email-login"],"summary":"List Login Emails","description":"Login emails across the caller's linked identity group.","operationId":"list_login_emails_v2_email_link_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/email/link/{identity_id}":{"delete":{"tags":["email-login"],"summary":"Revoke Login Email","description":"Revoke one of the caller's login emails (soft: status=REVOKED, so the\nunique constraint still reserves the address for re-claim by its owner).","operationId":"revoke_login_email_v2_email_link__identity_id__delete","parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"integer","title":"Identity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/join/session":{"post":{"tags":["join-session"],"summary":"Create Join Session","operationId":"create_join_session_v2_join_session_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JoinSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["join-session"],"summary":"Get Join Session","operationId":"get_join_session_v2_join_session_get","parameters":[{"name":"link_uuid","in":"query","required":true,"schema":{"type":"string","title":"Link Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/apple-app-site-association":{"get":{"tags":[".well-known"],"summary":"Apple App Site Association","operationId":"apple_app_site_association__well_known_apple_app_site_association_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/apple-app-site-association":{"get":{"tags":[".well-known"],"summary":"Apple App Site Association","operationId":"apple_app_site_association_apple_app_site_association_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/jwks.json":{"get":{"tags":[".well-known"],"summary":"Jwks","description":"Platform-level JWKS — DEV-ONLY.\n\nIn production, jwks_worker (Cloudflare) intercepts this path on every\napi*.polyguard.ai hostname and serves the response from KV. This origin\nhandler exists so local dev and direct-origin tests still resolve, and\nso the Root + Intermediate CA public keys remain discoverable when\ntalking to the API without the edge in front.\n\nPer-user JWKS are at /users/{poly_user_id}/.well-known/jwks.json","operationId":"jwks__well_known_jwks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/users/{poly_user_id}/.well-known/jwks.json":{"get":{"tags":[".well-known"],"summary":"User Jwks","description":"Per-user JWKS endpoint — dynamically assembled from stored certificates.\n\npoly_user_id is validated by the cert store to prevent path traversal.\n\nIn production, the jwks_worker handles this at the edge.\nThis endpoint serves dev/staging where the worker isn't running.\n\nArgs:\n    poly_user_id: The user whose keys to return\n    include: Set to \"all\" to include expired/revoked keys (for archival verification)","operationId":"user_jwks_users__poly_user_id___well_known_jwks_json_get","parameters":[{"name":"poly_user_id","in":"path","required":true,"schema":{"type":"string","title":"Poly User Id"}},{"name":"include","in":"query","required":false,"schema":{"type":"string","title":"Include"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/assetlinks.json":{"get":{"tags":[".well-known"],"summary":"Assetlinks","operationId":"assetlinks__well_known_assetlinks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/ms-teams/bot":{"post":{"tags":["ms-teams","ms-teams"],"summary":"Ms Teams Bot Webhook","description":"Handle incoming webhook messages from MS Teams Bot.\nThis endpoint receives POST messages from the MS Teams Bot and processes them\naccording to the Microsoft Bot Framework webhook specification.","operationId":"ms_teams_bot_webhook_v2_ms_teams_bot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/ms-teams/event":{"get":{"tags":["ms-teams","ms-teams"],"summary":"Ms Teams Event Webhook Validation","description":"Handle validation token for MS Teams Events webhook.","operationId":"ms_teams_event_webhook_validation_v2_ms_teams_event_get","parameters":[{"name":"validationToken","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Validationtoken"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ms-teams","ms-teams"],"summary":"Ms Teams Event Webhook","description":"Handle incoming webhook messages from MS Teams Events.","operationId":"ms_teams_event_webhook_v2_ms_teams_event_post","parameters":[{"name":"validationToken","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Validationtoken"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/ms-teams/teams-loaded":{"post":{"tags":["ms-teams","ms-teams"],"summary":"Ms Do Stuff","operationId":"ms_do_stuff_v2_ms_teams_teams_loaded_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/ms-teams/redirect":{"post":{"tags":["ms-teams","ms-teams"],"summary":"Ms Teams Oauth Redirect","operationId":"ms_teams_oauth_redirect_v2_ms_teams_redirect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/v2/logs/me":{"get":{"summary":"Get User Logs","description":"Get meeting and call logs for the authenticated user with pagination.","operationId":"get_user_logs_v2_logs_me_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"Page number, starting from 1","default":1,"title":"Page"},"description":"Page number, starting from 1"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","description":"Number of records per page","default":25,"title":"Page Size"},"description":"Number of records per page"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Search across topic, organization, host, user name","title":"Search"},"description":"Search across topic, organization, host, user name"},{"name":"log_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both.","title":"Log Types"},"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/logs/account/{account_id}":{"get":{"summary":"Get Account Logs","description":"Get meeting and call logs for an account with pagination.","operationId":"get_account_logs_v2_logs_account__account_id__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","description":"Polyguard account ID","title":"Account Id"},"description":"Polyguard account ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"Page number, starting from 1","default":1,"title":"Page"},"description":"Page number, starting from 1"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","description":"Number of records per page","default":25,"title":"Page Size"},"description":"Number of records per page"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Search across topic, organization, host, user name","title":"Search"},"description":"Search across topic, organization, host, user name"},{"name":"app_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restrict trust-check rows to this app. Meetings have no app_id and are dropped when this is set.","title":"App Id"},"description":"Restrict trust-check rows to this app. Meetings have no app_id and are dropped when this is set."},{"name":"log_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both.","title":"Log Types"},"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/logs/continuity":{"post":{"summary":"Get Meeting Continuity","description":"Get last-met time and meeting count for a batch of poly_user_ids within an account.","operationId":"get_meeting_continuity_v2_logs_continuity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContinuityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/v2/logs/user/{poly_user_id}/account/{account_id}":{"get":{"summary":"Get User Account Logs","description":"Get a user's meetings + trust-check sessions within an account, as one\nglobally-ordered, paginated stream.","operationId":"get_user_account_logs_v2_logs_user__poly_user_id__account__account_id__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"poly_user_id","in":"path","required":true,"schema":{"type":"string","description":"Poly user ID","title":"Poly User Id"},"description":"Poly user ID"},{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","description":"Polyguard account ID","title":"Account Id"},"description":"Polyguard account ID"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"Page number, starting from 1","default":1,"title":"Page"},"description":"Page number, starting from 1"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","description":"Number of records per page","default":25,"title":"Page Size"},"description":"Number of records per page"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"Search across topic, organization, host, user name","title":"Search"},"description":"Search across topic, organization, host, user name"},{"name":"log_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both.","title":"Log Types"},"description":"Comma-separated sources to include: meeting, trust_check. Omitted = both."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/logs/meeting/details":{"post":{"summary":"Get Meeting Details","description":"Get detailed information about a specific meeting including participants and other metadata.","operationId":"get_meeting_details_v2_logs_meeting_details_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/v2/reports/meeting/{encoded_s3_url}":{"get":{"summary":"Redirect To Meeting Report","operationId":"redirect_to_meeting_report_v2_reports_meeting__encoded_s3_url__get","parameters":[{"name":"encoded_s3_url","in":"path","required":true,"schema":{"type":"string","title":"Encoded S3 Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/reports/meeting":{"post":{"summary":"Generate Meeting Report","description":"Generate a PDF report for a meeting by collecting event data from S3.","operationId":"generate_meeting_report_v2_reports_meeting_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/v2/affidavits/{app_id}/{trust_check_session_id}/download":{"get":{"summary":"Download Trust Check Affidavit","description":"Download the signed PDF affidavit for a non-meeting trust-check session.\n\nReads ``trust_checks/{app_id}/{session_id}/manifest.json`` (one S3\nGET, deterministic key — no folder walk). Authorizes either: caller\nis ``manifest.poly_user_id`` (the verified subject — cross-account\nsubjects supported per spec Goal 5), OR caller is an admin of\n``manifest.account_id``. Returns 302 to a presigned URL for\n``manifest.affidavit_key``. **Returns 404 on every miss** — unknown\nsession, missing manifest, ``affidavit_key`` not yet populated, or\nunauthorized caller. 404-not-403 prevents enumeration; the handler\ncomputes everything and decides at the end to avoid leaking\nexistence via timing.","operationId":"download_trust_check_affidavit_v2_affidavits__app_id___trust_check_session_id__download_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","description":"Polyguard app id that issued the link","title":"App Id"},"description":"Polyguard app id that issued the link"},{"name":"trust_check_session_id","in":"path","required":true,"schema":{"type":"string","description":"Trust-check session identifier (link_session_id)","title":"Trust Check Session Id"},"description":"Trust-check session identifier (link_session_id)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/analytics/prescreen/account":{"get":{"summary":"Prescreen Account","description":"The account this API key is pinned to.\n\nLets emitters (the job-postings deployments) derive the account_id they\nstamp on analytics events from their key instead of a separately\nconfigured — and separately mis-configurable — env var. A key learning\nits OWN account id is not privileged (no role requirement); it cannot\nresolve any other account. Session auth doesn't need this and gets 400.","operationId":"prescreen_account_v2_analytics_prescreen_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/v2/analytics/prescreen/summary":{"get":{"summary":"Prescreen Summary","description":"Aggregated prescreen trust-check funnel for one account.\n\nCounts only — no candidate PII, no raw events. Served from the\n``prescreen_analytics_daily`` rollup (Athena is preaggregated on a\nschedule; see ``invoke rollup-prescreen-analytics``), so this read is\nindexed SQL, not a slow Firehose/Athena scan. ``refreshed_at`` reports\nrollup freshness.","operationId":"prescreen_summary_v2_analytics_prescreen_summary_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive range start (default: end_date - 29 days)","title":"Start Date"},"description":"Inclusive range start (default: end_date - 29 days)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive range end (default: today)","title":"End Date"},"description":"Inclusive range end (default: today)"},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Required for session auth; forbidden to differ from the API key's account","title":"Account Id"},"description":"Required for session auth; forbidden to differ from the API key's account"},{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"description":"Narrow every panel to one job posting. Accepts up to 4 comma-separated numeric ids — one posting spans two id spaces (public board id + Harvest internal id).","title":"Job Id"},"description":"Narrow every panel to one job posting. Accepts up to 4 comma-separated numeric ids — one posting spans two id spaces (public board id + Harvest internal id)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/app/{app_id}/status":{"get":{"tags":["admin"],"summary":"Get App Status","operationId":"get_app_status_v2_app__app_id__status_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/app/{app_id}/users":{"get":{"tags":["admin"],"summary":"Get App Users","operationId":"get_app_users_v2_app__app_id__users_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google/oauth/start":{"get":{"tags":["google_oauth"],"summary":"Oauth Start","description":"Build the Google authorize URL for the authenticated session.\n\nReachable via ``api_client.get`` (which carries ``X-PG-Auth``);\nReturns ``{authorize_url}`` as JSON so the SPA can\n``window.location.assign`` it without losing the auth header on a\nserver-side redirect. Also sets ``OAUTH_NONCE_COOKIE`` so the\neventual callback can verify it's the same browser that started\nthe flow.","operationId":"oauth_start_google_oauth_start_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"intent","in":"query","required":true,"schema":{"type":"string","pattern":"^(organizer|routing)$","title":"Intent"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"}},{"name":"shared","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Shared"}},{"name":"return_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google/routing-addresses":{"get":{"tags":["google_oauth"],"summary":"List Routing Addresses","description":"List the calendar routing addresses visible to the caller.\n\nRead-only, header-authed. Requires ADMIN or above on ``account_id``.\nReturns the account's own scoped addresses; shared addresses\n(``account_id IS NULL``, e.g. ``meeting@polyguard.ai``) are included\nonly for POLYADMINs, who are also the only ones permitted to connect\nthem (mirrors the shared-connect gate in ``/oauth/start``).","operationId":"list_routing_addresses_google_routing_addresses_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/google/oauth/callback":{"get":{"tags":["google_oauth"],"summary":"Oauth Callback","description":"Google's redirect lands here without an auth header. We verify\nthe originator instead via the HttpOnly cookie+Redis nonce pair\nthat ``/oauth/start`` planted. See module docstring for the full\nthreat model.","operationId":"oauth_callback_google_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"pg_google_oauth_nonce","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pg Google Oauth Nonce"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/applications":{"get":{"tags":["secure_links"],"summary":"Get Applications","operationId":"get_applications_applications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/success/{link_uuid}":{"get":{"tags":["secure_links"],"summary":"Get Success","operationId":"get_success_success__link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Return the JSON item, an image, or an html page.","content":{"application/json":{"schema":{"type":"object","title":"Response Get Success Success  Link Uuid  Get"}},"image/svg+xml":{},"text/html":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/success/by-app/{app_id}":{"get":{"tags":["secure_links"],"summary":"Get Success By App","description":"App-level success page. Used as the default value of ``app.redirect_url``\non SDK apps so developers see a working redirect URL in their app config and\nare prompted to replace it with their own post-verification page.","operationId":"get_success_by_app_success_by_app__app_id__get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"App-level success page, no link context required.","content":{"application/json":{"schema":{"type":"object","title":"Response Get Success By App Success By App  App Id  Get"}},"image/svg+xml":{},"text/html":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/photo/{bucket_name}/{object_path}":{"get":{"tags":["secure_links","photo"],"summary":"Redirect To Photo Verification","description":"Redirect to a presigned S3 URL for photo verification images.\n\nArgs:\n    bucket_name: S3 bucket name (e.g., \"polyguard-call-logs-user123\")\n    object_path: Object path within bucket (e.g., \"psl_redirects/photo.jpg\")","operationId":"redirect_to_photo_verification_v2_photo__bucket_name___object_path__get","parameters":[{"name":"bucket_name","in":"path","required":true,"schema":{"type":"string","title":"Bucket Name"}},{"name":"object_path","in":"path","required":true,"schema":{"type":"string","title":"Object Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/ticket/{app_id}":{"post":{"tags":["secure_links","secure_links"],"summary":"Create Ticket","operationId":"create_ticket_v2_ticket__app_id__post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/ticket/{app_id}/{link_uuid}":{"post":{"tags":["secure_links","secure_links"],"summary":"Create Specific Ticket","operationId":"create_specific_ticket_v2_ticket__app_id___link_uuid__post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/meeting/{platform}/{meeting_id}":{"get":{"tags":["secure_links","zoom"],"summary":"Get Meeting Details","description":"Unified endpoint for getting meeting participant details.\n\nArgs:\n    platform: Either \"zoom\" or \"ms-teams\"\n    meeting_id: Base64-encoded meeting identifier","operationId":"get_meeting_details_v2_meeting__platform___meeting_id__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}},{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/meeting-by-link/{link_uuid}":{"get":{"tags":["secure_links","zoom"],"summary":"Get Meeting By Link","description":"Get meeting participant details using a link UUID.\n\nUsed by the standalone sidebar popup for anonymous Teams web client users\nwho cannot see the in-Teams sidepanel.","operationId":"get_meeting_by_link_v2_meeting_by_link__link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/start/{link_uuid}":{"post":{"tags":["secure_links","zoom"],"summary":"Pg Start Meeting","description":"Unified endpoint for starting a meeting across all platforms (Zoom, Teams, Sandbox).","operationId":"pg_start_meeting_v2_start__link_uuid__post","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartMeetingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/ms-teams/start/{link_uuid}":{"post":{"tags":["secure_links","zoom"],"summary":"Pg Start Teams Meeting","description":"Legacy endpoint — delegates to shared implementation.","operationId":"pg_start_teams_meeting_v2_ms_teams_start__link_uuid__post","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartMeetingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/zoom/start/{link_uuid}":{"post":{"tags":["secure_links","zoom"],"summary":"Pg Start Zoom Meeting","description":"Legacy endpoint — delegates to shared implementation.","operationId":"pg_start_zoom_meeting_v2_zoom_start__link_uuid__post","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartMeetingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/type/{link_type}":{"put":{"tags":["secure_links","secure_links"],"summary":"Pg Create Link","operationId":"pg_create_link_v2_link_type__link_type__put","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_type","in":"path","required":true,"schema":{"type":"string","title":"Link Type"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Create Link V2 Link Type  Link Type  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/invite/{app_id}":{"put":{"tags":["secure_links","secure_links"],"summary":"Pg Create Link","operationId":"pg_create_link_v2_link_invite__app_id__put","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"link_type","in":"query","required":false,"schema":{"type":"string","title":"Link Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Create Link V2 Link Invite  App Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/import/{app_id}":{"put":{"tags":["secure_links","secure_links"],"summary":"Pg Create Link","operationId":"pg_create_link_v2_link_import__app_id__put","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"link_type","in":"query","required":false,"schema":{"type":"string","title":"Link Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Create Link V2 Link Import  App Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/{app_id}":{"put":{"tags":["secure_links","secure_links"],"summary":"Pg Create Link","operationId":"pg_create_link_v2_link__app_id__put","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"link_type","in":"query","required":false,"schema":{"type":"string","title":"Link Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Create Link V2 Link  App Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{app_id}":{"put":{"tags":["secure_links","secure_links"],"summary":"Pg Create Link","operationId":"pg_create_link_v2__app_id__put","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"link_type","in":"query","required":false,"schema":{"type":"string","title":"Link Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Create Link V2  App Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/send/{app_id}":{"post":{"tags":["secure_links","secure_links"],"summary":"Pg Send Link","description":"Create a Trust Check link and email it to the verification target.\n\nWraps ``pg_create_link`` and the SES integration: creates a single-use\nlink (forced for emailed links) and sends the fixed Trust Check\ninvitation template to ``send_to_email`` with the link URL injected.","operationId":"pg_send_link_v2_link_send__app_id__post","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg Send Link V2 Link Send  App Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/first-run":{"get":{"tags":["secure_links","secure_links"],"summary":"Check Import By Ip","description":"Check if there's import link data for the requesting IP address.","operationId":"check_import_by_ip_v2_first_run_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Check Import By Ip V2 First Run Get"}}}}}}},"/v2/links/{account_id}/{app_id}":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg List App Links","operationId":"pg_list_app_links_v2_links__account_id___app_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg List App Links V2 Links  Account Id   App Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/link/{app_id}/{link_uuid}":{"delete":{"tags":["secure_links","secure_links"],"summary":"Pg Delete Link","operationId":"pg_delete_link_v2_link__app_id___link_uuid__delete","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["secure_links","secure_links"],"summary":"Pg Edit Link","operationId":"pg_edit_link_v2_link__app_id___link_uuid__patch","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{app_id}/{link_uuid}":{"delete":{"tags":["secure_links","secure_links"],"summary":"Pg Delete Link","operationId":"pg_delete_link_v2__app_id___link_uuid__delete","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["secure_links","secure_links"],"summary":"Pg Edit Link","operationId":"pg_edit_link_v2__app_id___link_uuid__patch","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2__app_id___link_uuid__post","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["secure_links","secure_links"],"summary":"Link Preview","description":"Preview of Link Data - Presents Login or Check Page on Desktop.\nRedirects to PSL Install Page on Mobile.\nReturns JSON link details when called from PSL, and SVG when loaded as an image.","operationId":"link_preview_v2__app_id___link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}}],"responses":{"200":{"description":"Return the JSON item, an image, or an html page.","content":{"application/json":{"schema":{"type":"object","title":"Response Link Preview V2  App Id   Link Uuid  Get"}},"image/svg+xml":{},"text/html":{}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{link_uuid}":{"delete":{"tags":["secure_links","secure_links"],"summary":"Pg Delete Link","operationId":"pg_delete_link_v2__link_uuid__delete","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["secure_links","secure_links"],"summary":"Pg Edit Link","operationId":"pg_edit_link_v2__link_uuid__patch","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2__link_uuid__post","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["secure_links","secure_links"],"summary":"Link Preview","description":"Preview of Link Data - Presents Login or Check Page on Desktop.\nRedirects to PSL Install Page on Mobile.\nReturns JSON link details when called from PSL, and SVG when loaded as an image.","operationId":"link_preview_v2__link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}}],"responses":{"200":{"description":"Return the JSON item, an image, or an html page.","content":{"application/json":{"schema":{"type":"object","title":"Response Link Preview V2  Link Uuid  Get"}},"image/svg+xml":{},"text/html":{}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/listteamslinks":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg List Msft Teams Meeting Links","operationId":"pg_list_msft_teams_meeting_links_v2_listteamslinks_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg List Msft Teams Meeting Links V2 Listteamslinks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/listlinks/{zoom_account_id}":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg List Meeting Links","operationId":"pg_list_meeting_links_v2_listlinks__zoom_account_id__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg List Meeting Links V2 Listlinks  Zoom Account Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/listlinks":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg List Meeting Links","operationId":"pg_list_meeting_links_v2_listlinks_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg List Meeting Links V2 Listlinks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/invite-links/{account_id}":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg List Invite Links","description":"Get invite links for a given account_id with pagination.","operationId":"pg_list_invite_links_v2_invite_links__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pg List Invite Links V2 Invite Links  Account Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/raw/{link_uuid}":{"get":{"tags":["secure_links","secure_links"],"summary":"Get Raw Link","operationId":"get_raw_link_v2_raw__link_uuid__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/preview/{format_type}/{app_id}/{link_uuid}":{"get":{"tags":["secure_links","secure_links"],"summary":"Get Redirect Info","description":"Get detailed information about a secure link.","operationId":"get_redirect_info_v2_preview__format_type___app_id___link_uuid__get","parameters":[{"name":"format_type","in":"path","required":true,"schema":{"type":"string","title":"Format Type"}},{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/preview/{app_id}/{link_uuid}":{"get":{"tags":["secure_links","secure_links"],"summary":"Get Redirect Info","description":"Get detailed information about a secure link.","operationId":"get_redirect_info_v2_preview__app_id___link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/preview/{link_uuid}":{"get":{"tags":["secure_links","secure_links"],"summary":"Get Redirect Info","description":"Get detailed information about a secure link.","operationId":"get_redirect_info_v2_preview__link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{format_type}/{app_id}/{link_uuid}":{"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2__format_type___app_id___link_uuid__post","parameters":[{"name":"format_type","in":"path","required":true,"schema":{"type":"string","title":"Format Type"}},{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["secure_links","secure_links"],"summary":"Link Preview","description":"Preview of Link Data - Presents Login or Check Page on Desktop.\nRedirects to PSL Install Page on Mobile.\nReturns JSON link details when called from PSL, and SVG when loaded as an image.","operationId":"link_preview_v2__format_type___app_id___link_uuid__get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"path","required":true,"schema":{"type":"string","title":"Format Type"}}],"responses":{"200":{"description":"Return the JSON item, an image, or an html page.","content":{"application/json":{"schema":{"type":"object","title":"Response Link Preview V2  Format Type   App Id   Link Uuid  Get"}},"image/svg+xml":{},"text/html":{}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/redirect/{format_type}/{app_id}/{link_uuid}":{"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2_redirect__format_type___app_id___link_uuid__post","parameters":[{"name":"format_type","in":"path","required":true,"schema":{"type":"string","title":"Format Type"}},{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/redirect/{app_id}/{link_uuid}":{"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2_redirect__app_id___link_uuid__post","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/redirect/{link_uuid}":{"post":{"tags":["secure_links","secure_links"],"summary":"Pg Complete Redirect","operationId":"pg_complete_redirect_v2_redirect__link_uuid__post","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}},{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{format_type}/{app_id}/{link_uuid}.svg":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg Svg","operationId":"pg_svg_v2__format_type___app_id___link_uuid__svg_get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"path","required":true,"schema":{"type":"string","title":"Format Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{app_id}/{link_uuid}.svg":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg Svg","operationId":"pg_svg_v2__app_id___link_uuid__svg_get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/{link_uuid}.svg":{"get":{"tags":["secure_links","secure_links"],"summary":"Pg Svg","operationId":"pg_svg_v2__link_uuid__svg_get","parameters":[{"name":"link_uuid","in":"path","required":true,"schema":{"type":"string","title":"Link Uuid"}},{"name":"app_id","in":"query","required":false,"schema":{"type":"string","title":"App Id"}},{"name":"format_type","in":"query","required":false,"schema":{"type":"string","default":"A","title":"Format Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zoom-phone/email-invite":{"get":{"tags":["zoom"],"summary":"Get Email Invite Page","description":"Generate an HTML page that launches a mailto link for sending invites.","operationId":"get_email_invite_page_zoom_phone_email_invite_get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"title","in":"query","required":true,"schema":{"type":"string","description":"Title of the invitation","title":"Title"},"description":"Title of the invitation"},{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL of the invitation","title":"Url"},"description":"URL of the invitation"},{"name":"type","in":"query","required":false,"schema":{"type":"string","description":"Type of invitation (meeting or user)","default":"meeting","title":"Type"},"description":"Type of invitation (meeting or user)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zoom-phone/install":{"get":{"tags":["zoom"],"summary":"Zoom Install","description":"Browser entry point AND browser OAuth callback -- same path\nbecause ``ZOOM_REDIRECT_URI`` is ``/zoom-phone/install`` and Zoom's\nredirect back is a GET.\n\nWhen Zoom redirects the browser back with ``code`` + ``state`` (or\n``error``), this is the callback -> complete the install via\n``_finish_install``.  Otherwise it's a fresh initiate (Marketplace\ninstall / Console \"Connect Zoom\") -> generate S256 PKCE + state,\nstore in Redis, and 302 to Zoom OAuth.\n\n``return_to`` (initiate only) is the console page to land on after\nthe callback; validated via ``safe_return_to`` (open-redirect guard)\nand stored in Redis alongside the verifier so it survives the\nround-trip.","operationId":"zoom_install_zoom_phone_install_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"return_to","in":"query","required":false,"schema":{"type":"string","default":"","title":"Return To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["zoom"],"summary":"Zoom Install Callback","description":"In-app OAuth callback (frontend POSTs ``code`` + ``state``).\n\n``state`` may arrive as a query param or in the JSON body; either\nway it is the trust binding.  The browser flow's callback is served\nby ``GET /install`` (Zoom's redirect is a GET); both converge on\n``_finish_install``.","operationId":"zoom_install_callback_zoom_phone_install_post","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_zoom_install_callback_zoom_phone_install_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zoom-phone/install/initiate-in-app":{"post":{"tags":["zoom"],"summary":"Zoom Install Initiate In App","description":"In-app OAuth initiation: mint a server-side state + PKCE secret for\n``zoomSdk.authorize``.\n\nThe Zoom Apps SDK's ``authorize()`` only accepts ``codeChallenge`` (no\n``codeChallengeMethod``), so it uses PKCE method ``plain`` -- under\nwhich the verifier sent to the token endpoint must equal the\nchallenge sent at authorize.  We therefore generate a single random\nsecret and use it as BOTH challenge (returned to the frontend) and\nverifier (kept in Redis).\n\nThe security boundary for this flow is the server-issued ``state``\n(single-use in Redis), NOT the secrecy of the PKCE value.  Before\nthis endpoint existed, the frontend generated the secret itself and\npassed it back to a public callback with no state validation -- the\nCorridor finding.  Moving generation here means the client never\nchooses the verifier and the callback is only reachable via a state\nwe issued.","operationId":"zoom_install_initiate_in_app_zoom_phone_install_initiate_in_app_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/zoom-phone/app-store":{"get":{"tags":["zoom"],"summary":"Redirect To App Store","operationId":"redirect_to_app_store_zoom_phone_app_store_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/zoom-phone/webhook":{"post":{"tags":["zoom"],"summary":"Zoom Webhook","description":"Handle incoming webhooks from Zoom Phone.\n\nAlways responds 200, even when the signature is invalid or the body can't\nbe parsed, so Zoom does not retry deliveries we've decided to reject.","operationId":"zoom_webhook_zoom_phone_webhook_post","parameters":[{"name":"x-zm-signature","in":"header","required":true,"schema":{"type":"string","title":"X-Zm-Signature"}},{"name":"x-zm-request-timestamp","in":"header","required":true,"schema":{"type":"string","title":"X-Zm-Request-Timestamp"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zoom-phone/ticket/{account_id}":{"post":{"tags":["zoom"],"summary":"Get Ticket","description":"Get a ticket for the given account ID and uid for webhook startup.","operationId":"get_ticket_zoom_phone_ticket__account_id__post","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/zoom-phone/test-disconnect":{"post":{"tags":["zoom"],"summary":"Test Websocket Disconnect","operationId":"test_websocket_disconnect_zoom_phone_test_disconnect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/start_call/":{"post":{"tags":["calls"],"summary":"Start Call","operationId":"start_call_start_call__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__models__api__call_models__CallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/join_call/{call_id}":{"post":{"tags":["calls"],"summary":"Join Call","operationId":"join_call_join_call__call_id__post","parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cancel_call/{call_id}":{"post":{"tags":["calls"],"summary":"Cancel Call","operationId":"cancel_call_cancel_call__call_id__post","parameters":[{"name":"call_id","in":"path","required":true,"schema":{"type":"string","title":"Call Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/register_user/":{"post":{"tags":["users"],"summary":"Register User","operationId":"register_user_register_user__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/delete_user/":{"post":{"tags":["users"],"summary":"Delete User","operationId":"delete_user_delete_user__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invite_user/":{"post":{"tags":["users","users"],"summary":"Invite User","operationId":"invite_user_invite_user__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/begin_app_attest/":{"post":{"tags":["users","hardware-attestation"],"summary":"Begin App Attest","operationId":"begin_app_attest_begin_app_attest__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartAttestationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/verify_app/":{"post":{"tags":["users","hardware-attestation"],"summary":"Verify App Attest","operationId":"verify_app_attest_verify_app__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/fetch_registered_users/":{"post":{"tags":["users"],"summary":"Fetch Registered Users","operationId":"fetch_registered_users_fetch_registered_users__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"title":"Response Fetch Registered Users Fetch Registered Users  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/update_user/":{"put":{"tags":["users"],"summary":"Update User","operationId":"update_user_update_user__put","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/check_update_needed/":{"post":{"tags":["users"],"summary":"Check Update Needed","description":"Check if a user needs to call update_user by finding phones without alerts_device_tokens.\n\nArgs:\n    user: The user to check\n    session: Database session\n\nReturns:\n    Dict containing:\n    - needs_update: bool indicating if update is needed\n    - phone_numbers: list of phone numbers that need alerts_device_tokens","operationId":"check_update_needed_check_update_needed__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Check Update Needed Check Update Needed  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/begin-android-integrity/":{"post":{"tags":["users","hardware-attestation"],"summary":"Begin Android Integrity","description":"Generate a secure challenge nonce for Android integrity verification.","operationId":"begin_android_integrity_begin_android_integrity__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify-android-integrity/":{"post":{"tags":["users","hardware-attestation"],"summary":"Verify Android Integrity Endpoint","description":"Verify Android integrity token with challenge validation.","operationId":"verify_android_integrity_endpoint_verify_android_integrity__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AndroidIntegrityRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account/{account_id}/apps/":{"get":{"tags":["accounts"],"summary":"List Account Apps","description":"Get all apps for a specific account from account_apps table.\n\nReturns:\n    List of apps with app_id, name, and created_at","operationId":"list_account_apps_account__account_id__apps__get","security":[{"PolyguardAPIKey":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"title":"Response List Account Apps Account  Account Id  Apps  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accounts/":{"get":{"tags":["accounts"],"summary":"List Accounts","description":"Get all accounts that the current user has access to.\n\nResolves over the whole linked-identity group (the parent plus any merged\nchildren) via ``linked_user_ids``, mirroring how the session JWT's\n``account_roles`` is built in ``generate_session_token``. Filtering on\n``user.id`` alone returned only the resolved parent's own memberships, so an\naccount a merged child belonged to was missing here — the console /settings\npage looks the selected account up in this list and showed \"No account\nselected\" for it, even though every other screen (which authorizes off the\nJWT roles) worked.","operationId":"list_accounts_accounts__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array","title":"Response List Accounts Accounts  Get"}}}}},"security":[{"PolyguardAPIKey":[]}]}},"/create-account/":{"post":{"tags":["accounts"],"summary":"Create Account With Owner","description":"Create a new account with the requesting user as OWNER for new users creating their first account.","operationId":"create_account_with_owner_create_account__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Create Account With Owner Create Account  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/veriff/session/":{"post":{"tags":["veriff"],"summary":"Create Veriff Session","description":"Create verification session","operationId":"create_veriff_session_veriff_session__post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/veriff/upload-media/{session_id}":{"post":{"tags":["veriff"],"summary":"Upload Veriff Media","description":"Upload media to specific session","operationId":"upload_veriff_media_veriff_upload_media__session_id__post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_veriff_media_veriff_upload_media__session_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/veriff/poll-session/{session_id}":{"patch":{"tags":["veriff"],"summary":"Poll Veriff Session","operationId":"poll_veriff_session_veriff_poll_session__session_id__patch","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/veriff/webhook":{"post":{"tags":["veriff"],"summary":"Veriff Webhook","description":"Handle incoming webhook events from Veriff","operationId":"veriff_webhook_veriff_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/twilio/start":{"post":{"tags":["twilio"],"summary":"Twilio Start","operationId":"twilio_start_twilio_start_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twilio/check":{"post":{"tags":["twilio"],"summary":"Twilio Check","operationId":"twilio_check_twilio_check_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/twilio/webhook":{"post":{"tags":["twilio"],"summary":"Twilio Webhook","description":"Handle incoming webhook events from Twilio","operationId":"twilio_webhook_twilio_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/psl/certificates/sign-csr":{"post":{"tags":["certificates"],"summary":"Sign Csr","description":"Sign a CSR and return the certificate chain.\n\nProtected by app attestation: only attested devices can request certificates.\nThe attested keyId must be bound to the requested poly_user_id (bound on\nfirst use for pre-registration identities, or at register_user time);\narbitrary cross-user requests are rejected. pk1 ids must additionally\nmatch the id derived from the CSR's own public key.","operationId":"sign_csr_psl_certificates_sign_csr_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignCSRResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/psl/certificates/renew":{"post":{"tags":["certificates"],"summary":"Renew Certificate","description":"Renew a certificate by signing a new CSR and optionally revoking the old one.\nProtected by app attestation. The attested keyId must be bound to the\nrequested poly_user_id, and any old_fingerprint to revoke must already\nbelong to that user, preventing cross-user revocation DoS.","operationId":"renew_certificate_psl_certificates_renew_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignCSRResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/psl/identity/pop-challenge":{"post":{"tags":["identity"],"summary":"Identity Pop Challenge","description":"Issue a single-use challenge for the caller to sign with its identity key.\n\nStored under the challenge itself rather than the attested keyId. Keying it\nby keyId meant the challenge and the registration that spends it had to\narrive under the same attestation key, and App Attest rotates that key\nwhenever a request 401s (`make_attested_request` clears it and re-attests),\nwhich stranded the nonce. Holding the nonce is not what authorizes\nanything: register_user still requires a signature over it from the key the\nclaimed pk1 id derives from, and deletes it on first successful use.","operationId":"identity_pop_challenge_psl_identity_pop_challenge_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/psl/intercom/identity":{"post":{"tags":["intercom"],"summary":"Intercom Identity","description":"Return the hash for the attested user; keyId must be bound to poly_user_id\n(bound on first use for pre-registration identities).","operationId":"intercom_identity_psl_intercom_identity_post","parameters":[{"name":"appattest","in":"header","required":true,"schema":{"type":"string","title":"Appattest"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stir/call_initiation":{"post":{"tags":["calls"],"summary":"Call Initiation","operationId":"call_initiation_stir_call_initiation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/api__controllers__psl__stir__CallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AndroidIntegrityRequest":{"properties":{"token":{"type":"string","title":"Token"},"keyId":{"type":"string","title":"Keyid"}},"type":"object","required":["token","keyId"],"title":"AndroidIntegrityRequest"},"Body_upload_veriff_media_veriff_upload_media__session_id__post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_upload_veriff_media_veriff_upload_media__session_id__post"},"Body_zoom_install_callback_zoom_phone_install_post":{"properties":{"state_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State Body"}},"type":"object","title":"Body_zoom_install_callback_zoom_phone_install_post"},"ContinuityRequest":{"properties":{"poly_user_ids":{"items":{"type":"string"},"type":"array","title":"Poly User Ids"},"account_id":{"type":"integer","title":"Account Id"},"exclude_meeting_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exclude Meeting Id"}},"type":"object","required":["poly_user_ids","account_id"],"title":"ContinuityRequest"},"CreateAccountRequest":{"properties":{"keyId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyid"},"challenge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge"},"iat":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Iat"},"jti":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jti"},"name":{"type":"string","title":"Name","min_role":"ADMIN"},"legal_entity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Entity","min_role":"ADMIN"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","min_role":"ADMIN"},"logo_dark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Dark","min_role":"ADMIN"},"logo_light":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Light","min_role":"ADMIN"},"users_can_auto_provision":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Users Can Auto Provision","min_role":"OWNER"}},"additionalProperties":false,"type":"object","required":["name"],"title":"CreateAccountRequest"},"CreateLinkRequest":{"properties":{"accountId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accountid","min_role":"POLYADMIN"},"title":{"type":"string","title":"Title","default":"Secure Meeting","min_role":"USER"},"requiredProofs":{"items":{"type":"string"},"type":"array","title":"Requiredproofs","default":[],"min_role":"USER"},"redirectUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirecturl","min_role":"USER"},"authRequiredFor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authrequiredfor","min_role":"USER"},"e2ee":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"E2Ee","default":false,"min_role":"USER"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","min_role":"USER"},"singleUse":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Singleuse","default":true,"min_role":"USER"},"autoApprove":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoapprove","default":false,"min_role":"POLYADMIN"},"sendTo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendto","default":"alerts@polyguard.ai","min_role":"USER"},"appId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appid","min_role":"OWNER"},"appContext":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Appcontext","min_role":"USER"},"matchingParams":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Matchingparams","min_role":"OWNER"},"claims":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Claims","min_role":"OWNER"},"autoArchive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoarchive","min_role":"USER"},"geofence":{"anyOf":[{"$ref":"#/components/schemas/GeofenceSpec"},{"type":"null"}],"min_role":"USER"},"guestList":{"anyOf":[{"$ref":"#/components/schemas/GuestListSpec"},{"type":"null"}],"min_role":"USER"},"targetPolyUserIds":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Targetpolyuserids","min_role":"USER"}},"additionalProperties":false,"type":"object","title":"CreateLinkRequest"},"EmailLinkVerifyRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"EmailLinkVerifyRequest"},"EmailLoginRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"EmailLoginRequest"},"EmailLoginVerifyRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"EmailLoginVerifyRequest"},"GeofenceLevel":{"properties":{"mode":{"type":"string","enum":["allow","deny"],"title":"Mode","default":"deny"},"codes":{"items":{"type":"string"},"type":"array","title":"Codes","default":[]}},"additionalProperties":false,"type":"object","title":"GeofenceLevel","description":"One allow/deny list. Empty deny list = allow all (the default)."},"GeofenceSpec":{"properties":{"countries":{"$ref":"#/components/schemas/GeofenceLevel","default":{"mode":"deny","codes":[]}},"states":{"$ref":"#/components/schemas/GeofenceLevel","default":{"mode":"deny","codes":[]}}},"additionalProperties":false,"type":"object","title":"GeofenceSpec","description":"Country baseline + per-state exceptions stored on a link (P-1313)."},"GuestListEntry":{"properties":{"type":{"type":"string","enum":["poly_user_id","full_name"],"title":"Type"},"value":{"type":"string","title":"Value"}},"additionalProperties":false,"type":"object","required":["type","value"],"title":"GuestListEntry","description":"One admitted guest: an exact poly_user_id or a legal name matched fuzzily."},"GuestListSpec":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/GuestListEntry"},"type":"array","title":"Entries","default":[]}},"additionalProperties":false,"type":"object","title":"GuestListSpec","description":"Allowlist of subjects who may complete the trust check (P-1137).\nAn empty list fails closed at evaluation, same as an empty geofence."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JoinSessionRequest":{"properties":{"link_uuid":{"type":"string","title":"Link Uuid"},"user_bundle":{"type":"string","maxLength":32768,"title":"User Bundle"}},"type":"object","required":["link_uuid","user_bundle"],"title":"JoinSessionRequest"},"SecureLinkRequest":{"properties":{"keyId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyid"},"challenge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenge"},"iat":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Iat"},"jti":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jti"},"user_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Token"},"user_bundle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Bundle"},"current_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Account Id"}},"type":"object","title":"SecureLinkRequest"},"SendLinkRequest":{"properties":{"accountId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accountid"},"title":{"type":"string","title":"Title","default":"Trust Check"},"requiredProofs":{"items":{"type":"string"},"type":"array","title":"Requiredproofs","default":[]},"redirectUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirecturl"},"sendToEmail":{"type":"string","title":"Sendtoemail"},"fromName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fromname"},"templateData":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Templatedata"},"appContext":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Appcontext"},"singleUse":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Singleuse","default":true},"autoApprove":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoapprove","default":false},"guestList":{"anyOf":[{"$ref":"#/components/schemas/GuestListSpec"},{"type":"null"}]},"targetPolyUserIds":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Targetpolyuserids"}},"additionalProperties":false,"type":"object","required":["sendToEmail"],"title":"SendLinkRequest","description":"Body for ``POST /v2/link/send/{app_id}``.\n\n``send_to_email`` is the verification target. The SES template is fixed\nserver-side, not caller-selectable. ``single_use`` is always forced True\nfor emailed links (validated in the handler)."},"SignCSRResponse":{"properties":{"certificate_pem":{"type":"string","title":"Certificate Pem"},"intermediate_pem":{"type":"string","title":"Intermediate Pem"},"root_pem":{"type":"string","title":"Root Pem"},"fingerprint":{"type":"string","title":"Fingerprint"}},"type":"object","required":["certificate_pem","intermediate_pem","root_pem","fingerprint"],"title":"SignCSRResponse","description":"Response from CSR signing."},"StartAttestationRequest":{"properties":{"keyId":{"type":"string","title":"Keyid"}},"type":"object","required":["keyId"],"title":"StartAttestationRequest"},"StartMeetingRequest":{"properties":{"jwtBlob":{"type":"string","title":"Jwtblob"}},"type":"object","required":["jwtBlob"],"title":"StartMeetingRequest"},"UpdateLinkRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","min_role":"USER"},"requiredProofs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Requiredproofs","min_role":"USER"},"redirectUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirecturl","min_role":"USER"},"authRequiredFor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authrequiredfor","min_role":"USER"},"e2ee":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"E2Ee","min_role":"USER"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","min_role":"USER"},"singleUse":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Singleuse","min_role":"USER"},"autoApprove":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoapprove","min_role":"POLYADMIN"},"sendTo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sendto","min_role":"USER"},"geofence":{"anyOf":[{"$ref":"#/components/schemas/GeofenceSpec"},{"type":"null"}],"min_role":"USER"},"guestList":{"anyOf":[{"$ref":"#/components/schemas/GuestListSpec"},{"type":"null"}],"min_role":"USER"}},"additionalProperties":false,"type":"object","title":"UpdateLinkRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"attestation":{"type":"string","title":"Attestation"},"keyId":{"type":"string","title":"Keyid"}},"type":"object","required":["attestation","keyId"],"title":"VerifyRequest"},"api__controllers__psl__stir__CallRequest":{"properties":{"caller_name":{"type":"string","title":"Caller Name"},"caller_number":{"type":"string","title":"Caller Number"},"recipient_number":{"type":"string","title":"Recipient Number"},"certainty":{"anyOf":[{"type":"number"},{"type":"string"}],"title":"Certainty"},"e2ee_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"E2Ee Status","default":""},"verified_via":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified Via","default":"UNVERIFIED"},"verification_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Time","default":""},"last_call":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Call","default":""},"security_grade":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Grade","default":"F"},"security_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Security Score","default":"0"}},"type":"object","required":["caller_name","caller_number","recipient_number","certainty"],"title":"CallRequest","description":"Model for incoming call start requests."},"api__models__api__call_models__CallRequest":{"properties":{"user_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User From","default":"215"},"user_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User To","default":""},"callUUID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calluuid","default":"1f19d8a7-7819-60ec-ac64-ff768d1db34b"},"hasVideo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hasvideo","default":false}},"type":"object","title":"CallRequest"}},"securitySchemes":{"PolyguardAPIKey":{"type":"apiKey","description":"Polyguard API key. Acts as the issuing user with the key's role.","in":"header","name":"x-pg-api-key"}}}}