{"openapi":"3.1.0","info":{"title":"My BLK World HQ — BBAIS","version":"0.1.0"},"paths":{"/api/":{"get":{"summary":"Root","operationId":"root_api__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/stats":{"get":{"summary":"Public Stats","operationId":"public_stats_api_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/register":{"post":{"summary":"Register","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/me":{"get":{"summary":"Me","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/change-password":{"post":{"summary":"Change Password","description":"Set or update the signed-in user's own password.\n\nSecurity model:\n  • If the account already HAS a password, `current_password` is required\n    and must verify — this stops a hijacked session from silently taking\n    over the account.\n  • If the account has NO password yet (e.g. a Google-only sign-in),\n    a first password can be set without a current one.\nThe new password is bcrypt-hashed via hash_password(); the plaintext is\nnever stored, logged, or returned. On success, all OTHER sessions for this\nuser are revoked (the current session stays valid).","operationId":"change_password_api_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/forgot-password":{"post":{"summary":"Forgot Password","description":"Begin a password reset. ALWAYS returns 202 with the same generic message.\n\nEnumeration safety: the response is byte-identical whether or not the address\nis registered, whether the account is disabled, and whether the email actually\nwent out. Anything else turns this endpoint into an \"is this person a member?\"\noracle. Failures are surfaced in the server log, never to the caller.\n\nThis is also the lockout escape hatch: it works for accounts whose\npassword_hash is None (created through Google sign-in), because the reset\nESTABLISHES a password rather than changing one.","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordBody"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-password":{"post":{"summary":"Reset Password","description":"Complete a password reset. Single-use, expiry-checked, enumeration-safe.\n\nWorks when the account has no password at all, which is the whole point: a\nGoogle-created user (password_hash=None) cannot log in and cannot reach\n/auth/change-password, so this is the only way they can ever get back in.","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google-session":{"post":{"summary":"Google Session","description":"Exchange external auth session_id for our own session cookie + user record.","operationId":"google_session_api_auth_google_session_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/users/check-username":{"get":{"summary":"Check Username","operationId":"check_username_api_users_check_username_get","parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/profile/{username}":{"get":{"summary":"Public Profile","operationId":"public_profile_api_users_profile__username__get","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/profile":{"patch":{"summary":"Update Profile","operationId":"update_profile_api_users_profile_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/avatar":{"post":{"summary":"Upload Avatar","operationId":"upload_avatar_api_users_avatar_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_avatar_api_users_avatar_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/banner":{"post":{"summary":"Upload Banner","operationId":"upload_banner_api_users_banner_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_banner_api_users_banner_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/profiles/{handle}":{"get":{"summary":"Get Public Profile","description":"Public member profile — resolved by username (case-insensitive) or user_id.\nReturns public fields only; NEVER exposes email or private data.","operationId":"get_public_profile_api_profiles__handle__get","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string","title":"Handle"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/purchases":{"get":{"summary":"My Purchases","operationId":"my_purchases_api_users_purchases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/users/enrollments":{"get":{"summary":"My Enrollments","operationId":"my_enrollments_api_users_enrollments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/platforms":{"get":{"summary":"List Platforms","operationId":"list_platforms_api_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/platforms":{"post":{"summary":"Create Platform","operationId":"create_platform_api_admin_platforms_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_platform_api_admin_platforms_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/platforms/{platform_id}":{"patch":{"summary":"Update Platform","operationId":"update_platform_api_admin_platforms__platform_id__patch","parameters":[{"name":"platform_id","in":"path","required":true,"schema":{"type":"string","title":"Platform Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Platform","operationId":"delete_platform_api_admin_platforms__platform_id__delete","parameters":[{"name":"platform_id","in":"path","required":true,"schema":{"type":"string","title":"Platform Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/platforms/{platform_id}/logo":{"post":{"summary":"Upload Platform Logo","operationId":"upload_platform_logo_api_admin_platforms__platform_id__logo_post","parameters":[{"name":"platform_id","in":"path","required":true,"schema":{"type":"string","title":"Platform Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_platform_logo_api_admin_platforms__platform_id__logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/faqs":{"get":{"summary":"List Faqs","operationId":"list_faqs_api_faqs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/faqs":{"post":{"summary":"Create Faq","operationId":"create_faq_api_admin_faqs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FAQCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/faqs/{faq_id}":{"patch":{"summary":"Update Faq","operationId":"update_faq_api_admin_faqs__faq_id__patch","parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","title":"Faq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Faq","operationId":"delete_faq_api_admin_faqs__faq_id__delete","parameters":[{"name":"faq_id","in":"path","required":true,"schema":{"type":"string","title":"Faq Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/site/about":{"get":{"summary":"Get About Page","description":"Public — returns the admin-edited About page content (or empty dict\nif never edited; FE merges with its built-in defaults).","operationId":"get_about_page_api_site_about_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/site/about":{"patch":{"summary":"Update About Page","description":"Admin — patch any allowed About-page field. Pass null / empty string\nto clear a field (FE will then fall back to its built-in default).","operationId":"update_about_page_api_admin_site_about_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/stats":{"get":{"summary":"Admin Stats","operationId":"admin_stats_api_admin_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/reconcile-blkpay":{"post":{"summary":"Admin Reconcile Blkpay","description":"Recover real-money orders that PayPal completed but our DB never recorded as\ncaptured (e.g. a top-up whose popup capture didn't finish). For each pending order\nwe ask PayPal its true status; if PayPal shows it APPROVED we capture it, if it's\nalready COMPLETED we just record + credit it. Nothing is charged that the buyer\ndidn't already approve, and every step is idempotent.","operationId":"admin_reconcile_blkpay_api_admin_reconcile_blkpay_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/users":{"get":{"summary":"Admin Users","description":"Members, NEWEST FIRST, with the real totals.\n\nThis used to serve an unordered first-50 and the caller rendered its own\n`users.length` as the member count, so member 51 onward was invisible in\nadmin while the public counter (which counts the whole collection) kept\nclimbing — the \"52 on the site, 50 in admin\" gap. Newest-first ordering\nalso matters on its own: a new signup belongs at the TOP of the list the\nowner is opening in order to find them.","operationId":"admin_users_api_admin_users_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/me":{"get":{"summary":"Admin Me","description":"What THIS admin is allowed to see. Drives the admin sidebar.\n\nAlways reachable by any admin — it reports only the caller's own access.","operationId":"admin_me_api_admin_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/team":{"get":{"summary":"Admin Team List","description":"Every admin/moderator account and the sections each one carries.","operationId":"admin_team_list_api_admin_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Team Create","description":"Create a CONTRACTOR admin with an explicit, limited section grant.\n\nA contractor admin starts with exactly the sections named here and nothing\nelse — the grant is always written, so they are restricted from the first\nrequest rather than inheriting the legacy full-access default.","operationId":"admin_team_create_api_admin_team_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/team/{user_id}":{"patch":{"summary":"Admin Team Update","description":"Set an admin's section grant, or activate/deactivate the account.","operationId":"admin_team_update_api_admin_team__user_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Team Revoke","description":"Revoke admin — demotes to member and ends every active session.","operationId":"admin_team_revoke_api_admin_team__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/role":{"patch":{"summary":"Update User Role","operationId":"update_user_role_api_admin_users__user_id__role_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/impersonate/{user_id}":{"post":{"summary":"Admin Impersonate","description":"Admin 'Log in as' a member — support/moderation access to a member's own\naccount. Mints a fresh session for the target user, TAGGED with the acting\nadmin, writes an audit record, and SETS that session as the auth cookie so the\nswitch actually takes effect (the token resolver reads the cookie first, so a\nBearer-only swap left the admin signed in as themselves). The admin's own\ntoken is returned so the client can restore it via /admin/impersonate/exit.","operationId":"admin_impersonate_api_admin_impersonate__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/impersonate-exit":{"post":{"summary":"Admin Impersonate Exit","description":"Return to the admin's own account from an impersonation session. Restores\nthe admin session as the auth cookie (the client can't clear the httponly\ncookie itself) and cleans up the transient impersonation session.","operationId":"admin_impersonate_exit_api_admin_impersonate_exit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/purchases":{"get":{"summary":"Admin All Purchases","description":"Admin: every purchase across the platform with user + product hydrated.\nFounder mandate: 'Admin needs to see all payments and late payments correctly\nfrom every user as well as all contracts e signed.'","operationId":"admin_all_purchases_api_admin_purchases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice/voices/{voice_id}/sample":{"get":{"tags":["voice"],"summary":"Get Voice Sample","description":"Return sample state (script + whether it's generated yet).","operationId":"get_voice_sample_api_voice_voices__voice_id__sample_get","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/sample/regenerate":{"post":{"tags":["voice"],"summary":"Regenerate Voice Sample","description":"Generate (or regenerate) the sample audio for this voice.\n\nPricing: 1.25 BLKCOIN on first generation, 0.15 BLKCOIN each\nsubsequent regeneration. The user sees only the BLKCOIN totals.","operationId":"regenerate_voice_sample_api_voice_voices__voice_id__sample_regenerate_post","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/sample/play":{"post":{"tags":["voice"],"summary":"Play Voice Sample","description":"Charge per play, then return audio stream.\n\nThe user sees a clean BLKCOIN deduction only — no rate, no math.","operationId":"play_voice_sample_api_voice_voices__voice_id__sample_play_post","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices":{"get":{"tags":["voice"],"summary":"List Voices","operationId":"list_voices_api_voice_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["voice"],"summary":"Create Voice","description":"Real device upload of a reference recording. Doctrine 26.1 — no URL fields.","operationId":"create_voice_api_voice_voices_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_voice_api_voice_voices_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/reference":{"post":{"tags":["voice"],"summary":"Readd Reference","description":"Re-attach a fresh reference recording to an EXISTING voice, keeping its\nname and every delivery adjustment. Restores a voice whose engine reference\nwas lost (e.g. an engine/account migration) WITHOUT losing your tuning.","operationId":"readd_reference_api_voice_voices__voice_id__reference_post","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_readd_reference_api_voice_voices__voice_id__reference_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/recover":{"post":{"tags":["voice"],"summary":"Recover Voices From Samples","description":"Best-effort salvage for voices whose engine reference was lost before backups\nexisted (the account migration). Re-registers each voice from its CACHED generated\nsample in R2. This is an APPROXIMATION — it clones from the sample, not your\noriginal reference — so it restores usability but not necessarily an exact match.\nSkips voices already backed up. Names/settings are never touched.","operationId":"recover_voices_from_samples_api_voice_voices_recover_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice/voices/{voice_id}":{"patch":{"tags":["voice"],"summary":"Rename Voice","operationId":"rename_voice_api_voice_voices__voice_id__patch","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["voice"],"summary":"Delete Voice","operationId":"delete_voice_api_voice_voices__voice_id__delete","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/chat/voices":{"get":{"tags":["voice"],"summary":"List Chat Voices","description":"Voices the member has imported into BLK-AI Chat.","operationId":"list_chat_voices_api_voice_chat_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["voice"],"summary":"Import Chat Voice","description":"One-click import of a catalog voice into BLK-AI Chat. Costs\nCHAT_VOICE_IMPORT_COST BLKCOIN, once, per voice added. The imported entry has\nits OWN editable name and can be deleted without touching the source voice in\nBLK-AI: Voice. Re-importing a voice already in chat is a no-op (no charge).","operationId":"import_chat_voice_api_voice_chat_voices_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice/chat/voices/{chat_voice_id}":{"patch":{"tags":["voice"],"summary":"Rename Chat Voice","operationId":"rename_chat_voice_api_voice_chat_voices__chat_voice_id__patch","parameters":[{"name":"chat_voice_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["voice"],"summary":"Delete Chat Voice","operationId":"delete_chat_voice_api_voice_chat_voices__chat_voice_id__delete","parameters":[{"name":"chat_voice_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/chat/voices/{chat_voice_id}/read":{"post":{"tags":["voice"],"summary":"Read In Chat Voice","description":"Read a BLK-AI chat response aloud in an imported voice. The first play of a\nreply synthesizes (wakes the model) and costs CHAT_READ_COST_SYNTH; every replay\nis served from cache and costs CHAT_READ_COST_CACHED.\n\nKEEPS THE VOICE MODEL ASLEEP FOR REPLAYS: the finished audio for a given\n(voice, exact text, delivery settings) is cached in R2. A replay of the same\nreply serves straight from R2 and NEVER touches the engine — so it does not\nwake the model. Only the FIRST play of a brand-new reply synthesizes (one\nengine wake), then it's cached. Auto-refunded if that one synth fails.","operationId":"read_in_chat_voice_api_voice_chat_voices__chat_voice_id__read_post","parameters":[{"name":"chat_voice_id","in":"path","required":true,"schema":{"type":"string","title":"Chat Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects":{"get":{"tags":["voice"],"summary":"List Projects","operationId":"list_projects_api_voice_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["voice"],"summary":"Create Project","operationId":"create_project_api_voice_projects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice/projects/{project_id}":{"get":{"tags":["voice"],"summary":"Get Project","operationId":"get_project_api_voice_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["voice"],"summary":"Delete Project","operationId":"delete_project_api_voice_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/files/{file_id}/audio":{"get":{"tags":["voice"],"summary":"Proxy Audio","operationId":"proxy_audio_api_voice_files__file_id__audio_get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/delivery_setting":{"put":{"tags":["voice"],"summary":"Set Voice Delivery Setting","description":"Truer ↔ smoother slider. Body: {\"setting\": 0.0..1.0}. Persists.","operationId":"set_voice_delivery_setting_api_voice_voices__voice_id__delivery_setting_put","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/delivery_filter":{"put":{"tags":["voice"],"summary":"Set Voice Delivery Filter","description":"Delivery filter for this custom voice. Plain-language enums only.","operationId":"set_voice_delivery_filter_api_voice_voices__voice_id__delivery_filter_put","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/voices/{voice_id}/pronunciations":{"put":{"tags":["voice"],"summary":"Set Voice Pronunciations","description":"Voice-level pronunciation library. Replaces the saved map.","operationId":"set_voice_pronunciations_api_voice_voices__voice_id__pronunciations_put","parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string","title":"Voice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/pronunciations":{"put":{"tags":["voice"],"summary":"Set Project Pronunciations","description":"Project-level pronunciation override. Replaces the project's map.","operationId":"set_project_pronunciations_api_voice_projects__project_id__pronunciations_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/initialize":{"post":{"tags":["voice"],"summary":"Project Initialize","operationId":"project_initialize_api_voice_projects__project_id__initialize_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/rechunk":{"post":{"tags":["voice"],"summary":"Project Rechunk","description":"Discard non-confirmed segments and re-chunk the remaining text\nat the voice's current pacing. Confirmed segments are preserved.","operationId":"project_rechunk_api_voice_projects__project_id__rechunk_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/batches/{batch_index}/generate":{"post":{"tags":["voice"],"summary":"Project Generate Batch","operationId":"project_generate_batch_api_voice_projects__project_id__batches__batch_index__generate_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"batch_index","in":"path","required":true,"schema":{"type":"integer","title":"Batch Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/batches/{batch_index}/confirm":{"post":{"tags":["voice"],"summary":"Project Confirm Batch","operationId":"project_confirm_batch_api_voice_projects__project_id__batches__batch_index__confirm_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"batch_index","in":"path","required":true,"schema":{"type":"integer","title":"Batch Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/segments":{"get":{"tags":["voice"],"summary":"Project Segments","operationId":"project_segments_api_voice_projects__project_id__segments_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/files/{file_id}/download-url":{"get":{"tags":["voice"],"summary":"Segment Download Url","description":"Presigned R2 URL for ONE section, as an attachment. The old download link\npointed at the auth-gated proxy, which is why section downloads said 'auth\nrequired' on iPad/mobile while the full reading downloaded fine.","operationId":"segment_download_url_api_voice_files__file_id__download_url_get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/final.wav":{"get":{"tags":["voice"],"summary":"Project Final Audio","description":"Download the finished reading. Returns 302 to a short-lived,\nRange-capable R2 URL. The backend never touches an audio byte.\n\nThis endpoint used to serially pull every segment through the app (~350s\nfor a 4-hour book), stitch a ~660 MB buffer, retune it into a second copy,\nthen LAME-encode a third -- 2-3 GB peak on a 512 MB instance. That is what\nproduced the 504s and OOM kills, and why the whole app froze for everyone\nelse while one download ran.","operationId":"project_final_audio_api_voice_projects__project_id__final_wav_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/final-url":{"get":{"tags":["voice"],"summary":"Project Final Url","description":"JSON form for the player. `stream_url` is a plain presigned GET: R2\nanswers Range with 206, which is exactly what iOS Safari needs to stream\nand scrub a multi-hour file. No Content-Disposition, so it plays inline.","operationId":"project_final_url_api_voice_projects__project_id__final_url_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/progress":{"get":{"tags":["voice"],"summary":"Project Progress","description":"Real progress: segments finished / segments total. Nothing invented.","operationId":"project_progress_api_voice_projects__project_id__progress_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/download-ticket":{"post":{"tags":["voice"],"summary":"Project Download Ticket","operationId":"project_download_ticket_api_voice_projects__project_id__download_ticket_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/download-refund":{"post":{"tags":["voice"],"summary":"Project Download Refund","description":"Auto-refund the INITIAL download fee when the client reports the download\nfailed. Resets `download_paid` so a genuine retry can charge again; idempotent\n(a project already un-paid refunds nothing).","operationId":"project_download_refund_api_voice_projects__project_id__download_refund_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/versions":{"get":{"tags":["voice"],"summary":"Project Versions","description":"Every finished version of this reading, newest last: Original, Regen 1,\nRegen 2 … each with its timestamp, size, a presigned stream URL, and whether\nit's already been paid for (so the UI can show the right download price).","operationId":"project_versions_api_voice_projects__project_id__versions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/versions/{version}/audio":{"get":{"tags":["voice"],"summary":"Project Version Audio","description":"Stream one version — used by the Saved folder's player. Redirects to a\npresigned R2 URL (Range-capable), so no auth travels with the media element.","operationId":"project_version_audio_api_voice_projects__project_id__versions__version__audio_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/script":{"get":{"tags":["voice"],"summary":"Get Script","operationId":"get_script_api_voice_projects__project_id__script_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["voice"],"summary":"Put Script","description":"Replace the full script text for this project. Confirmed segments\nare preserved; everything past the confirmed tail is re-chunked at\nthe voice's current pacing, ready to regenerate.","operationId":"put_script_api_voice_projects__project_id__script_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/regenerate-all":{"post":{"tags":["voice"],"summary":"Regenerate All","description":"Regenerate the WHOLE reading with the voice's CURRENT settings +\npronunciation library. This is how a pronunciation/settings fix actually\ntakes effect across a finished project: every segment re-synthesized at the\ncurrent signature, then auto-confirmed and re-finalized — no per-section\nclicking, works on 'complete' projects.\n\nCosts are charged PER BATCH (exactly like normal generation), so each batch\nfires its own BLKCOIN notification — we don't group costs into one lump.","operationId":"regenerate_all_api_voice_projects__project_id__regenerate_all_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/segments/{segment_id}":{"patch":{"tags":["voice"],"summary":"Patch Segment","operationId":"patch_segment_api_voice_projects__project_id__segments__segment_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"segment_id","in":"path","required":true,"schema":{"type":"string","title":"Segment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/projects/{project_id}/segments/{segment_id}/regenerate":{"post":{"tags":["voice"],"summary":"Regenerate Segment","description":"Regenerate a single failed / pending / edited segment. Atomic\nBLKCOIN debit ($0.0025 × character count). Synthesis runs in the\nbackground like the batch path.","operationId":"regenerate_segment_api_voice_projects__project_id__segments__segment_id__regenerate_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"segment_id","in":"path","required":true,"schema":{"type":"string","title":"Segment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkai/models":{"get":{"summary":"Public Blkai Models","description":"List the live BLK-AI models in admin-chosen order with their\nadmin-uploaded showcase media bundled in.","operationId":"public_blkai_models_api_blkai_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/home/sections":{"get":{"summary":"Public Home Sections","description":"Public: the currently PUBLISHED homepage section order.","operationId":"public_home_sections_api_home_sections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkai/showcase":{"get":{"summary":"Admin List Showcase","operationId":"admin_list_showcase_api_admin_blkai_showcase_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Add Showcase","operationId":"admin_add_showcase_api_admin_blkai_showcase_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_add_showcase_api_admin_blkai_showcase_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/blkai/showcase/{showcase_id}":{"put":{"summary":"Admin Update Showcase","operationId":"admin_update_showcase_api_admin_blkai_showcase__showcase_id__put","parameters":[{"name":"showcase_id","in":"path","required":true,"schema":{"type":"string","title":"Showcase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Delete Showcase","operationId":"admin_delete_showcase_api_admin_blkai_showcase__showcase_id__delete","parameters":[{"name":"showcase_id","in":"path","required":true,"schema":{"type":"string","title":"Showcase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/blkai/showcase/reorder":{"post":{"summary":"Admin Reorder Showcase","description":"Body: {model_id, ordered_ids: [showcase_id, showcase_id, ...]}","operationId":"admin_reorder_showcase_api_admin_blkai_showcase_reorder_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/sections":{"get":{"summary":"Admin Get Sections","operationId":"admin_get_sections_api_admin_home_sections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/sections/draft":{"put":{"summary":"Admin Save Section Draft","description":"Body: {sections: [{key, visible, slot_index}, ...]}. Saved as draft.","operationId":"admin_save_section_draft_api_admin_home_sections_draft_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/sections/publish":{"post":{"summary":"Admin Publish Sections","operationId":"admin_publish_sections_api_admin_home_sections_publish_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/sections/discard":{"post":{"summary":"Admin Discard Draft","operationId":"admin_discard_draft_api_admin_home_sections_discard_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkai/model_order":{"put":{"summary":"Admin Reorder Models","description":"Body: {order: [model_id, model_id, ...]} — sets the displayed\norder of the LIVE BLK-AI models on the public Experience page.","operationId":"admin_reorder_models_api_admin_blkai_model_order_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/home/content":{"get":{"summary":"Public Home Content","operationId":"public_home_content_api_home_content_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/home/media/{path}":{"get":{"summary":"Public Home Media","description":"Hand the browser straight to object storage.\n\nTHIS IS WHAT WAS CRASHING THE PLATFORM.\n\nIt used to read the WHOLE object into the backend's memory and stream it from\nthere, and it ignored HTTP Range entirely — no `Accept-Ranges`, no 206, just\na 200 with the entire file. So a 158 MB banner video allocated 158 MB of RSS\non a 512 MB instance FOR EVERY REQUEST, and the browser — unable to ask for a\nbyte range — had to buffer the whole file just to show a frame or to seek. A\ncouple of visitors on the home page at once and the backend was out of memory.\nEvery device saw it, because it was the server dying, not the browser.\n\nR2 serves Range natively. Redirecting there gives real streaming, real\nseeking, and the backend never touches a single byte of the file.\n\nFalls back to the old proxy if object storage can't presign, so nothing that\nworks today stops working.","operationId":"public_home_media_api_home_media__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/home/content":{"get":{"summary":"Admin Get Content","operationId":"admin_get_content_api_admin_home_content_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/content/section/{key}":{"put":{"summary":"Admin Save Section","description":"Body: { fields?, images?, videos?, audio?, blocks?, visible?, order? }\nPartial; merges with current draft section.","operationId":"admin_save_section_api_admin_home_content_section__key__put","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/home/content/order":{"put":{"summary":"Admin Save Order","description":"Body: { order: [ {key, order, visible} ] } — sets order + visibility\nfor all known sections in one call.","operationId":"admin_save_order_api_admin_home_content_order_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/content/publish":{"post":{"summary":"Admin Publish","operationId":"admin_publish_api_admin_home_content_publish_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/content/discard":{"post":{"summary":"Admin Discard","operationId":"admin_discard_api_admin_home_content_discard_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/content/media":{"post":{"summary":"Admin Upload Media","operationId":"admin_upload_media_api_admin_home_content_media_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_upload_media_api_admin_home_content_media_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/copilot/home/state":{"get":{"summary":"Copilot Home State","description":"Co-Pilot read access — returns current draft + published + catalog.","operationId":"copilot_home_state_api_copilot_home_state_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/copilot/home/section/{key}":{"put":{"summary":"Copilot Save Section","description":"Co-Pilot can write to draft only — never directly to published.","operationId":"copilot_save_section_api_copilot_home_section__key__put","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/copilot/home/order":{"put":{"summary":"Copilot Save Order","operationId":"copilot_save_order_api_copilot_home_order_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/copilot/home/upload":{"post":{"summary":"Copilot Upload","operationId":"copilot_upload_api_copilot_home_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_copilot_upload_api_copilot_home_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/home/curated":{"get":{"summary":"Get Curated Home","description":"Public: the hand-picked products for the homepage, in admin order.","operationId":"get_curated_home_api_home_curated_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/home/curated":{"get":{"summary":"Admin Get Curated","description":"Admin: current selection (ordered) + all available BLKShop items to pick from.","operationId":"admin_get_curated_api_admin_home_curated_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Set Curated","description":"Admin: replace the curated list. Body: { \"product_ids\": [...] } (order matters).","operationId":"admin_set_curated_api_admin_home_curated_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/storage/migrate":{"post":{"summary":"Admin Migrate Uploads","description":"Scan UPLOAD_ROOT, upload every file not already migrated to object\nstorage, record the mapping. Returns counts.","operationId":"admin_migrate_uploads_api_admin_storage_migrate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/storage/migration-status":{"get":{"summary":"Admin Migration Status","operationId":"admin_migration_status_api_admin_storage_migration_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/uploads/{rel_path}":{"get":{"summary":"Serve Uploaded File","description":"Smart serve, in three steps:\n\n1. the migration map, for files bulk-moved off the old container disk;\n2. object storage at the deterministic key, for anything written by\n   _save_upload since uploads started going straight to R2 (no DB row);\n3. local disk, for legacy files on a host that still has them.","operationId":"serve_uploaded_file_api_uploads__rel_path__get","parameters":[{"name":"rel_path","in":"path","required":true,"schema":{"type":"string","title":"Rel Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets":{"get":{"summary":"Fleet","description":"Every store across every PBP with its two tablets, filtered, searched and sorted, plus the\nchart data for exactly that selection.","operationId":"fleet_api_admin_tablets_get","parameters":[{"name":"pbp","in":"query","required":false,"schema":{"type":"string","maxLength":40,"default":"","title":"Pbp"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","maxLength":40,"default":"","title":"Status"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"","title":"Role"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":80,"default":"","title":"Q"}},{"name":"health","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"","title":"Health"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","maxLength":20,"default":"name","title":"Sort"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/{pbp}/stores/{store_id}/assign":{"post":{"summary":"Assign","operationId":"assign_api_admin_tablets__pbp__stores__store_id__assign_post","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}},{"name":"store_id","in":"path","required":true,"schema":{"type":"string","title":"Store Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/{pbp}/{tablet_id}/provisioning":{"post":{"summary":"Provisioning","description":"The setup QR for a factory-reset, Google-certified tablet (Android Enterprise QR provisioning):\ntap the welcome screen 6 times, scan, and it installs the BBAIS app and sets itself up.","operationId":"provisioning_api_admin_tablets__pbp___tablet_id__provisioning_post","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}},{"name":"tablet_id","in":"path","required":true,"schema":{"type":"string","title":"Tablet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisioningBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/{pbp}/{tablet_id}/{action}":{"post":{"summary":"Act","description":"cancel = lock it and start the 14-day return window; pickup = pickup scheduled;\nreturned = back with BBAIS (it wipes itself); code = a new one-time setup code.","operationId":"act_api_admin_tablets__pbp___tablet_id___action__post","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}},{"name":"tablet_id","in":"path","required":true,"schema":{"type":"string","title":"Tablet Id"}},{"name":"action","in":"path","required":true,"schema":{"enum":["cancel","pickup","returned","code"],"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/{pbp}/{tablet_id}/kiosk-exit":{"put":{"summary":"Kiosk","operationId":"kiosk_api_admin_tablets__pbp___tablet_id__kiosk_exit_put","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}},{"name":"tablet_id","in":"path","required":true,"schema":{"type":"string","title":"Tablet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KioskBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/{pbp}/settings":{"get":{"summary":"Get Settings","operationId":"get_settings_api_admin_tablets__pbp__settings_get","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Put Settings","description":"That PBP's tablets: the allowed BLK apps and the app version they should run.","operationId":"put_settings_api_admin_tablets__pbp__settings_put","parameters":[{"name":"pbp","in":"path","required":true,"schema":{"type":"string","title":"Pbp"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tablets/audit":{"get":{"summary":"Audit","operationId":"audit_api_admin_tablets_audit_get","parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pbp","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Pbp"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/jobs/active":{"get":{"summary":"List Active Jobs","description":"This member's still-in-flight renders, newest first — optionally\nscoped to one project.\n\nOwner's standing #1 rule: a render survives a reload or a closed tab.\nThe backend already honors that — every submit spawns a server-side\npoller (see submit_blk_job below) that completes and saves the job\nregardless of whether anyone is watching. What was missing was the\nFRONTEND'S half: a job's id lived only in React state inside the\ngenerate modal, never in localStorage and never re-fetched on mount, so\na reload didn't cancel the render — it just made the page forget the\njob existed. From the member's side that read as identical to\ncancellation. This is the lookup the frontend calls on load to\nrediscover a job it lost track of; it is not a new job, just a\nrediscovered one.","operationId":"list_active_jobs_api_v1_cinema_jobs_active_get","parameters":[{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/blk/models":{"get":{"summary":"List Blk Models","operationId":"list_blk_models_api_v1_cinema_blk_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/blk/jobs":{"post":{"summary":"Submit Blk Job","description":"Body: {model_id, kind: 'image'|'video', prompt, options?}\noptions: {aspect_ratio?, resolution?, seconds?, size?, image_b64? (for i2v)}","operationId":"submit_blk_job_api_v1_cinema_blk_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/blk/jobs/{job_id}":{"get":{"summary":"Get Blk Job","operationId":"get_blk_job_api_v1_cinema_blk_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/voices":{"get":{"summary":"List Cinema Voices","description":"Return the calling user's own BLK-AI Voice clones for the Cinema\nvoice picker. ONLY id + display name leave the boundary.","operationId":"list_cinema_voices_api_v1_cinema_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/character-library":{"get":{"summary":"List Characters","operationId":"list_characters_api_v1_cinema_character_library_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Character","operationId":"create_character_api_v1_cinema_character_library_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_character_api_v1_cinema_character_library_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/character-library/{character_id}":{"get":{"summary":"Get Character","operationId":"get_character_api_v1_cinema_character_library__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Rename Character","operationId":"rename_character_api_v1_cinema_character_library__character_id__patch","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Character","operationId":"delete_character_api_v1_cinema_character_library__character_id__delete","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/character-library/{character_id}/references":{"post":{"summary":"Add References","operationId":"add_references_api_v1_cinema_character_library__character_id__references_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_references_api_v1_cinema_character_library__character_id__references_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/character-library/{character_id}/references/{reference_id}":{"delete":{"summary":"Remove Reference","operationId":"remove_reference_api_v1_cinema_character_library__character_id__references__reference_id__delete","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"reference_id","in":"path","required":true,"schema":{"type":"string","title":"Reference Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flyers/presets":{"get":{"summary":"List Presets","operationId":"list_presets_api_v1_flyers_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/flyers/draft_prompt":{"post":{"summary":"Draft Prompt","description":"BLK-AI Code Fast (BA1-Fast) drafts a clean, positive-only visual\nprompt for the selected FlyBLK model. The member can describe what\nthey want in plain English (and / or paste a link, and / or attach\nreferences) — BLKCODE rewrites it as a precision prompt that honors\nthe platform's prompt-writing rules (POSITIVE DESCRIPTION ONLY,\nFAITHFULNESS, DO NOT INVENT — Pass 3 Phase 2).\n\nReturns: {\"prompt\": \"...the optimized visual prompt...\"}","operationId":"draft_prompt_api_v1_flyers_draft_prompt_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/flyers/jobs":{"post":{"summary":"Submit Flyer","operationId":"submit_flyer_api_v1_flyers_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/flyers/jobs/{job_id}":{"get":{"summary":"Get Job","operationId":"get_job_api_v1_flyers_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flyers/recent":{"get":{"summary":"Recent Flyers","operationId":"recent_flyers_api_v1_flyers_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flyers/jobs/{job_id}/remove-watermark":{"post":{"summary":"Remove Watermark","description":"Release a clean, watermark-free copy of every flyer in the job as\nSEPARATE entries in the member's library. Costs 1.25 BLKCOIN total,\ndebited atomically. Original watermarked flyer is preserved.","operationId":"remove_watermark_api_v1_flyers_jobs__job_id__remove_watermark_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/blog/posts":{"get":{"summary":"List Published","operationId":"list_published_api_v1_blog_posts_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}},{"name":"tag","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tag"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/blog/posts/{slug}":{"get":{"summary":"Get Published","operationId":"get_published_api_v1_blog_posts__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/blog/categories":{"get":{"summary":"List Categories","operationId":"list_categories_api_v1_blog_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/blog/tags":{"get":{"summary":"List Tags","operationId":"list_tags_api_v1_blog_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/blog/upload":{"post":{"summary":"Admin Upload Media","description":"Upload an image / video / audio file. Returns a streamable URL\nthat persists across redeploys (Emergent object storage).","operationId":"admin_upload_media_api_v1_admin_blog_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_upload_media_api_v1_admin_blog_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/blog/posts":{"get":{"summary":"Admin List","operationId":"admin_list_api_v1_admin_blog_posts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Create","operationId":"admin_create_api_v1_admin_blog_posts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/blog/posts/{post_id}":{"patch":{"summary":"Admin Update","operationId":"admin_update_api_v1_admin_blog_posts__post_id__patch","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Delete","operationId":"admin_delete_api_v1_admin_blog_posts__post_id__delete","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/blkblog/ssr":{"get":{"summary":"Ssr Index","operationId":"ssr_index_api_v1_blkblog_ssr_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/v1/blkblog/ssr/{slug}":{"get":{"summary":"Ssr Post","operationId":"ssr_post_api_v1_blkblog_ssr__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/blkblog/sitemap.xml":{"get":{"summary":"Blog Sitemap","operationId":"blog_sitemap_api_v1_blkblog_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/blog/sitemap.xml":{"get":{"summary":"Blog Sitemap Legacy","operationId":"blog_sitemap_legacy_api_v1_blog_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/blkblog/llms.txt":{"get":{"summary":"Blog Llms Txt","operationId":"blog_llms_txt_api_v1_blkblog_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/blog/robots.txt":{"get":{"summary":"Blog Robots","description":"Legacy alias — the canonical robots.txt lives at the SITE ROOT\nin /app/frontend/public/robots.txt. We keep this endpoint so any\ncrawler that discovered it before still receives the same allow-list.","operationId":"blog_robots_api_v1_blog_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/domains/hello":{"get":{"summary":"Hello","description":"CORE API connectivity + auth probe. Backend-only — surfaces a\nsafe boolean to the admin shell so an operator can confirm the\nregistrar pipe is alive without exposing engine internals.","operationId":"hello_api_v1_domains_hello_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/search":{"post":{"summary":"Domain Search","description":"Live domain search. Body: {query: str, tlds?: [str]}.\nMain-admin gets wholesale rates; every other member sees rates\nmarked up 40% rounded up to the nearest whole dollar. BLK / BBAIS\ntrademark candidates are stripped so we never market our own brand.\nReturns:\n  results:         direct registrar matches (verified available)\n  alternatives:    curated alt names tried against availability\n  admin_pricing:   true when the caller sees raw wholesale rates","operationId":"domain_search_api_v1_domains_search_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/gate-status":{"get":{"summary":"Domains Gate Status","description":"Public: does the domains surface currently require a password?","operationId":"domains_gate_status_api_v1_domains_gate_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/gate-config":{"get":{"summary":"Admin Get Domains Gate","operationId":"admin_get_domains_gate_api_v1_domains_gate_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Admin Set Domains Gate","operationId":"admin_set_domains_gate_api_v1_domains_gate_config_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/tlds":{"get":{"summary":"List Tlds","description":"Browsable TLD pricing table — the FE pricing slate. Pulled live\nfrom the registrar's TLD pricing endpoint on first call; cached in\nMongo for the day so we don't hammer the registrar on every page\nload. Falls back to the curated default slate if the registrar\ncan't be reached so the UI never goes empty.","operationId":"list_tlds_api_v1_domains_tlds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/availability":{"post":{"summary":"Domain Availability","description":"Bulk availability check. Body: {domains: [str]}.","operationId":"domain_availability_api_v1_domains_availability_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains":{"get":{"summary":"List Member Domains","description":"Returns ALL domains the member owns via BBAIS — Mongo as the\nsource of truth, so the list works even if name.com is down.","operationId":"list_member_domains_api_v1_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/register":{"post":{"summary":"Register Domain","description":"Registers a domain via the registrar after debiting BLKCOIN atomically.\nBody: {\n  domain: str,\n  years: int (default 1, 1-10),\n  purchase_price_usd: float,        # the price the member confirmed\n  auto_renew: bool,\n  privacy: bool,                    # WHOIS privacy\n  contact: {                        # required registrant contact\n    first_name, last_name, email, phone,\n    address1, address2?, city, state, zip, country (ISO-2)\n  },\n}\nIncludes ICANN compliance bookkeeping: initial 60-day transfer\nlock recorded, 15-day registrant-email verification countdown\nstarted, status codes tracked.","operationId":"register_domain_api_v1_domains_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/{domain}/renew":{"post":{"summary":"Renew Domain","operationId":"renew_domain_api_v1_domains__domain__renew_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/auto-renew-legacy-removed":{"post":{"summary":" Legacy Auto Renew Removed","description":"Replaced by the consolidated UpdateDomain PATCH-based handler\nbelow — this stub remains only so Python's route table can carry\na unique name (see set_auto_renew defined further down).","operationId":"_legacy_auto_renew_removed_api_v1_domains__domain__auto_renew_legacy_removed_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/{domain}/dns":{"get":{"summary":"List Dns","operationId":"list_dns_api_v1_domains__domain__dns_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Dns","operationId":"create_dns_api_v1_domains__domain__dns_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/dns/{record_id}":{"delete":{"summary":"Delete Dns","operationId":"delete_dns_api_v1_domains__domain__dns__record_id__delete","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/lock":{"post":{"summary":"Set Lock","description":"Per CORE v1 migration: individual :lock / :unlock action endpoints\nare deprecated in favor of the consolidated UpdateDomain PATCH. We\nflip the `locked` field on the domain resource.","operationId":"set_lock_api_v1_domains__domain__lock_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/privacy":{"post":{"summary":"Set Privacy","description":"Privacy ON uses the verified action endpoint :enableWhoisPrivacy.\nPrivacy OFF uses the consolidated UpdateDomain PATCH (the discrete\n:disableWhoisPrivacy action is deprecated per the CORE migration).","operationId":"set_privacy_api_v1_domains__domain__privacy_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/auto-renew":{"post":{"summary":"Set Auto Renew","description":"Auto-renew via the consolidated UpdateDomain PATCH — the discrete\n:enableAutorenew / :disableAutorenew action endpoints are\ndeprecated per the CORE migration.","operationId":"set_auto_renew_api_v1_domains__domain__auto_renew_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/{domain}/auth-code":{"get":{"summary":"Get Auth Code","description":"ICANN gives the registrant a right to their EPP / auth code for\na transfer-out. We surface it to the member on demand — no holds.","operationId":"get_auth_code_api_v1_domains__domain__auth_code_get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/naming":{"post":{"summary":"Creative Naming","description":"Pass 3 Phase 1 — Creative naming chain.\nBody: {concept: str (the member's brief), max?: int}.\n\n1. BLKCODE BA1-Fast reads the concept as a CREATIVE BRIEF and\n   generates inventive, brandable domain NAMES — coined words,\n   evocative compounds, short brandable marks. NEVER echoes the\n   member's raw sentence.\n2. Each candidate is live-checked against the availability endpoint\n   (50/call batched, sequential as needed).\n3. ONLY confirmed-available names are returned.","operationId":"creative_naming_api_v1_domains_naming_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/transfer":{"post":{"summary":"Transfer In","description":"Start a transfer-in. Body: {domain, auth_code, purchase_price_usd, contact}.\nAdds one year to the registration per ICANN policy.","operationId":"transfer_in_api_v1_domains_transfer_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/{domain}/verify":{"post":{"summary":"Resend Verification","description":"Re-send the ICANN registrant email verification message.","operationId":"resend_verification_api_v1_domains__domain__verify_post","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/domains/admin/all":{"get":{"summary":"Admin All Domains","description":"Admin: every domain across every member. Defaults sort to\nsoonest-expiring first so the admin sees what needs attention.","operationId":"admin_all_domains_api_v1_domains_admin_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/admin/ledger":{"get":{"summary":"Admin Ledger","description":"Admin: every BLKCOIN domain ledger entry, newest first.","operationId":"admin_ledger_api_v1_domains_admin_ledger_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/_status":{"get":{"summary":"Domains Status","description":"Public health probe — tells the FE whether registrar creds are\nprovisioned, so the page can render Setup-Required vs Live state\nwithout trying a real query.","operationId":"domains_status_api_v1_domains__status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/admin/pricing":{"get":{"summary":"Get Admin Pricing","operationId":"get_admin_pricing_api_v1_domains_admin_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Update Admin Pricing","operationId":"update_admin_pricing_api_v1_domains_admin_pricing_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/admin/pricing/override":{"post":{"summary":"Set Tld Override","description":"Body: {tld: 'com', member_price_usd: 24}. Sets a fixed BLKCOIN\nprice for that TLD that ignores the multiplier formula.","operationId":"set_tld_override_api_v1_domains_admin_pricing_override_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/webhooks/registrar":{"post":{"summary":"Registrar Webhook","description":"Generic CORE-style webhook receiver. We never expose the\nregistrar name on this URL or anywhere member-facing. Payload\nshape (per CORE docs):\n  { eventType: str, domainName: str, status?: str, ...meta }\nRecognized eventTypes:\n  - domainRegistryRejection\n  - domainStatusChange\n  - transferStatusChange\n  - emailVerificationStatus","operationId":"registrar_webhook_api_v1_domains_webhooks_registrar_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/domains/admin/webhook-events":{"get":{"summary":"Admin Webhook Events","description":"Admin: recent webhook events for debugging mid-transfer state.","operationId":"admin_webhook_events_api_v1_domains_admin_webhook_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/saved-generations":{"get":{"summary":"List Saved","description":"List user's completed renders. Optionally also lists in-progress\nCinema jobs so the member can find work still rendering server-side.","operationId":"list_saved_api_v1_saved_generations_get","parameters":[{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"include_pending","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Pending"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/saved-generations/{job_id}":{"patch":{"summary":"Update Saved","operationId":"update_saved_api_v1_saved_generations__job_id__patch","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Saved","operationId":"delete_saved_api_v1_saved_generations__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications":{"get":{"summary":"List Notifications","operationId":"list_notifications_api_v1_notifications_get","parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/read":{"post":{"summary":"Mark Read","operationId":"mark_read_api_v1_notifications_read_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/env-locks":{"get":{"summary":"List Locks","operationId":"list_locks_api_admin_env_locks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/env-locks/{env_key}":{"put":{"summary":"Set Lock","description":"Set OR update the passcode for an environment. Always stored as a\nfresh bcrypt hash. Any legacy SHA-256 hash is removed on write.","operationId":"set_lock_api_admin_env_locks__env_key__put","parameters":[{"name":"env_key","in":"path","required":true,"schema":{"type":"string","title":"Env Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Remove Lock","operationId":"remove_lock_api_admin_env_locks__env_key__delete","parameters":[{"name":"env_key","in":"path","required":true,"schema":{"type":"string","title":"Env Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/env-locks/{env_key}/status":{"get":{"summary":"Lock Status","description":"Always returns 200 with {locked: bool, label: ...}. Members poll\nthis before rendering the environment shell so the password modal\nappears the moment a lock is set.","operationId":"lock_status_api_env_locks__env_key__status_get","parameters":[{"name":"env_key","in":"path","required":true,"schema":{"type":"string","title":"Env Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/env-locks/{env_key}/unlock":{"post":{"summary":"Unlock","description":"Member submits the passcode. Verified via bcrypt (with one-time\nauto-upgrade from any legacy SHA-256 row). On match we issue a\nper-user unlock token so the gate doesn't re-prompt until the\npasscode is rotated or removed.","operationId":"unlock_api_env_locks__env_key__unlock_post","parameters":[{"name":"env_key","in":"path","required":true,"schema":{"type":"string","title":"Env Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans":{"post":{"summary":"Start Scan","description":"Queue a whole-site scan. Returns immediately with a job to poll.","operationId":"start_scan_api_admin_a11y_scans_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Scans","description":"A page of scans plus the TRUE total (Standing Rule C).\n\n`q` searches by site name or address, so specific scans can be found and\npicked rather than only \"the most recent N\".","operationId":"list_scans_api_admin_a11y_scans_get","parameters":[{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/jobs/{job_id}/cancel":{"post":{"summary":"Cancel Job","description":"Stop a scan. Says exactly what was stopped and what it cost.\n\nDeliberately explicit about the three cases rather than always answering\n\"ok\": an operator who is told a finished scan was \"cancelled\" would go\nlooking for a report that exists, and one told a running crawl \"stopped\"\nwhen nothing was reachable would assume the billing stopped too.","operationId":"cancel_job_api_admin_a11y_jobs__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/jobs":{"get":{"summary":"List Jobs","operationId":"list_jobs_api_admin_a11y_jobs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/sectors":{"get":{"summary":"List Sectors","description":"Every sector and subtype, for every selector on the platform.\n\nONE LIST, SERVED ONCE. The chat, the Search form and the manual-scan form\nall need the same options, and three hard-coded copies would drift the\nmoment a subtype is added -- which is exactly how a contractor ends up\npicking something in one place that the scanner does not recognise in\nanother.\n\nEach subtype carries its `contractor_hint`, because a selector that lists\n`private_religious_k12` next to `private_independent_k12` without saying\nwhat separates them is asking a non-lawyer to guess at a legal\ndistinction that changes which report a client receives.","operationId":"list_sectors_api_admin_a11y_sectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/report-plan":{"post":{"summary":"Preview Report Plan","description":"What a scan WOULD produce, before anybody pays for the crawl.\n\nThe scan form calls this as the operator changes the subtype, so the\ndocument set is on screen before they commit. It reads the same function\nthe generator reads, so the answer cannot drift from what arrives.","operationId":"preview_report_plan_api_admin_a11y_report_plan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/jobs/active":{"get":{"summary":"List Active Jobs","description":"EVERY scan currently queued or running, for whoever is looking.\n\nThe scan panel used to hold its job in component state and nowhere else.\nThat state does not survive a reload, a click onto another section, a new\ntab, or a deploy of the frontend -- so the crawl carried on server-side\nwhile the operator's screen showed an empty panel and no bar. Reported as\n\"the scan bar is literally gone\"; the scan was fine, the only copy of the\nfact that it existed had been thrown away by the browser.\n\nSo the server answers the question instead. Any tab, at any time, can ask\nwhat is running and show it -- including scans another tab started, and\nscans started by a server process that has since been replaced.\n\nStale jobs are reaped on the way out, so a row that is never coming back\nsays so rather than sitting here as a permanent ghost.","operationId":"list_active_jobs_api_admin_a11y_jobs_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/jobs/{job_id}":{"get":{"summary":"Get Job","operationId":"get_job_api_admin_a11y_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans.csv":{"get":{"summary":"Export Scans Csv","description":"CSV of the FULL matching set -- not the current page.\n\nAlso written to object storage, because Standing Rule D covers exports too.","operationId":"export_scans_csv_api_admin_a11y_scans_csv_get","parameters":[{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/reconcile-scans":{"post":{"summary":"Reconcile Scans To Prospects","description":"Link EXISTING scans to their prospects. Backfill, not a migration hack.\n\nScans only began attaching themselves to prospects when that linkage was\nfixed; every scan run before then is still unattached, which is why a\nprospect list can show \"never scanned\" against sites that were scanned\nweeks ago. Going forward is not enough -- the history has to be repaired.\n\nIdempotent and safe to re-run: each site is reconciled from its NEWEST scan,\nmatched on the same normalised URL everything else dedupes by, so a site\nscanned nine times is one prospect carrying its most recent evidence.\nNothing is deleted and no scan is modified.\n\nBody: {\"limit\": 2000, \"dry_run\": false}","operationId":"reconcile_scans_to_prospects_api_admin_a11y_prospects_reconcile_scans_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/scans/empty":{"get":{"summary":"List Empty Scans","description":"Scans that examined ZERO pages -- i.e. reports of nothing.\n\nThese exist because a scan result was once accepted and saved when the\nscanner had returned no report: for about ten minutes the scanner replied\n\"started, ask again\" while this backend was still an older build that\nexpected the report inline. It read no result, defaulted to an empty one,\nand stored it. On the dashboard those look like completed audits of sites\nwith no accessibility problems, which is the exact opposite of the truth\nand the most dangerous shape a bad record can take here.\n\nA guard in scan_runner now refuses to save such a result at all. This route\nfinds the ones already written, so they can be seen before anything is done\nabout them.","operationId":"list_empty_scans_api_admin_a11y_scans_empty_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/delete":{"post":{"summary":"Delete Scans","description":"Delete specific scans BY ID. Never a pattern, never automatic.\n\nBody: {\"scan_ids\": [\"scan_...\", ...], \"confirm\": true}\n\nEvidence is meant to be durable (Standing Rule D), so this exists only to\nremove records that were never evidence of anything -- and it requires the\nids to be named and the deletion to be confirmed, so a mistake cannot take\na real audit with it.","operationId":"delete_scans_api_admin_a11y_scans_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/scans/{scan_id}":{"get":{"summary":"Get Scan","operationId":"get_scan_api_admin_a11y_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/findings":{"get":{"summary":"Get Findings","description":"Everything needed to actually FIX each violation.\n\nThe stored scan record holds the small, queryable rule aggregate; the\nper-element evidence (broken HTML, CSS selector, per-element failure\nsummary) lives in the raw axe output in object storage, deliberately kept\nout of Mongo. This route joins the two, adds the remediation layer, and\nmerges in any workflow decisions already recorded.\n\nServes both views: `Violations` is this list as-is, `Remediation` is the\nsame list sorted by impact score. One source of truth, two shapes.","operationId":"get_findings_api_admin_a11y_scans__scan_id__findings_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/tasks/{rule_id}":{"post":{"summary":"Set Task","description":"Record a remediation decision for one finding.\n\nBody: { state, reason?, note?, assignee? } where state is one of\nopen | fixed | wont_fix | human_review | skipped.","operationId":"set_task_api_admin_a11y_scans__scan_id__tasks__rule_id__post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/tasks/{rule_id}/notes":{"post":{"summary":"Add Task Note","description":"Append a note to a finding. Body: { text, kind? } where kind is\n'note' or 'method'. Notes are a thread and are never overwritten.","operationId":"add_task_note_api_admin_a11y_scans__scan_id__tasks__rule_id__notes_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/manual":{"get":{"summary":"Get Manual Review","description":"The guided checklist plus whatever has already been answered.\n\nReturns the checks with their step-by-step guidance, which automated check\nalready covers each one, the tools needed, and current progress -- so the\nadmin UI can walk an operator through it without them knowing anything about\naccessibility beforehand.","operationId":"get_manual_review_api_admin_a11y_scans__scan_id__manual_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/manual/{check_id}":{"post":{"summary":"Set Manual Review","description":"Record one guided check. Body: { result, note?, screen_id? }.","operationId":"set_manual_review_api_admin_a11y_scans__scan_id__manual__check_id__post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"check_id","in":"path","required":true,"schema":{"type":"string","title":"Check Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/reviews/recover-notes":{"post":{"summary":"Recover Review Notes","description":"Put back manual-review notes that a verdict click erased.\n\nBody: { scan_id?: str, dry_run?: bool }. Without a scan_id it sweeps every\nreview on the platform, which is what is wanted: the bug was in the shared\nwrite path, so every audit anybody has recorded a verdict on is affected.\n\nMASTER ONLY, and not because it is dangerous -- it only ever fills a blank\nand can be run twice safely -- but because it writes across every account's\nrecords at once, and that is not a contractor's call to make.","operationId":"recover_review_notes_api_admin_a11y_reviews_recover_notes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/scans/{scan_id}/manual-inject/targets":{"get":{"summary":"Manual Inject Targets","description":"Where this scan's completed review may be injected.\n\nOnly other versions of the SAME url, only ones this account can read, and\neach one says what it already has so nobody overwrites live work by\naccident.","operationId":"manual_inject_targets_api_admin_a11y_scans__scan_id__manual_inject_targets_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/manual-inject":{"post":{"summary":"Manual Inject","description":"Copy this scan's completed review onto another version of the same url.\n\nBody: {target_scan_id, overwrite?}\n\nWHAT IS AND IS NOT TOUCHED. By default the target's OWN answers win: an\ninjected answer fills a check nobody has looked at there. `overwrite`\nreplaces them, and is a deliberate choice the popup makes the auditor\ntake -- somebody else's observation is not something to discard silently.\n\nEvery injected answer is marked `carried_from_scan_id` with the date it\nwas really made, the same fields the carry-forward already uses, so a\nreport says when it was observed rather than implying it was checked\ntoday.","operationId":"manual_inject_api_admin_a11y_scans__scan_id__manual_inject_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/manual-scope":{"post":{"summary":"Set Manual Scope","description":"Separate one scan from its client's shared manual review, or merge it back.\n\nBody: { separate: bool, reason?: str }\n\nTwo buttons, one endpoint, because they are one decision with two\ndirections and splitting them would let the two drift.\n\nREVERSIBLE AND LOSSLESS, both ways -- which is the whole reason it is safe\nto press when you are not certain. Separating stops this scan INHERITING\nthe client's answers; it deletes neither. Merging back restores the\ninheritance and keeps anything recorded while it was separate, and this\nscan's own answers still win over inherited ones.","operationId":"set_manual_scope_api_admin_a11y_scans__scan_id__manual_scope_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/profile":{"post":{"summary":"Scan Profile","description":"The client profile for this scan, CREATING it if the scan has none.\n\n    \"there is a variance in me searching charlesdrew.com vs a prospect for\n     charlesdrew.com the former does not create a profile and clearly\n     needs to be made to access the same profile as the latter\"\n\nA scan is supposed to attach itself to a client when it finishes, and\nusually does. But that runs inside the completion handler's `try`, which\nlogs and moves on -- rightly, because a bookkeeping failure must not fail\na scan that has already produced a report. The consequence is that a scan\ncan exist with no client record, and the scan list only LOOKS one up: it\nnever makes one. So the row had no profile to open and the auditor had no\nway to get one except by typing the site in again as a prospect, which is\nthe \"variance\" being reported.\n\nThis closes it from the other end. Asking for the profile is a deliberate\nact by a person, so it may write; and because the lookup goes through\n`find_by_any_url`, which now matches by ORGANISATION, the answer for a\nscan of charlesdrew.com is the very same record a prospect for\ncharlesdrew.com created -- and a scan of a subdomain lands on the parent\nrather than making a second client.","operationId":"scan_profile_api_admin_a11y_scans__scan_id__profile_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/sector":{"post":{"summary":"Set Scan Sector","description":"File an ALREADY-SCANNED site under its sector, without re-crawling it.\n\nEvery scan taken before the sector was stored carries only a track, so it\nresolves to what that track owes -- which for a university is the single\nTitle II report. Re-running a 500-page crawl to correct a filing decision\nis real money for a change that touches no evidence, so the filing can be\ncorrected directly.\n\nTHE EVIDENCE IS NOT TOUCHED. The pages, the violations and the stored raw\nJSON are exactly as crawled; this changes which legal deliverables the\nscan owes, which is a question about the ORGANISATION, not about what the\ncrawler found. The change is recorded on the record with who made it, so a\nreport that changed is explicable later.","operationId":"set_scan_sector_api_admin_a11y_scans__scan_id__sector_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/report":{"get":{"summary":"Report Info","description":"Which deliverables apply to this scan, and what is already stored.","operationId":"report_info_api_admin_a11y_scans__scan_id__report_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Generate Report","description":"Render the deliverables and persist them to object storage.\n\nBody: { report_type?: str }. Healthcare scans yield two reports; government\nyields one. Downloads work without calling this first -- it exists to write\nthe delivered copies durably (Standing Rule D).","operationId":"generate_report_api_admin_a11y_scans__scan_id__report_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/versions":{"get":{"summary":"List Report Versions","description":"Every report ever produced for this scan, newest first.","operationId":"list_report_versions_api_admin_a11y_scans__scan_id__versions_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/doc-links":{"post":{"summary":"Create Doc Link","description":"Mint a short-lived link for ONE document path.\n\nThe screen calls this the moment a button is pressed and then points the\nbrowser at the URL, so opening and downloading behave like any ordinary\nlink -- on a laptop, an iPad, and an installed PWA alike.","operationId":"create_doc_link_api_admin_a11y_doc_links_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/scans/{scan_id}/document-versions":{"get":{"summary":"Scan Document Versions","description":"EVERY version of EVERY document this scan produced, in one answer.\n\n    \"you need to ensure ALL versions are CLEARLY accisble for all parties\n     with ALL versions and a CLEAR version history as seen in scans.\n     meaning clients within their dashboard. auditor and officer within\n     scans and marketing tabs\"\n\nEach chain already existed and each was reachable from a different place\n-- reports from the scan page, a proposal's chain from a toggle inside a\npopup, a quick report's from a route with no screen at all. So \"what have\nwe sent this client, and which version did they get\" had no single answer\nanywhere. This is that answer, and the Marketing row and the scan page\nboth open it.","operationId":"scan_document_versions_api_admin_a11y_scans__scan_id__document_versions_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/versions/{version_id}/download":{"get":{"summary":"Download Version","description":"Re-download an EXACT archived version, byte for byte.\n\nNot a re-render: the stored file is returned, so an old version keeps\nshowing the remediation state it was produced at.","operationId":"download_version_api_admin_a11y_versions__version_id__download_get","parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/report.{fmt}":{"get":{"summary":"Download Report","description":"One click, six formats, all rendered from the same canonical model.\n\nEVERY download is also archived as a numbered, immutable version and filed\nin the member's Saved Generations drawer, so the initial report, each\npartially-remediated one and the final one all remain retrievable. Pass\n`archive=false` for a throwaway preview that does not create a version.","operationId":"download_report_api_admin_a11y_scans__scan_id__report__fmt__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}},{"name":"report_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"}},{"name":"archive","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Archive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/raw":{"get":{"summary":"Get Scan Raw","description":"Presigned URL to the raw axe-core evidence held in object storage.","operationId":"get_scan_raw_api_admin_a11y_scans__scan_id__raw_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/sites":{"get":{"summary":"List Sites","description":"Dashboard sites.\n\n`origin` filters manual vs discovery (Phase 7.5) -- discovered sites are\nfilterable but otherwise behave identically. `include_unpromoted` surfaces\nrows created as a side effect of a discovery scan that have not been\npromoted; the default view excludes them, which is what keeps \"Add to\nDashboard\" meaningful.","operationId":"list_sites_api_admin_a11y_sites_get","parameters":[{"name":"monitored","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Monitored"}},{"name":"origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin"}},{"name":"include_unpromoted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Unpromoted"}},{"name":"include_merged","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Merged"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/sites/{site_id}/monitored":{"put":{"summary":"Set Monitored","description":"Flip the monitoring flag.\n\nNothing acts on this yet -- the recurring scheduler is deliberately not part\nof this build. The flag only records intent.","operationId":"set_monitored_api_admin_a11y_sites__site_id__monitored_put","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/admins":{"get":{"summary":"List A11Y Admins","description":"Admins whose accessibility workspace the MASTER may look into.\n\nPowers \"view as contractor\": pick a person, and every a11y list reloads\nwith `?as_admin=<user_id>`. Nothing is impersonated — the master's own\nsession is untouched, and each response says whose workspace it is.","operationId":"list_a11y_admins_api_admin_a11y_admins_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/health":{"get":{"summary":"Health","description":"Is the scanner actually runnable here? Checks the pieces that fail in deploy.\n\nCheap by default: it only asks whether the Chromium executable is on disk, so\nthe admin page loads instantly. Pass `?provision=true` to actually launch it\n(installing the binary first if the build command did not) -- that call can\ntake a couple of minutes on a fresh instance. A scan provisions itself\nanyway, since it runs as a background job.","operationId":"health_api_admin_a11y_health_get","parameters":[{"name":"provision","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Provision"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/monitor/cadences":{"get":{"summary":"Monitor Cadences","description":"The cadence presets and the validated custom range.","operationId":"monitor_cadences_api_admin_a11y_monitor_cadences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/monitor/schedules":{"get":{"summary":"List Monitor Schedules","operationId":"list_monitor_schedules_api_admin_a11y_monitor_schedules_get","parameters":[{"name":"enabled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/issuer":{"get":{"summary":"Get Report Issuer","description":"The letterhead printed on every report, and how many name changes remain.\n\nTwo lines: the platform domain, and \"<title> — <name>\" beneath it.","operationId":"get_report_issuer_api_admin_a11y_issuer_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Report Issuer","description":"Set the name the reports are issued under, and/or its title.\n\nBody: { legal_name?, officer_title? }\n\nThere is ONE name. It prints as \"<title> — <name>\" beneath the domain, and\nit may be changed at most three times, EVER — that ceiling is enforced here\nrather than by hiding a button, because a client could otherwise be holding\nreports issued under names we can no longer account for. The TITLE is not\ncapped: it describes the role, not the identity the report is issued under.","operationId":"put_report_issuer_api_admin_a11y_issuer_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/issuers":{"get":{"summary":"List Report Issuers","description":"Every Accessibility account and its BBAIS email. MASTER ONLY.\n\nThis is the screen the master assigns from: who is onboarded, who is\nstill waiting for an address, and what each one was assigned. Restricted\nto the master because assigning it is their decision alone.","operationId":"list_report_issuers_api_admin_a11y_issuers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/issuers/{user_id}/bbais-email":{"post":{"summary":"Assign Bbais Email","description":"Assign or change a contractor's BBAIS email. MASTER ONLY.\n\nBody: { email }\n\nThe contractor never sets this: it is the address a client replies to on\ntheir reports, so it is the firm's to issue. Enforced in\n`issuer.assign_bbais_email`, which refuses anyone but the master whatever\nthe screen shows, and logs every change.","operationId":"assign_bbais_email_api_admin_a11y_issuers__user_id__bbais_email_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/monitor/overview":{"get":{"summary":"Monitor Overview","description":"Everything monitored, and the proof it is actually running.\n\nTurning monitoring on used to produce no visible sign at all — the schedule\nwas written and the runs were recorded, and neither surfaced anywhere, so\nthe only way to know it worked was to read the database. This is the page\nbehind the Monitoring tab: cadence, next run, last run, and what happened,\nfailures included.","operationId":"monitor_overview_api_admin_a11y_monitor_overview_get","parameters":[{"name":"enabled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/monitor/schedules/{site_id}":{"get":{"summary":"Get Monitor Schedule","operationId":"get_monitor_schedule_api_admin_a11y_monitor_schedules__site_id__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"html","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Put Monitor Schedule","description":"Turn monitoring on/off and set the cadence.\n\nBody: { enabled, interval_seconds?, kind?, target?, track?, anchor_hour?, tz? }\nAn out-of-range cadence is REJECTED rather than clamped, so nobody ends up\non a schedule they did not choose.","operationId":"put_monitor_schedule_api_admin_a11y_monitor_schedules__site_id__put","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/monitor/schedules/{site_id}/run":{"post":{"summary":"Run Monitor Now","description":"Out-of-cycle run. Same pipeline as a scheduled one, labelled `manual`.\n\nTWO FAULTS LIVED HERE, and together they meant this button could only ever\nstart a full site crawl.\n\n`kind` was a QUERY parameter while the Monitoring page posts it in the JSON\nbody, so FastAPI never saw it and it always fell back to \"html\". Pressing\n\"Run now\" on a DOCUMENT row therefore silently launched a 125-page site\ncrawl instead of re-validating a handful of PDFs — the wrong action, and a\nreal compute bill for it.\n\nAnd even with the right kind, this called run_once() without a runner, so\nit built the HTML runner regardless. The scheduled ticker has always passed\n`runner=RUNNERS.get(kind)`; the manual path simply never did, so the two\nroutes to the same feature did different things.","operationId":"run_monitor_now_api_admin_a11y_monitor_schedules__site_id__run_post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/monitor/runs":{"get":{"summary":"List Monitor Runs","description":"Run history, paginated with a true total (Standing Rule C).","operationId":"list_monitor_runs_api_admin_a11y_monitor_runs_get","parameters":[{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/inventory/{site_id}":{"get":{"summary":"Pdf Inventory","description":"Which PDFs this site links to, per the latest scan.","operationId":"pdf_inventory_api_admin_a11y_pdf_inventory__site_id__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/runs/{site_id}":{"post":{"summary":"Start Pdf Run","description":"\"Audit PDFs now\" -- an out-of-cycle run, recorded as `manual`.\n\nRuns in the BACKGROUND like an HTML scan: a site with 100 documents takes\nminutes, far longer than an HTTP request should live.","operationId":"start_pdf_run_api_admin_a11y_pdf_runs__site_id__post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/runs":{"get":{"summary":"List Pdf Runs","description":"PDF run history, paginated with a true total (Standing Rule C).","operationId":"list_pdf_runs_api_admin_a11y_pdf_runs_get","parameters":[{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/runs/{run_id}":{"get":{"summary":"Get Pdf Run","description":"One run in full, including its per-document results.","operationId":"get_pdf_run_api_admin_a11y_pdf_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/report/{site_id}":{"get":{"summary":"Pdf Report Info","description":"Which document reports this site owes, and whether one can be produced.","operationId":"pdf_report_info_api_admin_a11y_pdf_report__site_id__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Generate Pdf Report","description":"Render the document report(s) and persist them (Standing Rule D).","operationId":"generate_pdf_report_api_admin_a11y_pdf_report__site_id__post","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/report/{site_id}/report.{fmt}":{"get":{"summary":"Download Pdf Report","description":"One click, six formats, all from the same canonical model.\n\nPositioned exactly like the site report: EVERY download is archived as a\nnumbered, immutable version and filed in the Saved Generations drawer, so\nthe first document report, each partially-remediated one and the final one\nall stay retrievable. `archive=false` gives a throwaway preview.","operationId":"download_pdf_report_api_admin_a11y_pdf_report__site_id__report__fmt__get","parameters":[{"name":"site_id","in":"path","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}},{"name":"report_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"}},{"name":"archive","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Archive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/review/{run_id}":{"get":{"summary":"Pdf Review Queue","description":"The human-judgment checks veraPDF cannot decide, per document.\n\nSourced from the Matterhorn Protocol 1.1: of its 136 failure conditions, 87\nare machine-checkable (veraPDF covers those) and 47 need a person. A document\nthat PASSED validation still needs these.","operationId":"pdf_review_queue_api_admin_a11y_pdf_review__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"pdf_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/review/{run_id}/verdict":{"post":{"summary":"Pdf Review Verdict","description":"Record a HUMAN verdict. Body: {pdf_url, check_id, result, note?,\naccepting_proposal?}. This is the only path that writes a result.","operationId":"pdf_review_verdict_api_admin_a11y_pdf_review__run_id__verdict_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/pdf/review/{run_id}/assist":{"post":{"summary":"Pdf Review Assist","description":"Ask BLK-AI for a vision FIRST PASS on one document.\n\nBody: {pdf_url, pages?}. Stores PROPOSALS only -- the model never records a\nverdict, and nothing it says can mark a document conformant. A person\naccepts or overrides each proposal.","operationId":"pdf_review_assist_api_admin_a11y_pdf_review__run_id__assist_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/edits/fields":{"get":{"summary":"Editable Fields","description":"Which parts of a report BLK-AI may edit, and which it may never touch.","operationId":"editable_fields_api_admin_a11y_edits_fields_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/edits/propose":{"post":{"summary":"Propose Report Edit","description":"Propose a narrative edit. Body: {scope, scope_id, field, instruction,\ncurrent_text, proposed_text}. Nothing is applied here.","operationId":"propose_report_edit_api_admin_a11y_edits_propose_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/edits/{edit_id}/accept":{"post":{"summary":"Accept Report Edit","description":"Apply a proposed edit. Separate, audited, human action.\n\nOn a PROPOSAL the accepted text is written into the document through the\nsame pipeline the customization popup uses -- so it passes the same locks\nand the same accessibility gate, and lands as a new version.","operationId":"accept_report_edit_api_admin_a11y_edits__edit_id__accept_post","parameters":[{"name":"edit_id","in":"path","required":true,"schema":{"type":"string","title":"Edit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/edits/{edit_id}/reject":{"post":{"summary":"Reject Report Edit","operationId":"reject_report_edit_api_admin_a11y_edits__edit_id__reject_post","parameters":[{"name":"edit_id","in":"path","required":true,"schema":{"type":"string","title":"Edit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/edits/{scope}/{scope_id}":{"get":{"summary":"Report Edit Log","description":"Every proposal and decision on this document, for its audit footer.","operationId":"report_edit_log_api_admin_a11y_edits__scope___scope_id__get","parameters":[{"name":"scope","in":"path","required":true,"schema":{"type":"string","title":"Scope"}},{"name":"scope_id","in":"path","required":true,"schema":{"type":"string","title":"Scope Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/sites/status":{"get":{"summary":"Sites Status","description":"Site list with the latest state of BOTH kinds of monitoring.\n\nRegression badges are distinguished by kind: an operator needs to know\nwhether the pages broke or the documents did, because they are different\nteams and different fixes.","operationId":"sites_status_api_admin_a11y_sites_status_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/approvals":{"post":{"summary":"Request Page Approval","description":"Ask the owner to allow one site past the contractor page limit.","operationId":"request_page_approval_api_admin_a11y_approvals_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Page Approvals","description":"Open requests. The master sees everyone's; an auditor sees their own.\n\nScoped in the SERVER, not by hiding a tab: an auditor reading another\nauditor's requests would be reading their pipeline.","operationId":"list_page_approvals_api_admin_a11y_approvals_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/approvals/{approval_id}/decide":{"post":{"summary":"Decide Page Approval","description":"Approve or decline. MASTER ONLY -- this is the owner's decision.\n\nBody: { approve: bool, approved_pages?: int, note?: str }. The owner may\napprove FEWER pages than were asked for; defaulting silently to the\nrequest would make the number meaningless.","operationId":"decide_page_approval_api_admin_a11y_approvals__approval_id__decide_post","parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/approvals/grant":{"post":{"summary":"Grant Page Allowance","description":"Hand an auditor a big site WITHOUT waiting to be asked. MASTER ONLY.\n\n    \"regardless if they click the button i still need the controls\n     within master\"\n\nA control that only appears once a contractor has clicked something is not\nthe owner's control. This is the owner's: pick an auditor, pick a page\ncount, and that site is theirs to run at that size -- once.\n\nIt answers any open request from that auditor for the same site rather\nthan leaving it sitting on the list, because granting the pages IS the\nanswer to it.","operationId":"grant_page_allowance_api_admin_a11y_approvals_grant_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/approvals/{approval_id}/revoke":{"post":{"summary":"Revoke Page Allowance","description":"Take back an allowance that has not been spent yet. MASTER ONLY.\n\nA permission that cannot be withdrawn is not a permission, it is a\nrelease. An allowance the auditor has already SPENT cannot be revoked --\nthat crawl has run and the money is gone, and pretending otherwise would\nput a false state in the record.","operationId":"revoke_page_allowance_api_admin_a11y_approvals__approval_id__revoke_post","parameters":[{"name":"approval_id","in":"path","required":true,"schema":{"type":"string","title":"Approval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/auditors":{"get":{"summary":"List Auditors","description":"Who the owner can hand a site to. MASTER ONLY.\n\nEvery admin account, because a section grant can be given at any time and\na list that guessed at who \"really\" audits would go stale the first time\nthe owner granted one. The master is included -- handing a site to\nyourself is a legitimate way to park it.","operationId":"list_auditors_api_admin_a11y_auditors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/portfolio/export":{"get":{"summary":"Portfolio Export","description":"A whole book of business as one JSON bundle, profiles included.\n\n    \"for every other type of scan we need to be able to push scans,\n     prospects and clients and their profiles along with the above ground\n     import and export and push to contractors actions.\"\n\nThe prospect CSV already exists and stays: it is one row per client and is\nthe right shape for a spreadsheet. It is the wrong shape for a hand-over,\nbecause a client is not a row -- it has a profile, a contact log with\nauthors and dates, links, addresses and a scan history, and flattening\nthat drops the half that took months to build.\n\n`ids` selects specific records (comma separated); `only_clients` limits it\nto the ones on the account's client list rather than the whole pipeline;\n`manual_complete`, `groundit` and `monitored` each limit it to one TAB's\nset, so the Export inside a tab hands over exactly what is on the screen.\nEvery one of them resolves through the same rule that tab's chart uses, so\nthe button and the list can never disagree about what they contain.\nScoped to the caller's account like every other list, because an export is\nthe single request most capable of handing over somebody else's entire\npipeline in one file.","operationId":"portfolio_export_api_admin_a11y_portfolio_export_get","parameters":[{"name":"only_clients","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Clients"}},{"name":"manual_complete","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Manual Complete"}},{"name":"groundit","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Groundit"}},{"name":"monitored","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Monitored"}},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portfolio/import":{"post":{"summary":"Portfolio Import","description":"Add a bundle's clients to this account. Union, never overwrite.\n\nBody: the bundle itself, or { bundle, dry_run? }.\n\n`dry_run` reports what WOULD happen and writes nothing, because the honest\nanswer to \"what will this file do to my pipeline\" is a list, not a\nreassurance.","operationId":"portfolio_import_api_admin_a11y_portfolio_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/share/bulk":{"post":{"summary":"Share Many","description":"Push several records to one contractor, with one reason.\n\nBody: { items: [{kind, id}, ...], to_user_id, note? }\n\nHanding somebody twelve sites one click at a time is twelve chances to\nstop halfway, and twelve transfer notes that each say a little less than\nthe last. One act, one reason, recorded on every record it touched.\n\nPARTIAL SUCCESS IS REPORTED, NOT HIDDEN. Anything refused is named with\nwhy, because a bulk push that says \"done\" while silently dropping four\nrows is worse than one that fails outright.","operationId":"share_many_api_admin_a11y_share_bulk_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/share":{"post":{"summary":"Share Record","description":"Share a scan, prospect, client or GroundIT site with another admin.\n\nBody: { kind, id, to_user_id, note? }\n\nThe note is not decoration. A site arriving in an auditor's list with no\nexplanation is a puzzle -- scan it? quote it? call them? -- so the reason\ntravels with it and is recorded as a transfer note on that client's\nprofile, where every other note about them already lives.","operationId":"share_record_api_admin_a11y_share_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/unshare":{"post":{"summary":"Unshare Record","description":"Withdraw access. The transfer note stays -- the share really happened.","operationId":"unshare_record_api_admin_a11y_unshare_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/groundit/{prospect_id}/scan-full":{"post":{"summary":"Scan Groundit Full","description":"Run a GroundIT site at the master ceiling, in one click. MASTER ONLY.\n\n    \"the entire point is so that i can one click run a 10,000 page scan\"\n\nIt runs on the OWNER's account at the master ceiling, so it is not\nconstrained by any contractor limit and spends nothing of anybody's\nallowance. The page count can be overridden downward -- a 10,000-page\ncrawl is a real bill and sometimes 2,000 is the right answer.","operationId":"scan_groundit_full_api_admin_a11y_groundit__prospect_id__scan_full_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/share-targets":{"get":{"summary":"List Share Targets","description":"Who this admin can hand work to.\n\nAvailable to EVERY admin, not just the master, because the traffic goes\nboth ways: a contractor who turns up a hospital network needs to send it\nto the owner at least as often as the owner needs to send work down.\n\nReturns other admins only -- sharing with yourself is a no-op -- and says\nwhich one is the owner, so a contractor can find them without knowing an\nemail address by heart.","operationId":"list_share_targets_api_admin_a11y_share_targets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/connect/messages":{"get":{"summary":"Connect History","description":"Read a room. With `after`, only what is new -- this is the live poll.","operationId":"connect_history_api_admin_a11y_connect_messages_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"record_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Record Id"}},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"After"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Connect Post","description":"Say something in a room. Body: { text, kind?, record_id? }","operationId":"connect_post_api_admin_a11y_connect_messages_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/connect/read":{"post":{"summary":"Connect Mark Read","description":"Remember how far this admin has read, so unread badges mean something.","operationId":"connect_mark_read_api_admin_a11y_connect_read_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/connect/messages/{message_id}":{"delete":{"summary":"Connect Delete","description":"Withdraw a message. Your own, unless you are the master.","operationId":"connect_delete_api_admin_a11y_connect_messages__message_id__delete","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/connect/rooms":{"get":{"summary":"Connect Rooms","description":"The general room plus every record room this admin can take part in.\n\nBuilt from what they can actually reach -- their own work and anything\nshared with them -- so a room list is never a hint that a client exists.","operationId":"connect_rooms_api_admin_a11y_connect_rooms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/collab/{prospect_id}":{"get":{"summary":"Collab State","description":"Who else holds this business, and whether it is already collaborative.\n\nThis is what makes it one click: the operator does not have to know a\ncolleague has the same client, or go and find their record.","operationId":"collab_state_api_admin_a11y_collab__prospect_id__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/collab/{prospect_id}/start":{"post":{"summary":"Collab Start","description":"Merge the chosen records into this one and share it with their owners.\n\nBody: { partner_prospect_ids: [...] }\n\nNothing is deleted -- `prospects.merge_prospects` keeps every absorbed row\nmarked rather than removing it -- and every contributing account is added\nto the merged record, because merging without that would be taking\nsomebody's client rather than working it with them.","operationId":"collab_start_api_admin_a11y_collab__prospect_id__start_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/collab/{prospect_id}/profile":{"get":{"summary":"Collab Profile","description":"Everyone's data on this client, kept apart rather than pooled.\n\n    \"the collab profile is the exact same except it lists eveyrones data\n     on the prospect and or client cleanly and clearly for them all to\n     review\"\n\nThe ordinary profile answers \"what do we know about this client\". This\nanswers \"what did each of us find\" -- a different question, and the first\none a colleague needs answered before they duplicate somebody's work.","operationId":"collab_profile_api_admin_a11y_collab__prospect_id__profile_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/proposal":{"post":{"summary":"Generate Proposal","description":"Generate the client-facing proposal for a scan that already ran.\n\nPRICING IS NOT INVENTED HERE. `proposal.build_proposal(pricing=None)` is\nan explicit \"not priced yet\" state: the document generates instantly and\nsays on its face that pricing is still to be set, and the QA gate refuses\nto mark it ready to send until it is. Phase 5's customization popup is\nwhat supplies the real numbers. Passing a `pricing` body with no real\nline item is still an error rather than a silent blank.","operationId":"generate_proposal_api_admin_a11y_scans__scan_id__proposal_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Latest Proposal","description":"The most recent proposal for this scan, if one has been generated.","operationId":"latest_proposal_api_admin_a11y_scans__scan_id__proposal_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposals/{proposal_id}/signature-request":{"post":{"summary":"Request Proposal Signatures","description":"Send a proposal for signature. Returns one single-use link per signer.\n\nThe links are returned to the contractor to pass on; nothing is emailed\nfrom here, the same way the outreach engine produces drafts rather than\nsending them.","operationId":"request_proposal_signatures_api_admin_a11y_proposals__proposal_id__signature_request_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/signature-requests/{request_id}":{"get":{"summary":"Signature Request Status","description":"Who has signed, and where the signed copy is.","operationId":"signature_request_status_api_admin_a11y_signature_requests__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/sign/{token}":{"get":{"summary":"Signing Page Data","description":"What the signing page shows. Never another signer's token.","operationId":"signing_page_data_api_a11y_sign__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Submit Signature","description":"Record a signature. Body: { typed_name, mark, consent: true }.\n\nWhen the last signer signs, the signed copy is built and stored as its own\nartefact -- the unsigned original is never replaced.","operationId":"submit_signature_api_a11y_sign__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/sign/{token}/document.pdf":{"get":{"summary":"Signing Document","description":"The exact document being signed, for the signer to read first.","operationId":"signing_document_api_a11y_sign__token__document_pdf_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposals/{proposal_id}/customize":{"get":{"summary":"Proposal Customization Fields","description":"What the customization popup shows: every editable field with its\ncurrent value, the pricing lines, and the locked list named plainly.","operationId":"proposal_customization_fields_api_admin_a11y_proposals__proposal_id__customize_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Customize Proposal","description":"Apply a contractor's edits. Body: { edits: {path: text}, pricing: {...} }\n\nEVERY APPLIED CHANGE IS A NEW VERSION. The proposal row keeps pointing at\nthe newest artefacts, and `store.record_version(kind=\"proposal\")` keeps\nevery earlier one -- the original as generated is never overwritten.\n\nThe locks are enforced in `proposal.apply_customization`, server-side: a\nrequest naming a locked field is refused by name, whatever the UI showed.","operationId":"customize_proposal_api_admin_a11y_proposals__proposal_id__customize_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/quick-report":{"post":{"summary":"Generate Quick Report","description":"Generate the deliberately-limited proof-of-scan report for this scan.\n\nNo re-scan: two real violations and four completed manual checks come\nstraight from the stored record. The withholding is enforced in\n`quick_report.build_quick_report`, and `leaked_fields()` is checked here\nas well -- what this document promises a prospect is a promise, so it is\nverified rather than trusted.","operationId":"generate_quick_report_api_admin_a11y_scans__scan_id__quick_report_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Latest Quick Report","description":"The most recent Quick Report for this scan, if one exists.","operationId":"latest_quick_report_api_admin_a11y_scans__scan_id__quick_report_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-reports/versions":{"get":{"summary":"Quick Report Versions","description":"A prospect's Quick Report chain, newest first, with the TRUE total.","operationId":"quick_report_versions_api_admin_a11y_quick_reports_versions_get","parameters":[{"name":"site_id","in":"query","required":true,"schema":{"type":"string","title":"Site Id"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-report-versions/{version_id}.html":{"get":{"summary":"View Quick Report Version","description":"ONE earlier Quick Report, rendered from the model captured at the time.","operationId":"view_quick_report_version_api_admin_a11y_quick_report_versions__version_id__html_get","parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-reports/{quick_report_id}.html":{"get":{"summary":"View Quick Report","description":"The Quick Report itself, rendered from its stored model.","operationId":"view_quick_report_api_admin_a11y_quick_reports__quick_report_id__html_get","parameters":[{"name":"quick_report_id","in":"path","required":true,"schema":{"type":"string","title":"Quick Report Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/marketing":{"get":{"summary":"Marketing Overview","description":"Every scan this contractor can see, with what has been generated for it.\n\nAnswers the SAME contract as every other list in this environment\n(`A11yDataTable`): `skip`/`limit`/`sort`/`direction` in, rows plus the\ndatabase's TRUE total out. `offset` is accepted as an alias so an older\nclient keeps working.","operationId":"marketing_overview_api_admin_a11y_marketing_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Direction"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposals/{proposal_id}/versions":{"get":{"summary":"Proposal Versions","description":"This proposal's whole chain, newest first, with the TRUE total.\n\nv1 is the proposal as generated; every applied customization adds one.\nNothing is ever overwritten, so the chain is the record of what was sent\nwhen.","operationId":"proposal_versions_api_admin_a11y_proposals__proposal_id__versions_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposal-versions/{version_id}.html":{"get":{"summary":"View Proposal Version","description":"ONE earlier version, rendered from the model captured at the time.\n\nRendered from its own snapshot rather than today's model, which is the\npoint of a version: what the client was handed, not what it would look\nlike now.","operationId":"view_proposal_version_api_admin_a11y_proposal_versions__version_id__html_get","parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposals":{"get":{"summary":"List Proposals","description":"The proposals a contractor can see, filtered for each access point.\n\n`mine=true` is the auditor's own list (their profile). `prospect_id` /\n`site_id` is the client page. No filter is everything readable. Paginated\nwith a true count either way (Standing Rule C).","operationId":"list_proposals_api_admin_a11y_proposals_get","parameters":[{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Mine"}},{"name":"prospect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prospect Id"}},{"name":"site_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"}},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposals/{proposal_id}.{fmt}":{"get":{"summary":"Download Proposal","description":"The current proposal, in any offered format.","operationId":"download_proposal_api_admin_a11y_proposals__proposal_id___fmt__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/proposal-versions/{version_id}.{fmt}":{"get":{"summary":"Download Proposal Version","description":"ONE earlier version, in any offered format.\n\nRendered from that version's own model snapshot, so a v1 PDF downloaded\ntoday is the v1 document -- the point of keeping versions at all.","operationId":"download_proposal_version_api_admin_a11y_proposal_versions__version_id___fmt__get","parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-reports/{quick_report_id}.{fmt}":{"get":{"summary":"Download Quick Report","description":"The Quick Report in any offered format. Same limits in every one.","operationId":"download_quick_report_api_admin_a11y_quick_reports__quick_report_id___fmt__get","parameters":[{"name":"quick_report_id","in":"path","required":true,"schema":{"type":"string","title":"Quick Report Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-report-versions/{version_id}.{fmt}":{"get":{"summary":"Download Quick Report Version","description":"ONE earlier Quick Report, in any offered format.\n\n    owner: \"there were NO downloas buttons in versions for marketing.\n     none. the initial proposal entailed this VERY clearly as a mandatory.\n     how are auditors supposed to deliver anything from outreach if there\n     are only view buttons and no download!\"\n\nA proposal version already downloaded in all five formats; a quick report\nversion could only be VIEWED as HTML. So the one document that earns the\nreply -- the two automated checks and four manual ones -- could not be\nattached to the outreach it exists for. Rendered from that version's own\nmodel snapshot, so a v1 PDF is the v1 document.","operationId":"download_quick_report_version_api_admin_a11y_quick_report_versions__version_id___fmt__get","parameters":[{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/outreach":{"post":{"summary":"Generate Outreach","description":"Six ready-to-copy drafts: three angles, thorough and short.\n\nBuilt from the stored scan — no re-crawl — and from the same legal\nresolution the report and the proposal use, so an email cannot cite a\ndifferent law from the audit it is about.","operationId":"generate_outreach_api_admin_a11y_scans__scan_id__outreach_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Latest Outreach","description":"The most recent set of drafts for this scan.","operationId":"latest_outreach_api_admin_a11y_scans__scan_id__outreach_get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/outreach/{outreach_id}.txt":{"get":{"summary":"Download Outreach","description":"All six drafts as plain text, for copying out in one go.","operationId":"download_outreach_api_admin_a11y_outreach__outreach_id__txt_get","parameters":[{"name":"outreach_id","in":"path","required":true,"schema":{"type":"string","title":"Outreach Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/signature-request":{"post":{"summary":"Request Report Signatures","description":"Send a REPORT for signature: Auditor, Officer and Client.\n\nBody: { report_type?, signers?: [{key, name, email}] }\n\nThe report is printed and stored HERE, and the signature is bound to that\nexact file by checksum -- a report that is regenerated later is a\ndifferent document and needs its own request.\n\nALL THREE SIGN, not only the client: the Auditor and the Officer attest\nthe audit is complete, which is the whole point of a sign-off block on a\ncompliance report. Each gets their own single-use link.","operationId":"request_report_signatures_api_admin_a11y_scans__scan_id__signature_request_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/quick-reports/{quick_report_id}/signature-request":{"post":{"summary":"Request Quick Report Signatures","description":"Send a QUICK REPORT for signature: the reviewers of record.\n\n    owner: \"there is no clear way to sign anythign other than proposals.\n     sign needs to include signitures for ALL documuments that require\n     tem. quick reports, reports, prospoals etc\"\n\nThe proposal had a route, the report had a route, and the quick report --\nwhich already carries signature lines for the people who reviewed it --\nhad none at all. Nothing could put it out for signature, so the SIGN\nbutton had nothing to offer for it.\n\nAUDITOR AND OFFICER ONLY. The document itself decides that, not this\nroute: `build_quick_report` sets its signers to the reviewers and says\nwhy -- \"the client does NOT sign a Quick Report, there is nothing here for\nthem to attest to\". It is proof the scan ran, not an agreement.\n\nThe signature binds to THIS printed file by checksum, exactly as the\nreport's does, so regenerating produces a different document that needs\nits own request.","operationId":"request_quick_report_signatures_api_admin_a11y_quick_reports__quick_report_id__signature_request_post","parameters":[{"name":"quick_report_id","in":"path","required":true,"schema":{"type":"string","title":"Quick Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/signature-requests":{"get":{"summary":"List Signature Requests","description":"Everything this admin has sent for signature, and where each one is up to.\n\nWithout this the links vanish the moment the modal closes: a contractor\nwho sent a report on Monday had no way to see whether anyone signed it,\nor to get the link again.","operationId":"list_signature_requests_api_admin_a11y_signature_requests_get","parameters":[{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}},{"name":"proposal_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposal Id"}},{"name":"quick_report_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quick Report Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/signature-requests/{request_id}/send":{"post":{"summary":"Send For Signature","description":"DELIVER a signer's link to the person who has to sign it.\n\nBody: { key: \"officer\" | \"client\" | \"auditor\", user_id?, note? }\n\n    \"theres still no audtor signiture, no way for them to send it to me\n     for signiture and i dont see anywhere fo rhte client either\"\n\nThe signing flow was complete and DELIVERED NOTHING: it minted a link and\nhanded it back to the auditor, who then had no way to get it to the\nofficer except out of band. So an auditor finished a document and it\nstopped there.\n\nThe officer is the account the letterhead already names -- resolved from\nthe master identity, never typed here. The client is whichever member the\nauditor picked. Delivery is this platform's own notification feed, which\nis where every other \"something needs you\" already lands; nothing is\nemailed, the same as the outreach engine.","operationId":"send_for_signature_api_admin_a11y_signature_requests__request_id__send_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/signature-requests/{request_id}/push-to-client":{"post":{"summary":"Push Signature To Client","description":"Put the document ON THE CLIENT'S PROFILE, and send them their link.\n\nBody: { user_id, prospect_id?, note? }\n\n    \"i dont see anywhere fo rhte client either which shiuld have a button\n     ot ush to profile the same way picker style as the one just\n     completed\"\n\nOne press does what an auditor actually means by \"send it to the client\":\nthe member is selected from the same picker the client adder uses, their\nportal file is created if they do not have one, the platform this document\nbelongs to is attached to it so the document is THERE when they sign in,\nand their signing link is delivered to them.","operationId":"push_signature_to_client_api_admin_a11y_signature_requests__request_id__push_to_client_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/signature-requests/rebuild-signed":{"post":{"summary":"Rebuild Signed Copies","description":"Redraw the signed copies of documents ALREADY signed.\n\nBody: { request_id? }  — one request, or every finished one you own.\n\n    \"and this needs to apply to those generated already AND new\n     proposals\"\n\nThe marks now go on the signature lines themselves. A document signed\nbefore that change has its marks only on the certificate at the back, and\nthose signatures are not going to be collected again -- so the copy is\nrebuilt from the SAME source PDF and the SAME recorded marks.\n\nNOTHING IS RE-SIGNED AND NOTHING IS INVENTED. The rebuild refuses unless\nthe original document still hashes to what was signed, so a copy can only\nbe redrawn for the exact bytes those people put their names to. The\nprevious copy's key is kept on the row rather than dropped, because a\nsigned artefact that somebody may already hold should stay resolvable.","operationId":"rebuild_signed_copies_api_admin_a11y_signature_requests_rebuild_signed_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/signature-requests/{request_id}/signed.pdf":{"get":{"summary":"Download Signed Copy","description":"The signed copy, once everyone has signed.","operationId":"download_signed_copy_api_admin_a11y_signature_requests__request_id__signed_pdf_get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations":{"post":{"summary":"Create Conversation","operationId":"create_conversation_api_admin_a11y_chat_conversations_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Conversations","description":"Sidebar list. Paginated over the FULL set with a true DB total (Rule C).","operationId":"list_conversations_api_admin_a11y_chat_conversations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}":{"get":{"summary":"Get Conversation","description":"Full transcript by default -- storage is never trimmed.\n\n`limit`/`skip` exist so the UI can window a very long transcript, but the\ndefault returns everything, and the response always carries the true total\nso the client can never quietly show a subset as if it were the whole thing.","operationId":"get_conversation_api_admin_a11y_chat_conversations__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Superseded"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Conversation","description":"Rename / archive. Archive is a state change -- never a deletion.","operationId":"update_conversation_api_admin_a11y_chat_conversations__conversation_id__patch","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/tools":{"get":{"summary":"List Tools","description":"What BLK-AI can actually do in this environment.\n\nBacks the UI's tool cards and makes the unified registry inspectable: if an\naction is not in here, the chat cannot take it.","operationId":"list_tools_api_admin_a11y_chat_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/state":{"get":{"summary":"Conversation State","description":"Is a reply in flight, and is the engine waking?\n\nThis is the endpoint that makes a mid-reply reload behave: the answer comes\nfrom the stored message row, so a fresh tab shows the same waking/streaming\nstate as the tab that started the turn.","operationId":"conversation_state_api_admin_a11y_chat_conversations__conversation_id__state_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/stop":{"post":{"summary":"Stop Reply","description":"Ask the in-flight reply to stop; the partial text is kept, not discarded.","operationId":"stop_reply_api_admin_a11y_chat_conversations__conversation_id__stop_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/snapshot":{"post":{"summary":"Snapshot","description":"Force a transcript snapshot to R2 (also runs automatically).","operationId":"snapshot_api_admin_a11y_chat_conversations__conversation_id__snapshot_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/messages":{"post":{"summary":"Send Message","description":"Stream one turn as SSE.\n\nFrame vocabulary matches the main BLK-AI chat so the frontend behaves the\nsame way here as it does there:\n\n    {\"status\": \"preparing\"}                     accepted, contacting engine\n    {\"status\": \"cold_start\", \"elapsed_secs\": n} engine waking (persisted)\n    {\"delta\": \"...\"}                            a token\n    {\"stopped\": true}                           operator pressed Stop\n    {\"error\": \"...\"}                            failure, stated plainly\n    {\"done\": true, \"message_id\": \"...\"}         finished and persisted","operationId":"send_message_api_admin_a11y_chat_conversations__conversation_id__messages_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/messages/{message_id}/regenerate":{"post":{"summary":"Regenerate","description":"Redo a reply. The old one is SUPERSEDED, never deleted.","operationId":"regenerate_api_admin_a11y_chat_conversations__conversation_id__messages__message_id__regenerate_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/chat/conversations/{conversation_id}/messages/{message_id}":{"patch":{"summary":"Edit User Message","description":"Edit a sent message and re-run from there.\n\nThe original and everything after it are superseded, not deleted, so the\nconversation still records what was actually asked the first time.","operationId":"edit_user_message_api_admin_a11y_chat_conversations__conversation_id__messages__message_id__patch","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/contacts":{"get":{"summary":"List Contacts","description":"Paginated over the FULL set with a true DB total (Rule C).","operationId":"list_contacts_api_admin_a11y_contacts_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"prospect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prospect Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Contact","operationId":"create_contact_api_admin_a11y_contacts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/contacts.csv":{"get":{"summary":"Export Contacts","description":"CSV of the FULL filtered set -- not just the page on screen (Rule C).","operationId":"export_contacts_api_admin_a11y_contacts_csv_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"prospect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prospect Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/contacts/{contact_id}":{"get":{"summary":"Get Contact","operationId":"get_contact_api_admin_a11y_contacts__contact_id__get","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Patch Contact","description":"Partial update -- omitted fields are left alone, never blanked.","operationId":"patch_contact_api_admin_a11y_contacts__contact_id__patch","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/sources":{"get":{"summary":"Discovery Sources","description":"Which public directories can answer right now, and what the others need.\n\nSurfaced so an empty discovery result is never a mystery: the operator can\nsee whether a source is live, needs ingesting, or is unusable and why.","operationId":"discovery_sources_api_admin_a11y_discovery_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/discovery/batches":{"get":{"summary":"List Batches","description":"Immutable discovery batches, newest first, with a true DB total.","operationId":"list_batches_api_admin_a11y_discovery_batches_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/batches/{batch_id}":{"get":{"summary":"Get Batch","description":"One batch's candidates, paginated over the FULL list (Rule C).\n\nThe batch record is immutable -- it is what was returned at discovery time,\nwith its filters and source citations, so a later re-run cannot rewrite\nhistory.","operationId":"get_batch_api_admin_a11y_discovery_batches__batch_id__get","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects":{"get":{"summary":"List Prospects","description":"Paginated over the FULL set with a true DB total (Rule C).\n\n`manual_complete=true` is the MANUAL AUDITED tab: every organisation whose\nmanual audit is finished, resolved by `store.completed_manual_orgs` with\nthe same rules the manual tags use.\n\n`my_list=true` is MY LIST -- the clients put there by any of the four\nroutes: typed in, imported, promoted from prospects, or kept from a scan.\nThe SAME route serves both charts, so the two can never drift apart in what\nthey can filter, sort or show.","operationId":"list_prospects_api_admin_a11y_prospects_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"probability_pct_pre_scan","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Direction"}},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"}},{"name":"has_scan","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Scan"}},{"name":"has_contact","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Contact"}},{"name":"min_likelihood","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Likelihood"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"include_hidden","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Hidden"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"discovered_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered From"}},{"name":"discovered_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered To"}},{"name":"my_list","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"My List"}},{"name":"added_via","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Added Via"}},{"name":"field","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"manual_complete","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Complete"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Prospect","description":"Add a prospect BY HAND, with your own links and notes.\n\nBody: { name, homepage_url, sector?, subtype?, state?, city?, county?,\n        notes?, links: [{url, label}] }\n\nGoes through the same upsert as discovery, so a hand-entered record MERGES\nwith a discovered one rather than forking it.","operationId":"create_prospect_api_admin_a11y_prospects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects.csv":{"get":{"summary":"Export Prospects","description":"CSV of the FULL filtered set -- never just the visible page (Rule C).","operationId":"export_prospects_api_admin_a11y_prospects_csv_get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"tool","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"}},{"name":"has_scan","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Scan"}},{"name":"has_contact","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Contact"}},{"name":"min_likelihood","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Likelihood"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"include_hidden","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Hidden"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"discovered_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered From"}},{"name":"discovered_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovered To"}},{"name":"my_list","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"My List"}},{"name":"manual_complete","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Manual Complete"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/bulk/promote":{"post":{"summary":"Bulk Promote","description":"Add a selection (or a whole filtered set) to the dashboard.","operationId":"bulk_promote_api_admin_a11y_prospects_bulk_promote_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/promote":{"post":{"summary":"Promote Prospect","description":"Promote ONE prospect to a first-class dashboard site.","operationId":"promote_prospect_api_admin_a11y_prospects__prospect_id__promote_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/demote":{"post":{"summary":"Demote Prospect","description":"Remove from the dashboard. The prospect record is KEPT forever.\n\nSame audit logging as removing a manually added site: the site row stays\n(with its scans and history intact) and simply leaves the default dashboard\nview, and the prospect reverts to what it actually is.","operationId":"demote_prospect_api_admin_a11y_prospects__prospect_id__demote_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/sources/schedules":{"get":{"summary":"Source Schedules","description":"Every source refresh schedule, plus the cadence vocabulary for the UI.","operationId":"source_schedules_api_admin_a11y_discovery_sources_schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/discovery/sources/{source}/schedule":{"put":{"summary":"Put Source Schedule","description":"Set a source's refresh cadence and scope.\n\nBody: { enabled, interval_seconds?, filters? }\n`filters` narrows what gets cached (states, subtypes) so a directory can be\nloaded for only the markets being worked.","operationId":"put_source_schedule_api_admin_a11y_discovery_sources__source__schedule_put","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/sources/{source}/refresh":{"post":{"summary":"Refresh Source Now","description":"Reload a source RIGHT NOW. Backs the quick-action button and the chat tool.\n\nBody: { filters? } -- optional scope for this load.","operationId":"refresh_source_now_api_admin_a11y_discovery_sources__source__refresh_post","parameters":[{"name":"source","in":"path","required":true,"schema":{"type":"string","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/subtypes":{"get":{"summary":"Discovery Subtypes","description":"The subtype vocabulary, DERIVED from the verified source registry.\n\nNot a hardcoded list: if a source's metadata changes, the form changes with\nit, so the UI can never offer a subtype no source can actually answer.","operationId":"discovery_subtypes_api_admin_a11y_discovery_subtypes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/discovery/search":{"post":{"summary":"Run Search","description":"Same pipeline as the chat, entered from a form.\n\nReturns immediately with the search record; the run continues in the\nbackground and the chart updates as prospects land.","operationId":"run_search_api_admin_a11y_discovery_search_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/discovery/searches":{"get":{"summary":"List Searches","description":"Recent searches, newest first, with a true DB total. Each is replayable.","operationId":"list_searches_api_admin_a11y_discovery_searches_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/searches/{search_id}":{"get":{"summary":"Get Search","operationId":"get_search_api_admin_a11y_discovery_searches__search_id__get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/discovery/searches/{search_id}/rerun":{"post":{"summary":"Rerun Search","description":"Replay a prior search.\n\nA NEW history row is written rather than the old one being overwritten --\nthe first run's result count is part of the record and must not be\nrewritten by a later one.","operationId":"rerun_search_api_admin_a11y_discovery_searches__search_id__rerun_post","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/import":{"post":{"summary":"Import Prospects","description":"Import a list you already have.\n\nBody: { csv: \"<text>\", sector?, subtype? }\nAccepts the same generous column aliases as a directory ingest (name/entity,\nurl/website/homepage, state, city, county) PLUS `notes` and `links` --\nbecause an operator's own list carries context a public registry never does.\nRows are UPSERTED, so re-importing a corrected file updates rather than\nduplicates, and rows that cannot be used are REPORTED, not dropped silently.","operationId":"import_prospects_api_admin_a11y_prospects_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/links":{"post":{"summary":"Add Prospect Link","description":"Attach your own link: a tender, an evidence folder, an email thread.","operationId":"add_prospect_link_api_admin_a11y_prospects__prospect_id__links_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/links/{link_id}":{"delete":{"summary":"Delete Prospect Link","operationId":"delete_prospect_link_api_admin_a11y_prospects__prospect_id__links__link_id__delete","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/dossier":{"get":{"summary":"Prospect Dossier","description":"EVERYTHING about one client, in one response.\n\nAssembled from the collections that already own each piece rather than\ncopied into the prospect, so the client page can never drift out of sync\nwith the dashboard it is describing.","operationId":"prospect_dossier_api_admin_a11y_prospects__prospect_id__dossier_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/profile":{"patch":{"summary":"Edit Prospect Profile","description":"Edit a client's own details -- the profile, not the scan evidence.\n\nA MERGE: fields not sent keep their values, so saving one box cannot blank\nthe rest. Every change is appended to history with its before and after.","operationId":"edit_prospect_profile_api_admin_a11y_prospects__prospect_id__profile_patch","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/fields":{"get":{"summary":"List Prospect Fields","description":"The industries actually in use, with counts.\n\nBuilt from the data rather than a hardcoded list: the owner works across\neleven-plus fields and counting, and a fixed enum would be wrong the day\nafter it was written.","operationId":"list_prospect_fields_api_admin_a11y_prospects_fields_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/my-list":{"post":{"summary":"Add Prospect To My List","description":"Put a prospect on my list. Body: {\"via\": \"prospect\"|\"scan\"|...}","operationId":"add_prospect_to_my_list_api_admin_a11y_prospects__prospect_id__my_list_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Remove Prospect From My List","description":"Take a client off my list. Deletes NOTHING -- see remove_from_my_list.","operationId":"remove_prospect_from_my_list_api_admin_a11y_prospects__prospect_id__my_list_delete","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/scans/{scan_id}/my-list":{"post":{"summary":"Add Scan To My List","description":"Keep the site from a SCAN as a client on my list.\n\nA scan is often the first contact with a site -- run it, see the state of\nit, decide to pursue them. That has to be one click, not a retype. The\nprospect is created from the scanned site if it does not exist yet, and\nmerges into the existing record if it does, so a site cannot end up on the\nlist twice under two spellings of its URL.","operationId":"add_scan_to_my_list_api_admin_a11y_scans__scan_id__my_list_post","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/my-list/import":{"post":{"summary":"Import From Prospects","description":"IMPORT prospects onto my list, in bulk.\n\nBody: {\"prospect_ids\": [...]}  or  {\"filters\": {...}, \"all_matching\": true}\n\nThe filter form imports the WHOLE matching set rather than the rows on\nscreen, so importing \"every healthcare prospect in Missouri\" means all of\nthem, not the first fifty (Rule C).","operationId":"import_from_prospects_api_admin_a11y_prospects_my_list_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/scans/my-list/import":{"post":{"summary":"Import From Scans","description":"IMPORT the sites from scans onto my list, in bulk.\n\nBody: {\"scan_ids\": [...]}  or  {\"all_recent\": true, \"limit\": 50}\n\nNamed ids are the point: an operator picks the sites they want off a\nsearchable list, rather than taking the most recent N and pruning after.\n\nA scan is often first contact with a site. Bringing a batch of scanned\nsites onto the list should not mean retyping any of them.\n\nEach scanned site goes through the SAME upsert as everything else, so a\nsite already known -- discovered, scanned before, or already a client --\nmerges into its existing record instead of appearing twice.","operationId":"import_from_scans_api_admin_a11y_scans_my_list_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/duplicates":{"get":{"summary":"List Duplicate Prospects","description":"Clients that appear more than once, grouped by site.\n\nReports only. Nothing is merged by looking, and the suggested keeper is a\nsuggestion -- the operator chooses which record survives.","operationId":"list_duplicate_prospects_api_admin_a11y_prospects_duplicates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/merge":{"post":{"summary":"Merge Duplicate Prospects","description":"Merge duplicates into one profile.\n\nBody: {\"keep_id\": \"...\", \"absorb_ids\": [...]}\n   or {\"all\": true}  -- merge every detected group onto its suggested keeper\n\nDeletes nothing. Notes, links, history, signals, tags and profile fields are\nunioned; the best evidence is kept, not the newest write; and every site id\nthe client has been known by is recorded so no completed scan is orphaned.","operationId":"merge_duplicate_prospects_api_admin_a11y_prospects_merge_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/bulk/status":{"post":{"summary":"Bulk Status","description":"Mark not-a-fit / archive / any status across a selection. No deletions.","operationId":"bulk_status_api_admin_a11y_prospects_bulk_status_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/bulk/contact":{"post":{"summary":"Bulk Assign Contact","operationId":"bulk_assign_contact_api_admin_a11y_prospects_bulk_contact_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/bulk/notes":{"post":{"summary":"Bulk Note","operationId":"bulk_note_api_admin_a11y_prospects_bulk_notes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/scan":{"post":{"summary":"Scan Prospects","description":"Scan one or many prospects in the BACKGROUND.\n\nA whole-site scan takes minutes, far longer than an HTTP request should\nlive, so the job record lives in Mongo and a restart cannot lose the fact\nthat a scan was asked for.","operationId":"scan_prospects_api_admin_a11y_prospects_scan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/prospects/scan/{job_id}":{"get":{"summary":"Prospect Scan Job","operationId":"prospect_scan_job_api_admin_a11y_prospects_scan__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}":{"get":{"summary":"Get Prospect","operationId":"get_prospect_api_admin_a11y_prospects__prospect_id__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/status":{"post":{"summary":"Set Prospect Status","description":"A STATE CHANGE. Never a deletion -- the row stays, filterable.","operationId":"set_prospect_status_api_admin_a11y_prospects__prospect_id__status_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/notes":{"post":{"summary":"Add Prospect Note","operationId":"add_prospect_note_api_admin_a11y_prospects__prospect_id__notes_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/{prospect_id}/contact":{"post":{"summary":"Assign Prospect Contact","description":"Link or unlink a contact. Passing no contact_id unlinks.","operationId":"assign_prospect_contact_api_admin_a11y_prospects__prospect_id__contact_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/prospects/snapshot":{"post":{"summary":"Snapshot Prospects","description":"Force the rolling R2 snapshot (it also runs after each discovery).","operationId":"snapshot_prospects_api_admin_a11y_prospects_snapshot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/groundit":{"get":{"summary":"List Groundit","description":"Every site any auditor has turned up that is too big to hand out.","operationId":"list_groundit_api_admin_a11y_groundit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"groundit.pages_known_at_least","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Direction"}},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"include_hidden","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Hidden"}},{"name":"found_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Found By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/groundit.csv":{"get":{"summary":"Export Groundit","description":"CSV of every GroundIT site -- the FULL filtered set, not one page.\n\nMaster-only for the same reason the listing is: this file contains every\naccount's large sites, and the whole point is that the owner sees the ones\na contractor turned up. It carries the SIZE and the evidence behind it,\nbecause a spreadsheet row saying \"GroundIT\" with no number is not something\nanyone can price from.","operationId":"export_groundit_api_admin_a11y_groundit_csv_get","parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"include_hidden","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Hidden"}},{"name":"found_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Found By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/people":{"get":{"summary":"Search Members","description":"Members who can be made the client on a portal account.\n\n    \"i require sign up so that means they MUST have an account as a\n     client. meaning the profile adder needs to allow slecting a USER via\n     email name username etc with seach and slect not invite via email\"\n\nA CLIENT ALREADY HAS AN ACCOUNT, so the adder picks one rather than\nemailing an invitation to somebody who is already signed up. The match is\nthe platform's own (`/admin/users/search`): email, username, full name,\ncase-insensitive, plus an exact user id.\n\nIt is a SEPARATE route from that one on purpose. `/admin/users/search`\nbelongs to the members section, and an accessibility contractor holds the\na11y section only -- reusing it would either 403 for the auditors who\nneed this or force a grant to the whole member directory. So the query is\nthe same and the payload is the four fields a person is picked by,\nnothing else: this is a chooser, not a directory.\n\nNEWEST FIRST, ALWAYS -- searched or not.\n\n    \"the selcetor needs to offer search and select AND pre populate names\n     auto sorted by newest users first\"\n\nThe person an auditor is filing signed up recently, near enough always:\nthey just bought an audit. So the list opens already populated with the\nnewest members, and a search narrows that same order rather than\nreordering it. `created_at` is missing on the oldest member records --\nthose sort last, which is where they belong.","operationId":"search_members_api_admin_a11y_portal_people_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/accounts/{account_id}/user":{"post":{"summary":"Set Account User","description":"Make an EXISTING member the client on this account.\n\nBody: { user_id, replace?: bool }\n\nThis is the whole of \"adding a client\": they signed up, they are found by\nname, username or email, and they are selected. Nothing is emailed and\nnothing has to be accepted -- the moment this returns, that member signs\nin and sees their own reports.","operationId":"set_account_user_api_admin_a11y_portal_accounts__account_id__user_post","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"}}}}}}},"/api/admin/a11y/portal/accounts":{"post":{"summary":"Create Client Account","description":"Create a client account for a member who ALREADY HAS ONE.\n\nBody: { name, user_id, prospect_ids?: [...] }\n\n`user_id` is the member this file belongs to, chosen from\n`/admin/a11y/portal/people`. It is required: a client account with nobody\non it is a file waiting for an invitation, and an invitation to somebody\nwho has already signed up is the thing this build refuses to do.","operationId":"create_client_account_api_admin_a11y_portal_accounts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Client Accounts","description":"Every client account, with how many platforms each holds.","operationId":"list_client_accounts_api_admin_a11y_portal_accounts_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/accounts/{account_id}/platforms":{"post":{"summary":"Attach Platforms","description":"Push one or more platforms onto a client's portal.\n\nBody: { prospect_ids: [...] }","operationId":"attach_platforms_api_admin_a11y_portal_accounts__account_id__platforms_post","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"}}}}}}},"/api/admin/a11y/portal/platforms/{prospect_id}":{"delete":{"summary":"Detach Platform","description":"Take a platform out of a client's portal. Deletes nothing.","operationId":"detach_platform_api_admin_a11y_portal_platforms__prospect_id__delete","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/accounts/{account_id}/invite":{"post":{"summary":"Invite Client","description":"GONE. A client has an account already -- find them and select them.\n\n    \"right now to create a profle for a client auditors must invite them\n     via email. worng. i require sign up so that means they MUST have an\n     account as a client ... not invite via email that cant be true whrn\n     they alrady have an account.\"\n\nThe route stays so that a stale button or an older client build gets the\nsentence rather than a 404 it will report as a bug. It is refused rather\nthan quietly forwarded, because an auditor who thinks they sent an\ninvitation will wait for it to be accepted and never look again.\n\nAn invitation ALREADY ISSUED can still be accepted -- `accept-invite`\nbelow is untouched. Nothing that was handed out is stranded by this.","operationId":"invite_client_api_admin_a11y_portal_accounts__account_id__invite_post","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"}}}}}}},"/api/a11y/portal/accept-invite":{"post":{"summary":"Accept Invite","description":"Claim an invitation as the signed-in member.\n\nBody: { token }","operationId":"accept_invite_api_a11y_portal_accept_invite_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/a11y/portal/platforms/{prospect_id}/public-notes":{"post":{"summary":"Add Public Note","description":"Publish a note about ONE platform, for the client to read.","operationId":"add_public_note_api_admin_a11y_portal_platforms__prospect_id__public_notes_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/public-notes/{note_id}":{"delete":{"summary":"Delete Public Note","description":"Retract a published note.","operationId":"delete_public_note_api_admin_a11y_portal_public_notes__note_id__delete","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/a11y/portal/accounts/{account_id}/charges":{"post":{"summary":"Raise Client Charge","description":"Bill a client. Creates something payable; takes no money.","operationId":"raise_client_charge_api_admin_a11y_portal_accounts__account_id__charges_post","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"}}}}}}},"/api/admin/a11y/portal/accounts/{account_id}/subscriptions":{"post":{"summary":"Start Client Subscription","description":"Put ONE platform on a monitoring subscription.","operationId":"start_client_subscription_api_admin_a11y_portal_accounts__account_id__subscriptions_post","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"}}}}}}},"/api/a11y/portal/me":{"get":{"summary":"My Portal","description":"Everything a client needs to land: their platforms and what is owed.","operationId":"my_portal_api_a11y_portal_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/a11y/portal/platforms/{prospect_id}":{"get":{"summary":"My Platform","description":"One of the client's platforms: its state, its notes, its reports.","operationId":"my_platform_api_a11y_portal_platforms__prospect_id__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/reports/{version_id}":{"get":{"summary":"Download My Report","description":"Download one report version. Presigned, and only from your own file.","operationId":"download_my_report_api_a11y_portal_platforms__prospect_id__reports__version_id__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/billing":{"get":{"summary":"My Billing","description":"Everything owed and everything paid, with what each charge was for.","operationId":"my_billing_api_a11y_portal_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/proposals":{"get":{"summary":"My Proposals","description":"The proposals BBAIS has issued for this platform.","operationId":"my_proposals_api_a11y_portal_platforms__prospect_id__proposals_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/document-versions":{"get":{"summary":"My Document Versions","description":"EVERY version of every document issued to this client, with its history.\n\n    \"you need to ensure ALL versions are CLEARLY accisble for all parties\n     with ALL versions and a CLEAR version history as seen in scans.\n     meaning clients within their dashboard.\"\n\nThe reports were already all here. The PROPOSALS were not here at all --\na client could be sent one, sign it, and have nowhere in their own\ndashboard to open it again, let alone see that it had been revised twice\nbefore they signed. A client who cannot see the chain has to take the\nlatest document's word for what they agreed to.","operationId":"my_document_versions_api_a11y_portal_platforms__prospect_id__document_versions_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/proposal-versions/{version_id}.html":{"get":{"summary":"My Proposal Version","description":"ONE earlier version of a proposal, as it was issued.","operationId":"my_proposal_version_api_a11y_portal_platforms__prospect_id__proposal_versions__version_id__html_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/proposal-versions/{version_id}.{fmt}":{"get":{"summary":"My Proposal Version Download","description":"ONE earlier version of a proposal, DOWNLOADED, as it was issued.\n\n    owner: \"how are auditors supposed to deliver anything from outreach if\n     there are only view buttons and no download! im sure the lcient side\n     looks the same way!\"\n\nIt did. A client could open a version in a tab and had no way to keep it --\nthe document they are being asked to sign, or already signed. Rendered from\nthat version's own snapshot, scoped exactly like the HTML view so a\ndownload cannot reach a document the view refuses.","operationId":"my_proposal_version_download_api_a11y_portal_platforms__prospect_id__proposal_versions__version_id___fmt__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/signed/{request_id}.pdf":{"get":{"summary":"My Signed Copy","description":"The signed copy of a document issued to this client.","operationId":"my_signed_copy_api_a11y_portal_platforms__prospect_id__signed__request_id__pdf_get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/proposals/{proposal_id}/options":{"post":{"summary":"Choose Proposal Options","description":"The client chooses what they want. Body: { keys: [...] }\n\n    \"there needs to be a option picker similar to land proposals that\n     allows clients to select which optopns they want eg 2 reports - 4\n     reports and monitoring, remediation all of the above etc etc etc...\"\n    \"the options seleted also need to render into their profiles\n     automatically\"\n\nSo the choice is recorded against the proposal AND onto their own file,\nwhere it renders as their scope without anybody re-typing it.\n\nTHE PRICE IS COMPUTED HERE, never taken from the browser: a selection is\nthe beginning of a payment, and a total that arrived in a request body is\na total anybody can edit.","operationId":"choose_proposal_options_api_a11y_portal_platforms__prospect_id__proposals__proposal_id__options_post","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/portal/platforms/{prospect_id}/proposals/{proposal_id}":{"get":{"summary":"My Proposal","description":"One proposal, as a link to the PDF BBAIS actually produced.","operationId":"my_proposal_api_a11y_portal_platforms__prospect_id__proposals__proposal_id__get","parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"string","title":"Prospect Id"}},{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/schema":{"get":{"summary":"Get Schema","description":"The option lists the editor renders (deal types, property classes,\noccupancy intents, statuses, option limits) -- one source, the server's.","operationId":"get_schema_api_admin_land_proposals_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/numbers":{"post":{"summary":"Compute Numbers","description":"The live Numbers readout for the UNSAVED editor state (admin-only).\nSame engine the save stores; nothing here is ever seller-facing.","operationId":"compute_numbers_api_admin_land_proposals_numbers_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/rules":{"get":{"summary":"List Rules","description":"The state rules table (admin-editable, versioned), with citations and\nverification dates.","operationId":"list_rules_api_admin_land_proposals_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/rules/{rule_id}":{"patch":{"summary":"Edit Rule","operationId":"edit_rule_api_admin_land_proposals_rules__rule_id__patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/rules/{rule_id}/history":{"get":{"summary":"Rule History","operationId":"rule_history_api_admin_land_proposals_rules__rule_id__history_get","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/credentials":{"get":{"summary":"List Credentials","description":"BBAIS's own state licenses and registrations (read by the gates).","operationId":"list_credentials_api_admin_land_proposals_credentials_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Credential","operationId":"put_credential_api_admin_land_proposals_credentials_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/credentials/retire":{"post":{"summary":"Retire Credential","description":"Take a credential out of use (kept, with its history; never deleted).","operationId":"retire_credential_api_admin_land_proposals_credentials_retire_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/jurisdictions":{"get":{"summary":"List Jurisdictions","description":"Cities and counties with a local rule on file (the city picker).","operationId":"list_jurisdictions_api_admin_land_proposals_jurisdictions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/forms/{name}":{"get":{"summary":"Official Form","description":"A state's official form, served exactly as the agency published it.","operationId":"official_form_api_admin_land_proposals_forms__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals":{"get":{"summary":"List Proposals","operationId":"list_proposals_api_admin_land_proposals_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Proposal","operationId":"create_proposal_api_admin_land_proposals_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/preview":{"post":{"summary":"Preview","description":"The live canvas. Renders the UNSAVED editor state so the document\nupdates as fields change, before autosave lands. Same renderer the export\nuses; the seller-safe projection is applied inside `render_document`.","operationId":"preview_api_admin_land_proposals_preview_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/draft":{"post":{"summary":"Draft Narrative","description":"Draft the five narrative sections for the editor to place into its\neditable fields. Body: {document, mode: \"template\" | \"ai\"}. Nothing is\nsaved here. BLK-AI's sections are scanned for every internal figure and\nterm on this proposal and DISCARDED (with the reason) if one appears.","operationId":"draft_narrative_api_admin_land_proposals_draft_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/land-proposals/land-accounts":{"get":{"summary":"Land Accounts","description":"Search-and-select over members who have created a Land account.","operationId":"land_accounts_api_admin_land_proposals_land_accounts_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}":{"get":{"summary":"Get Proposal","operationId":"get_proposal_api_admin_land_proposals__proposal_id__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Save Proposal","description":"Autosave. Body: {base_revision, patch: {<section>: ...}}.\n\nA save against a stale revision returns 409 with the CURRENT copy, so the\neditor can show what changed instead of silently overwriting it.","operationId":"save_proposal_api_admin_land_proposals__proposal_id__patch","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Proposal","description":"Soft delete (Rule D). The row stays; `restore` brings it back. A\nproposal with anything out for signature or signed is never deleted.","operationId":"delete_proposal_api_admin_land_proposals__proposal_id__delete","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/status":{"post":{"summary":"Set Status","description":"Move along the pipeline. Body: {status, note?}. Refuses a move the\npipeline does not allow, and leaving Draft before every property option\nhas its state and property class, with the reason.","operationId":"set_status_api_admin_land_proposals__proposal_id__status_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/duplicate":{"post":{"summary":"Duplicate Proposal","operationId":"duplicate_proposal_api_admin_land_proposals__proposal_id__duplicate_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/restore":{"post":{"summary":"Restore Proposal","operationId":"restore_proposal_api_admin_land_proposals__proposal_id__restore_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/versions":{"get":{"summary":"Proposal Versions","description":"The version history, as the Accessibility proposals have it: every\nversion newest first with the TRUE total (each with its label, the\nfields edited and whether pricing changed), plus every document sent from\nthis proposal with its as-sent and signed copies.","operationId":"proposal_versions_api_admin_land_proposals__proposal_id__versions_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/versions/{version_id}.{fmt}":{"get":{"summary":"Version Download","description":"ONE version, in any format, rendered from that version's own snapshot.","operationId":"version_download_api_admin_land_proposals__proposal_id__versions__version_id___fmt__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/export.{fmt}":{"get":{"summary":"Export Current","description":"The current proposal in any format (the latest version's snapshot).","operationId":"export_current_api_admin_land_proposals__proposal_id__export__fmt__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/versions/{version_id}/accessibility":{"post":{"summary":"Version Accessibility","description":"Print this version to PDF and gate it: veraPDF ua1 AND the tag tree\n(headings in Sect, table header cells, alt text). Recorded on the\nversion; a failing PDF is flagged, never passed by default.","operationId":"version_accessibility_api_admin_land_proposals__proposal_id__versions__version_id__accessibility_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/revisions":{"get":{"summary":"List Revisions","operationId":"list_revisions_api_admin_land_proposals__proposal_id__revisions_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/compliance":{"get":{"summary":"Get Compliance","description":"Which rules reach each option, the disclosures the proposal carries,\neach statutory gate as met / not met with the reason, and advisories.\n`can_issue_signing_link` is what Phase 7's signing flow checks.","operationId":"get_compliance_api_admin_land_proposals__proposal_id__compliance_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/compliance/deliver":{"post":{"summary":"Record Delivery","description":"Record that a required disclosure was DELIVERED to the owner. The time\nis the server's, never the caller's -- a 14-day clock cannot be\nback-dated. The first delivery stands; it cannot be re-recorded.","operationId":"record_delivery_api_admin_land_proposals__proposal_id__compliance_deliver_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/compliance/sign":{"post":{"summary":"Record Signature","description":"Record that the owner or BBAIS signed and dated a separate statutory\ndisclosure (until Phase 7's in-platform e-sign records it directly).","operationId":"record_signature_api_admin_land_proposals__proposal_id__compliance_sign_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/disclosures/{rule_id}/{option_id}":{"get":{"summary":"Disclosure Statement","description":"A statute's SEPARATE disclosure statement for one option, as its own\ndocument (statutory text verbatim, bold, 12-point+, signature lines).","operationId":"disclosure_statement_api_admin_land_proposals__proposal_id__disclosures__rule_id___option_id__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"option_id","in":"path","required":true,"schema":{"type":"string","title":"Option Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/seller-account":{"post":{"summary":"Link Seller Account","description":"Link the seller's Land account (chosen by search-and-select).","operationId":"link_seller_account_api_admin_land_proposals__proposal_id__seller_account_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures":{"get":{"summary":"List Signatures","description":"Readiness to send, and every signature request on this proposal with\nits signers and full event trail.","operationId":"list_signatures_api_admin_land_proposals__proposal_id__signatures_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signature-request":{"post":{"summary":"Send For Signature","operationId":"send_for_signature_api_admin_land_proposals__proposal_id__signature_request_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/disclosures/{rule_id}/{option_id}/send":{"post":{"summary":"Send Disclosure","description":"Send a statute's separate disclosure statement to the owner's account\nfor signature (delivery is recorded when the owner opens it after consent).","operationId":"send_disclosure_api_admin_land_proposals__proposal_id__disclosures__rule_id___option_id__send_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"option_id","in":"path","required":true,"schema":{"type":"string","title":"Option Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/sign":{"post":{"summary":"Bbais Sign","description":"BBAIS signs -- the MASTER account only: the signer of record is the\nFounder & CEO, and a delegated admin may not sign for BBAIS.","operationId":"bbais_sign_api_admin_land_proposals__proposal_id__signatures__envelope_id__sign_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/void":{"post":{"summary":"Void Request","operationId":"void_request_api_admin_land_proposals__proposal_id__signatures__envelope_id__void_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/new-version":{"post":{"summary":"Start New Version","description":"Unlock for editing: voids an open request; a signed version stays\nexactly as signed, and the edits become a new, unsigned version.","operationId":"start_new_version_api_admin_land_proposals__proposal_id__new_version_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/document.pdf":{"get":{"summary":"Envelope Document","operationId":"envelope_document_api_admin_land_proposals__proposal_id__signatures__envelope_id__document_pdf_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/executed.pdf":{"get":{"summary":"Envelope Executed","operationId":"envelope_executed_api_admin_land_proposals__proposal_id__signatures__envelope_id__executed_pdf_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/executed-view":{"get":{"summary":"Executed View","description":"The signed copy as a readable page -- the HTML the executed PDF was\nprinted from, with every signature in its place.","operationId":"executed_view_api_admin_land_proposals__proposal_id__signatures__envelope_id__executed_view_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/land-proposals/{proposal_id}/signatures/{envelope_id}/verify":{"get":{"summary":"Envelope Verify","description":"Re-check the executed copy: its checksum, and the BBAIS seal.","operationId":"envelope_verify_api_admin_land_proposals__proposal_id__signatures__envelope_id__verify_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/account":{"get":{"summary":"My Account","operationId":"my_account_api_land_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Save My Account","operationId":"save_my_account_api_land_account_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/land/documents":{"get":{"summary":"My Documents","operationId":"my_documents_api_land_documents_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/versions":{"get":{"summary":"My Versions","description":"Every version of every Land document sent to this account.","operationId":"my_versions_api_land_versions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/land/documents/{envelope_id}":{"get":{"summary":"My Document","operationId":"my_document_api_land_documents__envelope_id__get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/consent/start":{"post":{"summary":"Consent Start","description":"The ESIGN consent notice, as a PDF with an access code inside it.","operationId":"consent_start_api_land_documents__envelope_id__consent_start_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/consent":{"post":{"summary":"Consent Accept","operationId":"consent_accept_api_land_documents__envelope_id__consent_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/consent/withdraw":{"post":{"summary":"Consent Withdraw","operationId":"consent_withdraw_api_land_documents__envelope_id__consent_withdraw_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/pdf":{"get":{"summary":"Document Pdf","description":"The document itself -- only after ESIGN consent (§7001(c) makes consent\nthe precondition of delivering a required record electronically).","operationId":"document_pdf_api_land_documents__envelope_id__pdf_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/view":{"get":{"summary":"Document View","description":"A readable view of the SAME document -- the exact HTML that was printed\ninto the PDF being signed. Phones (Android Chrome in particular) do not\ndisplay a PDF inside a page, and screen readers read HTML best; the PDF\nstays the signed record and is always offered beside it. Consent first,\nexactly as for the PDF.","operationId":"document_view_api_land_documents__envelope_id__view_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/sign":{"post":{"summary":"Sign","operationId":"sign_api_land_documents__envelope_id__sign_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/decline":{"post":{"summary":"Decline","operationId":"decline_api_land_documents__envelope_id__decline_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/land/documents/{envelope_id}/executed.pdf":{"get":{"summary":"Executed Pdf","operationId":"executed_pdf_api_land_documents__envelope_id__executed_pdf_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/me":{"get":{"summary":"Docfraud Me","operationId":"docfraud_me_api_docfraud_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/verticals":{"get":{"summary":"Docfraud Verticals","description":"Public: both verticals' names, organization types, document types and\nwording (checkout, Docs and the signed-out tab use it).","operationId":"docfraud_verticals_api_docfraud_verticals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants":{"post":{"summary":"Create Applicant","operationId":"create_applicant_api_docfraud_applicants_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"List Applicants","operationId":"list_applicants_api_docfraud_applicants_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}":{"get":{"summary":"Get Applicant","operationId":"get_applicant_api_docfraud_applicants__applicant_id__get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/documents":{"post":{"summary":"Upload Document","operationId":"upload_document_api_docfraud_applicants__applicant_id__documents_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_api_docfraud_applicants__applicant_id__documents_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Documents","operationId":"list_documents_api_docfraud_applicants__applicant_id__documents_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/documents/{document_id}/download-ticket":{"post":{"summary":"Member Download Ticket","operationId":"member_download_ticket_api_docfraud_documents__document_id__download_ticket_post","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/download/{token}":{"get":{"summary":"Download","operationId":"download_api_docfraud_download__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/audit":{"get":{"summary":"Member Audit","operationId":"member_audit_api_docfraud_audit_get","parameters":[{"name":"target_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Target Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/test-organizations":{"post":{"summary":"Admin Create Test Org","description":"A clearly marked TEST organization for QA. Real ones come from checkout.","operationId":"admin_create_test_org_api_admin_docfraud_test_organizations_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/documents/{tenant_id}/{document_id}/download-ticket":{"post":{"summary":"Admin Download Ticket","operationId":"admin_download_ticket_api_admin_docfraud_documents__tenant_id___document_id__download_ticket_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/org":{"get":{"summary":"Get Org","operationId":"get_org_api_docfraud_org_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Org","operationId":"put_org_api_docfraud_org_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/team":{"get":{"summary":"Get Team","operationId":"get_team_api_docfraud_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/team/invite":{"post":{"summary":"Team Invite","operationId":"team_invite_api_docfraud_team_invite_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/team/{user_id}":{"post":{"summary":"Team Update","operationId":"team_update_api_docfraud_team__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/invites/accept":{"post":{"summary":"Invite Accept","operationId":"invite_accept_api_docfraud_invites_accept_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/intake/applicants":{"post":{"summary":"Add Primary","operationId":"add_primary_api_docfraud_intake_applicants_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/review":{"get":{"summary":"Review Home","description":"What the first screen states: the checks that run, and the two statements\nthe subscriber confirms before the first upload and the first scan.","operationId":"review_home_api_docfraud_review_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/details":{"post":{"summary":"Save Details","operationId":"save_details_api_docfraud_applicants__applicant_id__details_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/ssn-check":{"post":{"summary":"Applicant Ssn Check","description":"The CPN / SSN check on its own; the result is saved to the profile.","operationId":"applicant_ssn_check_api_docfraud_applicants__applicant_id__ssn_check_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/ssn-check":{"post":{"summary":"Ssn Check","operationId":"ssn_check_api_docfraud_ssn_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/date-of-birth":{"post":{"summary":"Set Dob","operationId":"set_dob_api_docfraud_applicants__applicant_id__date_of_birth_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/file-members":{"post":{"summary":"Add File Member","operationId":"add_file_member_api_docfraud_applicants__applicant_id__file_members_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/intake":{"get":{"summary":"Applicant Intake","operationId":"applicant_intake_api_docfraud_applicants__applicant_id__intake_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/manual-only":{"post":{"summary":"Manual Only","operationId":"manual_only_api_docfraud_applicants__applicant_id__manual_only_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/consent":{"post":{"summary":"Subscriber Consent","operationId":"subscriber_consent_api_docfraud_applicants__applicant_id__consent_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/links":{"post":{"summary":"Create Link","operationId":"create_link_api_docfraud_applicants__applicant_id__links_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/links/{link_id}/revoke":{"post":{"summary":"Revoke Link","operationId":"revoke_link_api_docfraud_links__link_id__revoke_post","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/documents/{document_id}":{"patch":{"summary":"Retag Document","description":"The uploader confirms or corrects the suggested document type.","operationId":"retag_document_api_docfraud_documents__document_id__patch","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Document","description":"Delete an applicant's document early (crypto-shred). The scan's audit record stays.","operationId":"delete_document_api_docfraud_documents__document_id__delete","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/notice":{"get":{"summary":"Notice Preview","operationId":"notice_preview_api_docfraud_notice_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/public/link/{token}":{"get":{"summary":"Public Link","operationId":"public_link_api_docfraud_public_link__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/link/{token}/consent":{"post":{"summary":"Public Link Consent","operationId":"public_link_consent_api_docfraud_public_link__token__consent_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/link/{token}/application":{"post":{"summary":"Public Link Application","operationId":"public_link_application_api_docfraud_public_link__token__application_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/link/{token}/upload":{"post":{"summary":"Public Link Upload","operationId":"public_link_upload_api_docfraud_public_link__token__upload_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_public_link_upload_api_docfraud_public_link__token__upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/link/{token}/submit":{"post":{"summary":"Public Link Submit","operationId":"public_link_submit_api_docfraud_public_link__token__submit_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/properties":{"get":{"summary":"Chart","operationId":"chart_api_docfraud_properties_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create","operationId":"create_api_docfraud_properties_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/properties/{property_id}":{"get":{"summary":"Detail","operationId":"detail_api_docfraud_properties__property_id__get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update","operationId":"update_api_docfraud_properties__property_id__put","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/properties/{property_id}/units":{"post":{"summary":"Add Units","operationId":"add_units_api_docfraud_properties__property_id__units_post","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/properties/{property_id}/units/{unit_id}":{"put":{"summary":"Update Unit","operationId":"update_unit_api_docfraud_properties__property_id__units__unit_id__put","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}},{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","title":"Unit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/properties/{property_id}/archive":{"post":{"summary":"Archive","operationId":"archive_api_docfraud_properties__property_id__archive_post","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/property":{"post":{"summary":"Attach","operationId":"attach_api_docfraud_applicants__applicant_id__property_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/vin-check":{"post":{"summary":"Vin Check","operationId":"vin_check_api_docfraud_vin_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/scans":{"post":{"summary":"Start Scan","operationId":"start_scan_api_docfraud_applicants__applicant_id__scans_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Scans","operationId":"list_scans_api_docfraud_applicants__applicant_id__scans_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/scans/{scan_id}":{"get":{"summary":"Get Scan","operationId":"get_scan_api_docfraud_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/scans/{tenant_id}/{scan_id}":{"get":{"summary":"Admin Get Scan","operationId":"admin_get_scan_api_admin_docfraud_scans__tenant_id___scan_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/kill-switch":{"get":{"summary":"Kill Switch Status","operationId":"kill_switch_status_api_admin_docfraud_kill_switch_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Kill Switch","description":"Pause or resume ALL new scans platform-wide (Phase 9 builds the panel).","operationId":"kill_switch_api_admin_docfraud_kill_switch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/chart":{"get":{"summary":"Get Chart","operationId":"get_chart_api_docfraud_chart_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/chart.csv":{"get":{"summary":"Chart Csv","operationId":"chart_csv_api_docfraud_chart_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/views":{"get":{"summary":"Get Views","operationId":"get_views_api_docfraud_views_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Post View","operationId":"post_view_api_docfraud_views_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/profile":{"get":{"summary":"Get Profile","operationId":"get_profile_api_docfraud_applicants__applicant_id__profile_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/next-steps/{index}":{"post":{"summary":"Tick","operationId":"tick_api_docfraud_applicants__applicant_id__next_steps__index__post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/review-readiness":{"get":{"summary":"Readiness","operationId":"readiness_api_docfraud_applicants__applicant_id__review_readiness_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/review":{"post":{"summary":"Review","operationId":"review_api_docfraud_applicants__applicant_id__review_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/notes":{"post":{"summary":"Note","operationId":"note_api_docfraud_applicants__applicant_id__notes_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/findings/{finding_id}/snippet.png":{"get":{"summary":"Snippet","operationId":"snippet_api_docfraud_findings__finding_id__snippet_png_get","parameters":[{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/request-document":{"post":{"summary":"Request Document","description":"A new secure link for a specific document; uploading it lets a new scan\nshow before/after on the profile.","operationId":"request_document_api_docfraud_applicants__applicant_id__request_document_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/report":{"get":{"summary":"Applicant Report","operationId":"applicant_report_api_docfraud_applicants__applicant_id__report_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/sign-off":{"post":{"summary":"Sign Off No Concerns","description":"One-click sign-off for a report with no concerns flagged (Rule H still applies).","operationId":"sign_off_no_concerns_api_docfraud_applicants__applicant_id__sign_off_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports":{"get":{"summary":"List Reports","operationId":"list_reports_api_docfraud_reports_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"updated","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Direction"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/versions":{"get":{"summary":"Report Versions","operationId":"report_versions_api_docfraud_reports__report_id__versions_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/versions/{version}":{"get":{"summary":"Report Version","operationId":"report_version_api_docfraud_reports__report_id__versions__version__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/versions/{version}/pdf":{"get":{"summary":"Report Pdf","description":"Authenticated stream (Rule D): decrypted in memory, never a presigned URL.","operationId":"report_pdf_api_docfraud_reports__report_id__versions__version__pdf_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/compare":{"get":{"summary":"Report Compare","operationId":"report_compare_api_docfraud_reports__report_id__compare_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"a","in":"query","required":true,"schema":{"type":"integer","title":"A"}},{"name":"b","in":"query","required":true,"schema":{"type":"integer","title":"B"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/notes":{"post":{"summary":"Add Note","operationId":"add_note_api_docfraud_reports__report_id__notes_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/reports/{report_id}/notes/{note_id}":{"put":{"summary":"Edit Note","operationId":"edit_note_api_docfraud_reports__report_id__notes__note_id__put","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/reports":{"get":{"summary":"Admin Reports","description":"Every organization's reports. Listing shows metadata only; opening one\nrequires a typed reason (logged).","operationId":"admin_reports_api_admin_docfraud_reports_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"updated","title":"Sort"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Direction"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/reports/{tenant_id}/{report_id}/open":{"post":{"summary":"Admin Open","operationId":"admin_open_api_admin_docfraud_reports__tenant_id___report_id__open_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/reports/{tenant_id}/{report_id}/versions/{version}/pdf":{"post":{"summary":"Admin Pdf","operationId":"admin_pdf_api_admin_docfraud_reports__tenant_id___report_id__versions__version__pdf_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/reports/{tenant_id}/{report_id}/versions/{version}/qa":{"get":{"summary":"Admin Version Qa","description":"The stored veraPDF verdict and heading check for one version (no content).","operationId":"admin_version_qa_api_admin_docfraud_reports__tenant_id___report_id__versions__version__qa_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/report-template":{"get":{"summary":"Get Template","operationId":"get_template_api_admin_docfraud_report_template_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Template","description":"Template change -> a new template version; every current report gets a\nnew 'Format update, no content change' version. Old versions untouched.","operationId":"put_template_api_admin_docfraud_report_template_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/forms/summary-of-rights":{"get":{"summary":"Summary Of Rights","operationId":"summary_of_rights_api_docfraud_forms_summary_of_rights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/forms/notice-to-users":{"get":{"summary":"Notice To Users","operationId":"notice_to_users_api_docfraud_forms_notice_to_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/red-flags":{"get":{"summary":"Red Flags Mapping","description":"The mapping on screen: each DocFraud signal -> Red Flags category and Supplement A example.","operationId":"red_flags_mapping_api_docfraud_red_flags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/red-flags/mapping.csv":{"get":{"summary":"Red Flags Csv","operationId":"red_flags_csv_api_docfraud_red_flags_mapping_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/red-flags/mapping.pdf":{"get":{"summary":"Red Flags Pdf","operationId":"red_flags_pdf_api_docfraud_red_flags_mapping_pdf_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/compliance":{"get":{"summary":"Compliance Status","operationId":"compliance_status_api_docfraud_compliance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/permissible-purpose":{"post":{"summary":"Confirm Purpose","operationId":"confirm_purpose_api_docfraud_applicants__applicant_id__permissible_purpose_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/adverse-action/notice":{"post":{"summary":"Adverse Notice","operationId":"adverse_notice_api_docfraud_applicants__applicant_id__adverse_action_notice_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/adverse-action/record":{"post":{"summary":"Adverse Record","operationId":"adverse_record_api_docfraud_applicants__applicant_id__adverse_action_record_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/file-requests":{"get":{"summary":"My Requests","operationId":"my_requests_api_docfraud_file_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Submit Request","operationId":"submit_request_api_docfraud_file_requests_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_submit_request_api_docfraud_file_requests_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/file-requests/{request_id}/id":{"post":{"summary":"Replace Id","operationId":"replace_id_api_docfraud_file_requests__request_id__id_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_replace_id_api_docfraud_file_requests__request_id__id_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/my-documents":{"get":{"summary":"My Documents","operationId":"my_documents_api_docfraud_my_documents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/my-documents/{link_id}/documents/{document_id}":{"get":{"summary":"My Document","operationId":"my_document_api_docfraud_my_documents__link_id__documents__document_id__get","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/my-documents/{link_id}/report.pdf":{"get":{"summary":"My Report","operationId":"my_report_api_docfraud_my_documents__link_id__report_pdf_get","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/my-documents/{link_id}/disclosure.pdf":{"get":{"summary":"My Disclosure","operationId":"my_disclosure_api_docfraud_my_documents__link_id__disclosure_pdf_get","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/my-documents/{link_id}/disputes":{"post":{"summary":"Open Dispute","operationId":"open_dispute_api_docfraud_my_documents__link_id__disputes_post","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_open_dispute_api_docfraud_my_documents__link_id__disputes_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/disputes/{dispute_id}/info":{"post":{"summary":"Dispute Info","operationId":"dispute_info_api_docfraud_disputes__dispute_id__info_post","parameters":[{"name":"dispute_id","in":"path","required":true,"schema":{"type":"string","title":"Dispute Id"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_dispute_info_api_docfraud_disputes__dispute_id__info_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/disclosures":{"get":{"summary":"Admin Queue","operationId":"admin_queue_api_admin_docfraud_disclosures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/file-requests/{request_id}/id":{"post":{"summary":"Admin Id","operationId":"admin_id_api_admin_docfraud_file_requests__request_id__id_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/file-requests/{request_id}/decision":{"post":{"summary":"Admin Decide","operationId":"admin_decide_api_admin_docfraud_file_requests__request_id__decision_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/disputes/{dispute_id}/resolve":{"post":{"summary":"Admin Resolve","operationId":"admin_resolve_api_admin_docfraud_disputes__dispute_id__resolve_post","parameters":[{"name":"dispute_id","in":"path","required":true,"schema":{"type":"string","title":"Dispute Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/disclosure-settings":{"put":{"summary":"Admin Settings","operationId":"admin_settings_api_admin_docfraud_disclosure_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/verification":{"get":{"summary":"Admin Verification","operationId":"admin_verification_api_admin_docfraud_verification_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/verification/{tenant_id}":{"post":{"summary":"Admin Verify","operationId":"admin_verify_api_admin_docfraud_verification__tenant_id__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/mfa":{"get":{"summary":"Mfa Status","operationId":"mfa_status_api_admin_docfraud_mfa_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/mfa/enroll":{"post":{"summary":"Mfa Enroll","operationId":"mfa_enroll_api_admin_docfraud_mfa_enroll_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/mfa/confirm":{"post":{"summary":"Mfa Confirm","operationId":"mfa_confirm_api_admin_docfraud_mfa_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/mfa/verify":{"post":{"summary":"Mfa Verify","operationId":"mfa_verify_api_admin_docfraud_mfa_verify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/mfa/reset/{user_id}":{"post":{"summary":"Mfa Reset","description":"Master admin only: clear a locked-out admin's enrollment (logged).","operationId":"mfa_reset_api_admin_docfraud_mfa_reset__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/overview":{"get":{"summary":"Overview","operationId":"overview_api_admin_docfraud_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/subscribers":{"get":{"summary":"Subscribers","operationId":"subscribers_api_admin_docfraud_subscribers_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/subscribers/{tenant_id}":{"get":{"summary":"Subscriber","operationId":"subscriber_api_admin_docfraud_subscribers__tenant_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/subscribers/{tenant_id}/{action}":{"post":{"summary":"Subscriber Action","operationId":"subscriber_action_api_admin_docfraud_subscribers__tenant_id___action__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/order-link":{"post":{"summary":"Order Link","operationId":"order_link_api_admin_docfraud_order_link_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/analysis-settings":{"get":{"summary":"Get Settings","operationId":"get_settings_api_admin_docfraud_analysis_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Settings","operationId":"put_settings_api_admin_docfraud_analysis_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/analysis-settings/rollback/{version}":{"post":{"summary":"Rollback Settings","operationId":"rollback_settings_api_admin_docfraud_analysis_settings_rollback__version__post","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/prompts/{version}":{"get":{"summary":"Get Prompt","operationId":"get_prompt_api_admin_docfraud_prompts__version__get","parameters":[{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/prompts":{"post":{"summary":"Add Prompt","operationId":"add_prompt_api_admin_docfraud_prompts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/prompts-diff":{"get":{"summary":"Prompt Diff","operationId":"prompt_diff_api_admin_docfraud_prompts_diff_get","parameters":[{"name":"a","in":"query","required":true,"schema":{"type":"string","title":"A"}},{"name":"b","in":"query","required":true,"schema":{"type":"string","title":"B"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/retention":{"get":{"summary":"Get Retention","operationId":"get_retention_api_admin_docfraud_retention_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Retention","operationId":"put_retention_api_admin_docfraud_retention_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/legal-hold/{tenant_id}/{applicant_id}":{"post":{"summary":"Legal Hold","operationId":"legal_hold_api_admin_docfraud_legal_hold__tenant_id___applicant_id__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/how-it-works":{"get":{"summary":"Public Docs","description":"Public: the current 'How BLK-AI DocFraud works' sheet (published in Docs, Phase 12).","operationId":"public_docs_api_docfraud_how_it_works_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/subscriber-docs":{"get":{"summary":"Admin Docs","operationId":"admin_docs_api_admin_docfraud_subscriber_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Publish Docs","operationId":"publish_docs_api_admin_docfraud_subscriber_docs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/quality":{"get":{"summary":"Quality Report","operationId":"quality_report_api_admin_docfraud_quality_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/quality/snapshot":{"post":{"summary":"Quality Snapshot","operationId":"quality_snapshot_api_admin_docfraud_quality_snapshot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/quality/settings":{"put":{"summary":"Quality Settings","operationId":"quality_settings_api_admin_docfraud_quality_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/claims/{action}":{"post":{"summary":"Claims","operationId":"claims_api_admin_docfraud_claims__action__post","parameters":[{"name":"action","in":"path","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/audit":{"get":{"summary":"Audit Log","operationId":"audit_log_api_admin_docfraud_audit_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/audit.csv":{"get":{"summary":"Audit Csv","operationId":"audit_csv_api_admin_docfraud_audit_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/mfa":{"get":{"summary":"Member Mfa Status","operationId":"member_mfa_status_api_docfraud_mfa_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/mfa/keepalive":{"post":{"summary":"Member Mfa Keepalive","description":"'Stay signed in' from the timeout warning: counts as activity (WCAG 2.2.1 extend).","operationId":"member_mfa_keepalive_api_docfraud_mfa_keepalive_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/mfa/enroll":{"post":{"summary":"Member Mfa Enroll","operationId":"member_mfa_enroll_api_docfraud_mfa_enroll_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/mfa/confirm":{"post":{"summary":"Member Mfa Confirm","operationId":"member_mfa_confirm_api_docfraud_mfa_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/mfa/verify":{"post":{"summary":"Member Mfa Verify","operationId":"member_mfa_verify_api_docfraud_mfa_verify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/sessions":{"get":{"summary":"My Sessions","operationId":"my_sessions_api_docfraud_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/sessions/sign-out-everywhere":{"post":{"summary":"Sign Out Everywhere","operationId":"sign_out_everywhere_api_docfraud_sessions_sign_out_everywhere_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/sessions/{session_id}/sign-out":{"post":{"summary":"Sign Out One","operationId":"sign_out_one_api_docfraud_sessions__session_id__sign_out_post","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"}}}}}}},"/api/admin/docfraud/security":{"get":{"summary":"Admin Security","operationId":"admin_security_api_admin_docfraud_security_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Security Put","operationId":"admin_security_put_api_admin_docfraud_security_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/anomalies/close":{"post":{"summary":"Admin Close Anomalies","operationId":"admin_close_anomalies_api_admin_docfraud_anomalies_close_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/retention/run":{"post":{"summary":"Admin Run Retention","operationId":"admin_run_retention_api_admin_docfraud_retention_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/member-mfa/reset/{user_id}":{"post":{"summary":"Admin Reset Member Mfa","operationId":"admin_reset_member_mfa_api_admin_docfraud_member_mfa_reset__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/environment-addresses":{"get":{"summary":"Public Addresses","operationId":"public_addresses_api_environment_addresses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/environment-addresses":{"get":{"summary":"Admin List","operationId":"admin_list_api_admin_environment_addresses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Save","operationId":"admin_save_api_admin_environment_addresses_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/environment-addresses/{subdomain}":{"delete":{"summary":"Admin Remove","operationId":"admin_remove_api_admin_environment_addresses__subdomain__delete","parameters":[{"name":"subdomain","in":"path","required":true,"schema":{"type":"string","title":"Subdomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/environment-addresses/{subdomain}/check":{"post":{"summary":"Admin Check","operationId":"admin_check_api_admin_environment_addresses__subdomain__check_post","parameters":[{"name":"subdomain","in":"path","required":true,"schema":{"type":"string","title":"Subdomain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/modal-providers":{"get":{"summary":"Admin Status","operationId":"admin_status_api_admin_modal_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/modal-providers/check":{"post":{"summary":"Admin Check","operationId":"admin_check_api_admin_modal_providers_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/launch":{"get":{"summary":"Launch","description":"Is BLK-AI: Communicate published? The menu, home highlight, BLKSTORE card, Docs and FAQ show it to everyone\nonly when it is (Rule C); admins see them in preview before that. No sign-in needed.","operationId":"launch_api_communicate_launch_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/me":{"get":{"summary":"Me","operationId":"me_api_communicate_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/orgs/{tenant_id}":{"patch":{"summary":"Org Update","operationId":"org_update_api_communicate_orgs__tenant_id__patch","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/members":{"get":{"summary":"Org Members","operationId":"org_members_api_communicate_orgs__tenant_id__members_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/invites":{"post":{"summary":"Org Invite","operationId":"org_invite_api_communicate_orgs__tenant_id__invites_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/invites/{invite_id}":{"delete":{"summary":"Org Invite Revoke","operationId":"org_invite_revoke_api_communicate_orgs__tenant_id__invites__invite_id__delete","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/members/{user_id}":{"patch":{"summary":"Org Member Role","operationId":"org_member_role_api_communicate_orgs__tenant_id__members__user_id__patch","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Org Member Remove","operationId":"org_member_remove_api_communicate_orgs__tenant_id__members__user_id__delete","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/usage":{"get":{"summary":"Org Usage","operationId":"org_usage_api_communicate_orgs__tenant_id__usage_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/keep-on":{"put":{"summary":"Org Keep On","operationId":"org_keep_on_api_communicate_orgs__tenant_id__keep_on_put","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/invites/preview":{"get":{"summary":"Invite Preview","operationId":"invite_preview_api_communicate_invites_preview_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/invites/accept":{"post":{"summary":"Invite Accept","operationId":"invite_accept_api_communicate_invites_accept_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/people/search":{"get":{"summary":"People Search","operationId":"people_search_api_communicate_people_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/people/{user_id}":{"get":{"summary":"People Card","operationId":"people_card_api_communicate_people__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/contacts":{"get":{"summary":"Contacts List","operationId":"contacts_list_api_communicate_contacts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Contacts Add","operationId":"contacts_add_api_communicate_contacts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/media":{"get":{"summary":"Media List","description":"The Communicate media gallery: photos and videos, in order. Public.","operationId":"media_list_api_communicate_media_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/media/{item_id}/file":{"get":{"summary":"Media File","description":"Straight from storage through a short-lived signed link (never through this server's memory).","operationId":"media_file_api_communicate_media__item_id__file_get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/storage":{"get":{"summary":"Storage Summary","description":"How much of the plan's storage is used, what's included, added packs, and whether more can be added (only once full).","operationId":"storage_summary_api_communicate_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/storage/packs":{"post":{"summary":"Storage Buy","description":"Add a storage pack: a prorated invoice, paid with Pay Now; the space exists once the payment is confirmed.","operationId":"storage_buy_api_communicate_storage_packs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/storage/packs/{pack_id}":{"delete":{"summary":"Storage Remove","operationId":"storage_remove_api_communicate_storage_packs__pack_id__delete","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/contacts/{user_id}":{"patch":{"summary":"Contacts Update","operationId":"contacts_update_api_communicate_contacts__user_id__patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Contacts Remove","operationId":"contacts_remove_api_communicate_contacts__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/blocks":{"get":{"summary":"Blocks List","operationId":"blocks_list_api_communicate_blocks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Blocks Add","operationId":"blocks_add_api_communicate_blocks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/blocks/{user_id}":{"delete":{"summary":"Blocks Remove","operationId":"blocks_remove_api_communicate_blocks__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/presence":{"put":{"summary":"Presence Set","operationId":"presence_set_api_communicate_presence_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"Presence Get","operationId":"presence_get_api_communicate_presence_get","parameters":[{"name":"ids","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/presence/ping":{"post":{"summary":"Presence Ping","operationId":"presence_ping_api_communicate_presence_ping_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/orgs/{tenant_id}/meetings":{"post":{"summary":"Meeting Create","operationId":"meeting_create_api_communicate_orgs__tenant_id__meetings_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Meeting List","operationId":"meeting_list_api_communicate_orgs__tenant_id__meetings_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/lobby/{code}":{"get":{"summary":"Meeting Lobby","operationId":"meeting_lobby_api_communicate_meetings_lobby__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/join/{code}":{"post":{"summary":"Meeting Join","operationId":"meeting_join_api_communicate_meetings_join__code__post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/status":{"post":{"summary":"Meeting Status","operationId":"meeting_status_api_communicate_meetings_status_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/meetings/leave":{"post":{"summary":"Meeting Leave","operationId":"meeting_leave_api_communicate_meetings_leave_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/meetings/{meeting_id}/roster":{"get":{"summary":"Meeting Roster","operationId":"meeting_roster_api_communicate_meetings__meeting_id__roster_get","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/admit":{"post":{"summary":"Meeting Admit","operationId":"meeting_admit_api_communicate_meetings__meeting_id__admit_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/settings":{"put":{"summary":"Meeting Settings","operationId":"meeting_settings_api_communicate_meetings__meeting_id__settings_put","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/cohost":{"post":{"summary":"Meeting Cohost","operationId":"meeting_cohost_api_communicate_meetings__meeting_id__cohost_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/mute":{"post":{"summary":"Meeting Mute","operationId":"meeting_mute_api_communicate_meetings__meeting_id__mute_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/remove":{"post":{"summary":"Meeting Remove","operationId":"meeting_remove_api_communicate_meetings__meeting_id__remove_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/rename":{"post":{"summary":"Meeting Rename","operationId":"meeting_rename_api_communicate_meetings__meeting_id__rename_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/end":{"post":{"summary":"Meeting End","operationId":"meeting_end_api_communicate_meetings__meeting_id__end_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/attendance":{"get":{"summary":"Meeting Attendance","operationId":"meeting_attendance_api_communicate_meetings__meeting_id__attendance_get","parameters":[{"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"}}}}}}},"/api/communicate/calls":{"post":{"summary":"Call Start","operationId":"call_start_api_communicate_calls_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/calls/incoming":{"get":{"summary":"Call Incoming","operationId":"call_incoming_api_communicate_calls_incoming_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/calls/{call_id}/answer":{"post":{"summary":"Call Answer","operationId":"call_answer_api_communicate_calls__call_id__answer_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"}}}}}}},"/api/communicate/calls/{call_id}/cancel":{"post":{"summary":"Call Cancel","operationId":"call_cancel_api_communicate_calls__call_id__cancel_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"}}}}}}},"/api/communicate/media/webhook":{"post":{"summary":"Media Webhook","description":"The media server reports joins / leaves / room ends. Signature verified before anything is read.","operationId":"media_webhook_api_communicate_media_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/orgs/{tenant_id}/schedule":{"post":{"summary":"Schedule Create","operationId":"schedule_create_api_communicate_orgs__tenant_id__schedule_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/detail":{"get":{"summary":"Schedule Detail","operationId":"schedule_detail_api_communicate_meetings__meeting_id__detail_get","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/schedule":{"patch":{"summary":"Schedule Update","operationId":"schedule_update_api_communicate_meetings__meeting_id__schedule_patch","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/cancel":{"post":{"summary":"Schedule Cancel","operationId":"schedule_cancel_api_communicate_meetings__meeting_id__cancel_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/calendar.ics":{"get":{"summary":"Schedule Ics","operationId":"schedule_ics_api_communicate_meetings__meeting_id__calendar_ics_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"k","in":"query","required":false,"schema":{"type":"string","default":"","title":"K"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/rsvp":{"get":{"summary":"Rsvp View","operationId":"rsvp_view_api_communicate_rsvp_get","parameters":[{"name":"m","in":"query","required":false,"schema":{"type":"string","default":"","title":"M"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/rsvp":{"post":{"summary":"Rsvp","operationId":"rsvp_api_communicate_meetings__meeting_id__rsvp_post","parameters":[{"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"}}}}}}},"/api/communicate/orgs/{tenant_id}/personal-room":{"get":{"summary":"Personal Room","operationId":"personal_room_api_communicate_orgs__tenant_id__personal_room_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/events":{"get":{"summary":"Events List","description":"Your own events (BLKPhone Digi Calendar), beside /calendar's meetings.","operationId":"events_list_api_communicate_events_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Events Create","operationId":"events_create_api_communicate_events_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/events/{event_id}":{"patch":{"summary":"Events Update","operationId":"events_update_api_communicate_events__event_id__patch","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Events Delete","operationId":"events_delete_api_communicate_events__event_id__delete","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/calendar":{"get":{"summary":"Calendar","operationId":"calendar_api_communicate_calendar_get","parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/booking-page":{"get":{"summary":"Booking Page","operationId":"booking_page_api_communicate_orgs__tenant_id__booking_page_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Booking Page Save","operationId":"booking_page_save_api_communicate_orgs__tenant_id__booking_page_put","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/bookings":{"get":{"summary":"Bookings","operationId":"bookings_api_communicate_orgs__tenant_id__bookings_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/book/{slug}":{"get":{"summary":"Book Page","operationId":"book_page_api_communicate_book__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Book Create","operationId":"book_create_api_communicate_book__slug__post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/book/{slug}/slots":{"get":{"summary":"Book Slots","operationId":"book_slots_api_communicate_book__slug__slots_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}},{"name":"frm","in":"query","required":false,"schema":{"type":"string","default":"","title":"Frm"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","default":"","title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/book/{slug}/manage":{"get":{"summary":"Book Manage","operationId":"book_manage_api_communicate_book__slug__manage_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"b","in":"query","required":false,"schema":{"type":"string","default":"","title":"B"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/book/{slug}/manage/cancel":{"post":{"summary":"Book Cancel","operationId":"book_cancel_api_communicate_book__slug__manage_cancel_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/book/{slug}/manage/reschedule":{"post":{"summary":"Book Reschedule","operationId":"book_reschedule_api_communicate_book__slug__manage_reschedule_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/voice":{"post":{"summary":"Voice Send","description":"A voice message (BLKMessages): recorded in the browser, sent as audio with its length.","operationId":"voice_send_api_communicate_conversations__conv_id__voice_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_voice_send_api_communicate_conversations__conv_id__voice_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/listened":{"post":{"summary":"Voice Listened","operationId":"voice_listened_api_communicate_messages__msg_id__listened_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/keep":{"post":{"summary":"Voice Keep","operationId":"voice_keep_api_communicate_messages__msg_id__keep_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/me/voice-settings":{"get":{"summary":"Voice Settings","operationId":"voice_settings_api_communicate_me_voice_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Voice Settings Set","operationId":"voice_settings_set_api_communicate_me_voice_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/conversations/recently-deleted":{"get":{"summary":"Recently Deleted","operationId":"recently_deleted_api_communicate_conversations_recently_deleted_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/conversations":{"get":{"summary":"Conversations","operationId":"conversations_api_communicate_conversations_get","parameters":[{"name":"view","in":"query","required":false,"schema":{"type":"string","default":"inbox","title":"View"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/dm":{"post":{"summary":"Open Dm","operationId":"open_dm_api_communicate_conversations_dm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/conversations/group":{"post":{"summary":"Create Group","operationId":"create_group_api_communicate_conversations_group_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/orgs/{tenant_id}/channels":{"post":{"summary":"Create Channel","operationId":"create_channel_api_communicate_orgs__tenant_id__channels_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/join":{"post":{"summary":"Join","operationId":"join_api_communicate_conversations__conv_id__join_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/leave":{"post":{"summary":"Leave","operationId":"leave_api_communicate_conversations__conv_id__leave_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/request":{"post":{"summary":"Answer Request","operationId":"answer_request_api_communicate_conversations__conv_id__request_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/members":{"post":{"summary":"Members","operationId":"members_api_communicate_conversations__conv_id__members_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/settings":{"put":{"summary":"Settings","operationId":"settings_api_communicate_conversations__conv_id__settings_put","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/messages":{"get":{"summary":"History","operationId":"history_api_communicate_conversations__conv_id__messages_get","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}},{"name":"before","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Before"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}},{"name":"thread","in":"query","required":false,"schema":{"type":"string","default":"","title":"Thread"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Send","operationId":"send_api_communicate_conversations__conv_id__messages_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/read":{"post":{"summary":"Read","operationId":"read_api_communicate_conversations__conv_id__read_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/typing":{"post":{"summary":"Typing","operationId":"typing_api_communicate_conversations__conv_id__typing_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/files":{"post":{"summary":"Upload","operationId":"upload_api_communicate_conversations__conv_id__files_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_api_communicate_conversations__conv_id__files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/files/{file_id}":{"get":{"summary":"Download","operationId":"download_api_communicate_files__file_id__get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}":{"patch":{"summary":"Edit","operationId":"edit_api_communicate_messages__msg_id__patch","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete","operationId":"delete_api_communicate_messages__msg_id__delete","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/react":{"post":{"summary":"React","operationId":"react_api_communicate_messages__msg_id__react_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/pin":{"post":{"summary":"Pin","operationId":"pin_api_communicate_messages__msg_id__pin_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/report":{"post":{"summary":"Report","operationId":"report_api_communicate_messages__msg_id__report_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/pinned":{"get":{"summary":"Pinned","operationId":"pinned_api_communicate_conversations__conv_id__pinned_get","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/search":{"get":{"summary":"Search","operationId":"search_api_communicate_messages_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"conv","in":"query","required":false,"schema":{"type":"string","default":"","title":"Conv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/chat":{"get":{"summary":"Meeting Chat Get","operationId":"meeting_chat_get_api_communicate_meetings__meeting_id__chat_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Meeting Chat Post","operationId":"meeting_chat_post_api_communicate_meetings__meeting_id__chat_post","parameters":[{"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"}}}}}}},"/api/communicate/ws-ticket":{"post":{"summary":"Ws Ticket","operationId":"ws_ticket_api_communicate_ws_ticket_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/notifications":{"get":{"summary":"Center","operationId":"center_api_communicate_notifications_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}},{"name":"unread","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread"}},{"name":"before","in":"query","required":false,"schema":{"type":"string","default":"","title":"Before"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/notifications/unread":{"get":{"summary":"Unread","operationId":"unread_api_communicate_notifications_unread_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/notifications/read-all":{"post":{"summary":"Read All","operationId":"read_all_api_communicate_notifications_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/notifications/{notification_id}/read":{"post":{"summary":"Read One","operationId":"read_one_api_communicate_notifications__notification_id__read_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/me/export":{"get":{"summary":"My Export","description":"Download everything BLK-AI: Communicate holds about you (C13, row 12.4).","operationId":"my_export_api_communicate_me_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/me/delete-data":{"post":{"summary":"My Delete","operationId":"my_delete_api_communicate_me_delete_data_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/preferences":{"get":{"summary":"Get Prefs","operationId":"get_prefs_api_communicate_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Prefs","operationId":"put_prefs_api_communicate_preferences_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/profile":{"get":{"summary":"Get Profile","operationId":"get_profile_api_communicate_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Profile","operationId":"put_profile_api_communicate_profile_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/orgs/{tenant_id}/classes":{"post":{"summary":"Create","operationId":"create_api_communicate_orgs__tenant_id__classes_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes":{"get":{"summary":"Mine","operationId":"mine_api_communicate_classes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/classes/{class_id}":{"get":{"summary":"Get","operationId":"get_api_communicate_classes__class_id__get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/sessions":{"put":{"summary":"Sessions","operationId":"sessions_api_communicate_classes__class_id__sessions_put","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/archive":{"post":{"summary":"Archive","operationId":"archive_api_communicate_classes__class_id__archive_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/public":{"get":{"summary":"Public","operationId":"public_api_communicate_classes__class_id__public_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/join":{"post":{"summary":"Join","operationId":"join_api_communicate_classes__class_id__join_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/price":{"put":{"summary":"Set Price","operationId":"set_price_api_communicate_classes__class_id__price_put","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/refund/{target}":{"post":{"summary":"Refund","operationId":"refund_api_communicate_classes__class_id__refund__target__post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"target","in":"path","required":true,"schema":{"type":"string","title":"Target"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/earnings":{"get":{"summary":"Earnings","operationId":"earnings_api_communicate_classes__class_id__earnings_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/leave":{"post":{"summary":"Leave","operationId":"leave_api_communicate_classes__class_id__leave_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/roster":{"get":{"summary":"Roster","operationId":"roster_api_communicate_classes__class_id__roster_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/roster/{user_id}":{"put":{"summary":"Set Role","operationId":"set_role_api_communicate_classes__class_id__roster__user_id__put","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Remove","operationId":"remove_api_communicate_classes__class_id__roster__user_id__delete","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/roster/{user_id}/mute":{"post":{"summary":"Mute","operationId":"mute_api_communicate_classes__class_id__roster__user_id__mute_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/chat":{"get":{"summary":"Chat","operationId":"chat_api_communicate_classes__class_id__chat_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"before","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Before"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}},{"name":"thread","in":"query","required":false,"schema":{"type":"string","default":"","title":"Thread"}},{"name":"filter","in":"query","required":false,"schema":{"type":"string","default":"","title":"Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Post","operationId":"post_api_communicate_classes__class_id__chat_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/questions/{msg_id}/answered":{"post":{"summary":"Answered","operationId":"answered_api_communicate_classes__class_id__questions__msg_id__answered_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/attendance":{"get":{"summary":"Attendance","operationId":"attendance_api_communicate_classes__class_id__attendance_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/materials":{"get":{"summary":"Materials","operationId":"materials_api_communicate_classes__class_id__materials_get","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Add Material","operationId":"add_material_api_communicate_classes__class_id__materials_post","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/classes/{class_id}/materials/{material_id}":{"delete":{"summary":"Remove Material","operationId":"remove_material_api_communicate_classes__class_id__materials__material_id__delete","parameters":[{"name":"class_id","in":"path","required":true,"schema":{"type":"string","title":"Class Id"}},{"name":"material_id","in":"path","required":true,"schema":{"type":"string","title":"Material Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/live":{"get":{"summary":"Live","operationId":"live_api_communicate_meetings__meeting_id__live_get","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/hand":{"post":{"summary":"Hand","operationId":"hand_api_communicate_meetings__meeting_id__hand_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/polls":{"post":{"summary":"Poll Create","operationId":"poll_create_api_communicate_meetings__meeting_id__polls_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/polls/{poll_id}/vote":{"post":{"summary":"Poll Vote","operationId":"poll_vote_api_communicate_meetings__meeting_id__polls__poll_id__vote_post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/polls/{poll_id}/set":{"post":{"summary":"Poll Set","operationId":"poll_set_api_communicate_meetings__meeting_id__polls__poll_id__set_post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"poll_id","in":"path","required":true,"schema":{"type":"string","title":"Poll Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/qa":{"post":{"summary":"Qa Ask","operationId":"qa_ask_api_communicate_meetings__meeting_id__qa_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/qa/{q_id}/upvote":{"post":{"summary":"Qa Upvote","operationId":"qa_upvote_api_communicate_meetings__meeting_id__qa__q_id__upvote_post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"q_id","in":"path","required":true,"schema":{"type":"string","title":"Q Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/qa/{q_id}/answer":{"post":{"summary":"Qa Answer","operationId":"qa_answer_api_communicate_meetings__meeting_id__qa__q_id__answer_post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"q_id","in":"path","required":true,"schema":{"type":"string","title":"Q Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/timer":{"post":{"summary":"Timer","operationId":"timer_api_communicate_meetings__meeting_id__timer_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts":{"post":{"summary":"Breakouts Open","operationId":"breakouts_open_api_communicate_meetings__meeting_id__breakouts_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts/choose":{"post":{"summary":"Breakouts Choose","operationId":"breakouts_choose_api_communicate_meetings__meeting_id__breakouts_choose_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts/move":{"post":{"summary":"Breakouts Move","operationId":"breakouts_move_api_communicate_meetings__meeting_id__breakouts_move_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts/broadcast":{"post":{"summary":"Breakouts Broadcast","operationId":"breakouts_broadcast_api_communicate_meetings__meeting_id__breakouts_broadcast_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts/close":{"post":{"summary":"Breakouts Close","operationId":"breakouts_close_api_communicate_meetings__meeting_id__breakouts_close_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/breakouts/visit":{"get":{"summary":"Breakouts Visit","operationId":"breakouts_visit_api_communicate_meetings__meeting_id__breakouts_visit_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"room_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Room Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/whiteboards":{"post":{"summary":"Wb Save","operationId":"wb_save_api_communicate_meetings__meeting_id__whiteboards_post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_wb_save_api_communicate_meetings__meeting_id__whiteboards_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Wb List","operationId":"wb_list_api_communicate_meetings__meeting_id__whiteboards_get","parameters":[{"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"}}}}}}},"/api/communicate/whiteboards/{wb_id}":{"get":{"summary":"Wb Get","operationId":"wb_get_api_communicate_whiteboards__wb_id__get","parameters":[{"name":"wb_id","in":"path","required":true,"schema":{"type":"string","title":"Wb Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/webinars":{"post":{"summary":"Webinar Create","operationId":"webinar_create_api_communicate_orgs__tenant_id__webinars_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/webinars/{meeting_id}/public":{"get":{"summary":"Webinar Public","operationId":"webinar_public_api_communicate_webinars__meeting_id__public_get","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/register":{"post":{"summary":"Webinar Register","operationId":"webinar_register_api_communicate_webinars__meeting_id__register_post","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/join":{"post":{"summary":"Webinar Join","operationId":"webinar_join_api_communicate_webinars__meeting_id__join_post","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/registrations":{"get":{"summary":"Webinar Regs","operationId":"webinar_regs_api_communicate_webinars__meeting_id__registrations_get","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/registrations/{reg_id}":{"post":{"summary":"Webinar Decide","operationId":"webinar_decide_api_communicate_webinars__meeting_id__registrations__reg_id__post","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"reg_id","in":"path","required":true,"schema":{"type":"string","title":"Reg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/webinars/{meeting_id}/state":{"post":{"summary":"Webinar State","operationId":"webinar_state_api_communicate_webinars__meeting_id__state_post","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/report":{"get":{"summary":"Webinar Report","operationId":"webinar_report_api_communicate_webinars__meeting_id__report_get","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/stream":{"post":{"summary":"Stream Start","operationId":"stream_start_api_communicate_webinars__meeting_id__stream_post","parameters":[{"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"}}}}}}},"/api/communicate/webinars/{meeting_id}/stream/stop":{"post":{"summary":"Stream Stop","operationId":"stream_stop_api_communicate_webinars__meeting_id__stream_stop_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/recording-status":{"get":{"summary":"Rec Status","operationId":"rec_status_api_communicate_meetings__meeting_id__recording_status_get","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/consent":{"post":{"summary":"Consent","operationId":"consent_api_communicate_meetings__meeting_id__consent_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/recording/start":{"post":{"summary":"Rec Start","operationId":"rec_start_api_communicate_meetings__meeting_id__recording_start_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/recording/stop":{"post":{"summary":"Rec Stop","operationId":"rec_stop_api_communicate_meetings__meeting_id__recording_stop_post","parameters":[{"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"}}}}}}},"/api/communicate/orgs/{tenant_id}/recordings":{"get":{"summary":"Rec List","operationId":"rec_list_api_communicate_orgs__tenant_id__recordings_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/recordings/{rec_id}":{"get":{"summary":"Rec Get","operationId":"rec_get_api_communicate_recordings__rec_id__get","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Rec Update","operationId":"rec_update_api_communicate_recordings__rec_id__patch","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Rec Delete","operationId":"rec_delete_api_communicate_recordings__rec_id__delete","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/recordings/{rec_id}/play-link":{"get":{"summary":"Rec Play Link","operationId":"rec_play_link_api_communicate_recordings__rec_id__play_link_get","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/recordings/{rec_id}/stream":{"get":{"summary":"Rec Stream","operationId":"rec_stream_api_communicate_recordings__rec_id__stream_get","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}},{"name":"st","in":"query","required":false,"schema":{"type":"string","default":"","title":"St"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/captions":{"post":{"summary":"Captions Set","operationId":"captions_set_api_communicate_meetings__meeting_id__captions_post","parameters":[{"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"}}}}}},"get":{"summary":"Captions Live","operationId":"captions_live_api_communicate_meetings__meeting_id__captions_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/captions/ingest":{"post":{"summary":"Captions Ingest","operationId":"captions_ingest_api_communicate_captions_ingest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/meetings/{meeting_id}/transcript":{"get":{"summary":"Transcript Json","operationId":"transcript_json_api_communicate_meetings__meeting_id__transcript_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"session","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/transcript.{fmt}":{"get":{"summary":"Transcript File","operationId":"transcript_file_api_communicate_meetings__meeting_id__transcript__fmt__get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}},{"name":"session","in":"query","required":false,"schema":{"type":"integer","default":-1,"title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/transcripts/search":{"get":{"summary":"Transcript Search","operationId":"transcript_search_api_communicate_transcripts_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/admin-storage":{"get":{"summary":"Admin Storage List","description":"The master and the admins with the BLK-AI: Communicate section: what each stores and their storage.","operationId":"admin_storage_list_api_admin_communicate_admin_storage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/admin-storage/{user_id}":{"put":{"summary":"Admin Storage Set","description":"Master only: any amount of storage, in GB, for an admin with the section or for the master; empty = the default.","operationId":"admin_storage_set_api_admin_communicate_admin_storage__user_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/admin-plans":{"get":{"summary":"Admin Plans List","description":"Each admin with the section (and the master): their BBAIS plan, team members and storage.","operationId":"admin_plans_list_api_admin_communicate_admin_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/admin-plans/{user_id}":{"put":{"summary":"Admin Plans Set","description":"Master only: {tier, seats (empty = unlimited), storage_gb (empty = keep)}.","operationId":"admin_plans_set_api_admin_communicate_admin_plans__user_id__put","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Plans Remove","operationId":"admin_plans_remove_api_admin_communicate_admin_plans__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/media":{"get":{"summary":"Admin Media List","operationId":"admin_media_list_api_admin_communicate_media_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Media Add","operationId":"admin_media_add_api_admin_communicate_media_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_media_add_api_admin_communicate_media_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/media/{item_id}":{"patch":{"summary":"Admin Media Edit","operationId":"admin_media_edit_api_admin_communicate_media__item_id__patch","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Media Remove","operationId":"admin_media_remove_api_admin_communicate_media__item_id__delete","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/media/{item_id}/move":{"post":{"summary":"Admin Media Move","operationId":"admin_media_move_api_admin_communicate_media__item_id__move_post","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/inbox":{"get":{"summary":"Desk Inbox","operationId":"desk_inbox_api_admin_communicate_desk_inbox_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"mine","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Mine"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/members":{"get":{"summary":"Desk Find","operationId":"desk_find_api_admin_communicate_desk_members_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/staff":{"get":{"summary":"Desk Staff","operationId":"desk_staff_api_admin_communicate_desk_staff_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/desk/members/{user_id}":{"get":{"summary":"Desk Member","operationId":"desk_member_api_admin_communicate_desk_members__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/members/{user_id}/message":{"post":{"summary":"Desk Message","operationId":"desk_message_api_admin_communicate_desk_members__user_id__message_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/members/{user_id}/call":{"post":{"summary":"Desk Call","operationId":"desk_call_api_admin_communicate_desk_members__user_id__call_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/members/{user_id}/notes":{"post":{"summary":"Desk Note","operationId":"desk_note_api_admin_communicate_desk_members__user_id__notes_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/desk/conversations/{conv_id}":{"get":{"summary":"Desk Conv","operationId":"desk_conv_api_admin_communicate_desk_conversations__conv_id__get","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Since"}},{"name":"before","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Before"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Desk Update","operationId":"desk_update_api_admin_communicate_desk_conversations__conv_id__patch","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/support":{"post":{"summary":"Member Support","description":"Help -> Message BBAIS Support: the member's own support conversation (opened in their Messages).","operationId":"member_support_api_communicate_support_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/broadcasts":{"get":{"summary":"Bc List","operationId":"bc_list_api_admin_communicate_broadcasts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Bc Send","operationId":"bc_send_api_admin_communicate_broadcasts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/broadcasts/preview":{"post":{"summary":"Bc Preview","operationId":"bc_preview_api_admin_communicate_broadcasts_preview_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/overview":{"get":{"summary":"Overview","operationId":"overview_api_admin_communicate_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/quality":{"get":{"summary":"Quality","operationId":"quality_api_admin_communicate_quality_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/organizations":{"get":{"summary":"Organizations","operationId":"organizations_api_admin_communicate_organizations_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/organizations/{tenant_id}":{"get":{"summary":"Organization","operationId":"organization_api_admin_communicate_organizations__tenant_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/organizations/{tenant_id}/legal-hold":{"post":{"summary":"Org Hold","operationId":"org_hold_api_admin_communicate_organizations__tenant_id__legal_hold_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/recordings":{"get":{"summary":"Recs","operationId":"recs_api_admin_communicate_recordings_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"hold","in":"query","required":false,"schema":{"type":"string","default":"","title":"Hold"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/recordings/{rec_id}/legal-hold":{"post":{"summary":"Rec Hold","operationId":"rec_hold_api_admin_communicate_recordings__rec_id__legal_hold_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/recordings/{rec_id}/open":{"post":{"summary":"Rec Open","operationId":"rec_open_api_admin_communicate_recordings__rec_id__open_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/reports":{"get":{"summary":"Reports","operationId":"reports_api_admin_communicate_reports_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"open","title":"Status"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/reports/{report_id}/open":{"post":{"summary":"Report Open","operationId":"report_open_api_admin_communicate_reports__report_id__open_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/reports/{report_id}/resolve":{"post":{"summary":"Report Resolve","operationId":"report_resolve_api_admin_communicate_reports__report_id__resolve_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/communicate/switches":{"get":{"summary":"Get Switches","operationId":"get_switches_api_admin_communicate_switches_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Switches","operationId":"put_switches_api_admin_communicate_switches_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/communicate/audit":{"get":{"summary":"Audit","operationId":"audit_api_admin_communicate_audit_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Tenant Id"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/invite":{"post":{"summary":"Invite","operationId":"invite_api_communicate_meetings__meeting_id__blkai_invite_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/dismiss":{"post":{"summary":"Dismiss","operationId":"dismiss_api_communicate_meetings__meeting_id__blkai_dismiss_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai":{"get":{"summary":"Status","operationId":"status_api_communicate_meetings__meeting_id__blkai_get","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/ask":{"post":{"summary":"Ask","operationId":"ask_api_communicate_meetings__meeting_id__blkai_ask_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/notes":{"post":{"summary":"Notes","operationId":"notes_api_communicate_meetings__meeting_id__blkai_notes_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/catch-up":{"post":{"summary":"Catch Up","operationId":"catch_up_api_communicate_meetings__meeting_id__blkai_catch_up_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/read":{"post":{"summary":"Read","operationId":"read_api_communicate_meetings__meeting_id__blkai_read_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/summary":{"post":{"summary":"Summary","operationId":"summary_api_communicate_meetings__meeting_id__blkai_summary_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/followup":{"post":{"summary":"Followup","operationId":"followup_api_communicate_meetings__meeting_id__blkai_followup_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/prep":{"post":{"summary":"Prep","operationId":"prep_api_communicate_meetings__meeting_id__blkai_prep_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/intake":{"post":{"summary":"Intake","operationId":"intake_api_communicate_meetings__meeting_id__blkai_intake_post","parameters":[{"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"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/outputs":{"get":{"summary":"Outputs","operationId":"outputs_api_communicate_meetings__meeting_id__blkai_outputs_get","parameters":[{"name":"meeting_id","in":"path","required":true,"schema":{"type":"string","title":"Meeting Id"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"summary","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/recordings/{rec_id}/chapters":{"post":{"summary":"Chapters","operationId":"chapters_api_communicate_recordings__rec_id__chapters_post","parameters":[{"name":"rec_id","in":"path","required":true,"schema":{"type":"string","title":"Rec Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/blkai/ask-past":{"post":{"summary":"Ask Past","operationId":"ask_past_api_communicate_orgs__tenant_id__blkai_ask_past_post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/orgs/{tenant_id}/client-notes":{"get":{"summary":"Client Notes","operationId":"client_notes_api_communicate_orgs__tenant_id__client_notes_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}},{"name":"email","in":"query","required":false,"schema":{"type":"string","default":"","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/action-items":{"get":{"summary":"Action Items","operationId":"action_items_api_communicate_action_items_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"open","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/action-items/{item_id}":{"post":{"summary":"Action Item","operationId":"action_item_api_communicate_action_items__item_id__post","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/blkai/study":{"post":{"summary":"Study","operationId":"study_api_communicate_meetings__meeting_id__blkai_study_post","parameters":[{"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"}}}}}}},"/api/communicate/blkai/outputs/{output_id}/share":{"post":{"summary":"Share","operationId":"share_api_communicate_blkai_outputs__output_id__share_post","parameters":[{"name":"output_id","in":"path","required":true,"schema":{"type":"string","title":"Output Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/meetings/{meeting_id}/engagement":{"get":{"summary":"Engagement Report","operationId":"engagement_report_api_communicate_meetings__meeting_id__engagement_get","parameters":[{"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"}}}}}}},"/api/communicate/quickcom":{"get":{"summary":"Home","operationId":"home_api_communicate_quickcom_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/quickcom/recents":{"get":{"summary":"Recents","description":"The call history (paged with `before`).","operationId":"recents_api_communicate_quickcom_recents_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"type":"string","default":"","title":"Before"}},{"name":"with_user","in":"query","required":false,"schema":{"type":"string","default":"","title":"With User"}},{"name":"missed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Missed"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Recents Clear","operationId":"recents_clear_api_communicate_quickcom_recents_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/quickcom/recents/{key}":{"delete":{"summary":"Recents Hide","operationId":"recents_hide_api_communicate_quickcom_recents__key__delete","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/quickcom/call":{"post":{"summary":"Call","operationId":"call_api_communicate_quickcom_call_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/quickcom/group-call":{"post":{"summary":"Group Call","operationId":"group_call_api_communicate_quickcom_group_call_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/gallery":{"get":{"summary":"Listing","operationId":"listing_api_communicate_gallery_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"before","in":"query","required":false,"schema":{"type":"string","default":"","title":"Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Add","operationId":"add_api_communicate_gallery_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_api_communicate_gallery_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/gallery/from-message/{file_id}":{"post":{"summary":"From Message","operationId":"from_message_api_communicate_gallery_from_message__file_id__post","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/gallery/{item_id}/link":{"get":{"summary":"Link","operationId":"link_api_communicate_gallery__item_id__link_get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/gallery/{item_id}/file":{"get":{"summary":"File","operationId":"file_api_communicate_gallery__item_id__file_get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/gallery/{item_id}/send":{"post":{"summary":"Send","operationId":"send_api_communicate_gallery__item_id__send_post","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/gallery/{item_id}":{"delete":{"summary":"Delete","operationId":"delete_api_communicate_gallery__item_id__delete","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/blkfiles":{"get":{"summary":"Files Listing","operationId":"files_listing_api_communicate_blkfiles_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"before","in":"query","required":false,"schema":{"type":"string","default":"","title":"Before"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Files Add","operationId":"files_add_api_communicate_blkfiles_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_files_add_api_communicate_blkfiles_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/hide":{"post":{"summary":"Hide","operationId":"hide_api_communicate_conversations__conv_id__hide_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/pin":{"post":{"summary":"Pin","operationId":"pin_api_communicate_conversations__conv_id__pin_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/delete-for-me":{"post":{"summary":"Conv Delete","operationId":"conv_delete_api_communicate_conversations__conv_id__delete_for_me_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/conversations/{conv_id}/restore":{"post":{"summary":"Conv Restore","operationId":"conv_restore_api_communicate_conversations__conv_id__restore_post","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/delete-for-me":{"post":{"summary":"Msg Delete","operationId":"msg_delete_api_communicate_messages__msg_id__delete_for_me_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/messages/{msg_id}/restore":{"post":{"summary":"Msg Restore","operationId":"msg_restore_api_communicate_messages__msg_id__restore_post","parameters":[{"name":"msg_id","in":"path","required":true,"schema":{"type":"string","title":"Msg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/contacts/{contact_id}/photo":{"put":{"summary":"Photo Set","operationId":"photo_set_api_communicate_contacts__contact_id__photo_put","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_photo_set_api_communicate_contacts__contact_id__photo_put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Photo Get","operationId":"photo_get_api_communicate_contacts__contact_id__photo_get","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Photo Clear","operationId":"photo_clear_api_communicate_contacts__contact_id__photo_delete","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/blkphone/invite":{"get":{"summary":"Invite Link","operationId":"invite_link_api_communicate_blkphone_invite_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/blkphone/invite/{code}":{"get":{"summary":"Invite Preview","operationId":"invite_preview_api_communicate_blkphone_invite__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/blkphone/invite/{code}/accept":{"post":{"summary":"Invite Accept","operationId":"invite_accept_api_communicate_blkphone_invite__code__accept_post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/mail":{"get":{"summary":"Status","operationId":"status_api_communicate_mail_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/mail/google/connect":{"get":{"summary":"Connect","operationId":"connect_api_communicate_mail_google_connect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/mail/google/callback":{"get":{"summary":"Callback","operationId":"callback_api_communicate_mail_google_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/mail/google":{"delete":{"summary":"Disconnect","operationId":"disconnect_api_communicate_mail_google_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/mail/send":{"post":{"summary":"Send","operationId":"send_api_communicate_mail_send_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/mail/sent":{"get":{"summary":"Sent","operationId":"sent_api_communicate_mail_sent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/weather":{"get":{"summary":"Forecast","operationId":"forecast_api_communicate_weather_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"string","default":"","title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"type":"string","default":"","title":"Lon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/weather/name":{"get":{"summary":"Name","operationId":"name_api_communicate_weather_name_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"type":"string","default":"","title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"type":"string","default":"","title":"Lon"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/weather/search":{"get":{"summary":"Search","operationId":"search_api_communicate_weather_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/weather/places":{"get":{"summary":"Places","operationId":"places_api_communicate_weather_places_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Place","operationId":"add_place_api_communicate_weather_places_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/weather/places/{place_id}":{"delete":{"summary":"Remove Place","operationId":"remove_place_api_communicate_weather_places__place_id__delete","parameters":[{"name":"place_id","in":"path","required":true,"schema":{"type":"string","title":"Place Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/register":{"post":{"summary":"Register","operationId":"register_api_communicate_devices_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/communicate/devices":{"get":{"summary":"Listing","operationId":"listing_api_communicate_devices_get","parameters":[{"name":"me","in":"query","required":false,"schema":{"type":"string","default":"","title":"Me"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/find":{"put":{"summary":"Set Find","operationId":"set_find_api_communicate_devices__device_id__find_put","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}":{"patch":{"summary":"Rename","operationId":"rename_api_communicate_devices__device_id__patch","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/report":{"post":{"summary":"Report","operationId":"report_api_communicate_devices__device_id__report_post","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/ask":{"post":{"summary":"Ask","operationId":"ask_api_communicate_devices__device_id__ask_post","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/pending":{"get":{"summary":"Pending","operationId":"pending_api_communicate_devices__device_id__pending_get","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/sound-done":{"post":{"summary":"Sound Done","operationId":"sound_done_api_communicate_devices__device_id__sound_done_post","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/communicate/devices/{device_id}/sign-out":{"post":{"summary":"Sign Out","operationId":"sign_out_api_communicate_devices__device_id__sign_out_post","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/push/key":{"get":{"summary":"Key","operationId":"key_api_push_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/subscribe":{"post":{"summary":"Subscribe","operationId":"subscribe_api_push_subscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Unsubscribe","operationId":"unsubscribe_api_push_subscribe_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/test":{"post":{"summary":"Test","description":"Send a test push to this member's devices now and say what happened (not only \"queued\").","operationId":"test_api_push_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/decline/{token}":{"post":{"summary":"Decline","operationId":"decline_api_push_decline__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/features":{"get":{"summary":"Features","description":"What Docs, FAQ, the pricing chart and the store may mention (Rule J:\nnothing is advertised before it works and is switched on).","operationId":"features_api_docfraud_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/ssn-verification":{"get":{"summary":"Dealer Status","operationId":"dealer_status_api_docfraud_ssn_verification_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/ssn-verification/certify":{"post":{"summary":"Dealer Certify","operationId":"dealer_certify_api_docfraud_ssn_verification_certify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/docfraud/applicants/{applicant_id}/ssn-verification":{"get":{"summary":"Applicant View","operationId":"applicant_view_api_docfraud_applicants__applicant_id__ssn_verification_get","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/ssn-verification/consent-request":{"post":{"summary":"Consent Request","operationId":"consent_request_api_docfraud_applicants__applicant_id__ssn_verification_consent_request_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/applicants/{applicant_id}/ssn-verification/check":{"post":{"summary":"Check","operationId":"check_api_docfraud_applicants__applicant_id__ssn_verification_check_post","parameters":[{"name":"applicant_id","in":"path","required":true,"schema":{"type":"string","title":"Applicant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}":{"get":{"summary":"Link View","operationId":"link_view_api_docfraud_public_ssn_consent__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}/consent/start":{"post":{"summary":"Link Consent Start","operationId":"link_consent_start_api_docfraud_public_ssn_consent__token__consent_start_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}/consent":{"post":{"summary":"Link Consent Accept","operationId":"link_consent_accept_api_docfraud_public_ssn_consent__token__consent_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}/view":{"get":{"summary":"Link Document View","operationId":"link_document_view_api_docfraud_public_ssn_consent__token__view_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}/pdf":{"get":{"summary":"Link Document Pdf","operationId":"link_document_pdf_api_docfraud_public_ssn_consent__token__pdf_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docfraud/public/ssn-consent/{token}/sign":{"post":{"summary":"Link Sign","operationId":"link_sign_api_docfraud_public_ssn_consent__token__sign_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/ecbsv":{"get":{"summary":"Admin View","operationId":"admin_view_api_admin_docfraud_ecbsv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Save","operationId":"admin_save_api_admin_docfraud_ecbsv_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/docfraud/ecbsv/agreement":{"get":{"summary":"Admin Agreement Download","operationId":"admin_agreement_download_api_admin_docfraud_ecbsv_agreement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Agreement Upload","operationId":"admin_agreement_upload_api_admin_docfraud_ecbsv_agreement_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_agreement_upload_api_admin_docfraud_ecbsv_agreement_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/ecbsv/dealers/{tenant_id}":{"post":{"summary":"Admin Dealer","operationId":"admin_dealer_api_admin_docfraud_ecbsv_dealers__tenant_id__post","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docfraud/ecbsv/export":{"get":{"summary":"Admin Export","operationId":"admin_export_api_admin_docfraud_ecbsv_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/{product_key}/chart":{"get":{"summary":"Chart","operationId":"chart_api_saas__product_key__chart_get","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/me/visibility":{"get":{"summary":"My Visibility","description":"Which SaaS dashboard tabs this member sees: BOTH, always. Every signed-in\nmember gets the BLK-AI: DocFraud Prevention tab (subscribers get the\nworkspace, everyone else the overview, pricing and Request My Documents --\nPhase 8 step 5) and SaaS Receipts (empty until there is a charge). They were\nwrongly hidden while the product was a draft.","operationId":"my_visibility_api_saas_me_visibility_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/saas/{product_key}/checkout":{"post":{"summary":"Checkout Open","operationId":"checkout_open_api_saas__product_key__checkout_post","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/seats":{"post":{"summary":"Order Seats","operationId":"order_seats_api_saas_orders__order_id__seats_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}":{"get":{"summary":"Order Get","operationId":"order_get_api_saas_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/details":{"post":{"summary":"Order Details","operationId":"order_details_api_saas_orders__order_id__details_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/consent":{"post":{"summary":"Order Consent","operationId":"order_consent_api_saas_orders__order_id__consent_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/contracts":{"post":{"summary":"Order Contracts","operationId":"order_contracts_api_saas_orders__order_id__contracts_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/paypal":{"post":{"summary":"Order Paypal","operationId":"order_paypal_api_saas_orders__order_id__paypal_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/pay-first-month":{"post":{"summary":"Order Pay First Month","description":"Manual billing: a one-time PayPal payment for the first month.","operationId":"order_pay_first_month_api_saas_orders__order_id__pay_first_month_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/orders/{order_id}/pay-first-month/capture":{"post":{"summary":"Order Capture First Month","operationId":"order_capture_first_month_api_saas_orders__order_id__pay_first_month_capture_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/subscriptions/{subscription_id}/pay-ahead":{"get":{"summary":"Pay Ahead View","description":"Pay Subscription: the next 12 months, their dates and prices.","operationId":"pay_ahead_view_api_saas_subscriptions__subscription_id__pay_ahead_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Pay Ahead Start","operationId":"pay_ahead_start_api_saas_subscriptions__subscription_id__pay_ahead_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/prepayments/{prepay_id}/capture":{"post":{"summary":"Pay Ahead Capture","operationId":"pay_ahead_capture_api_saas_prepayments__prepay_id__capture_post","parameters":[{"name":"prepay_id","in":"path","required":true,"schema":{"type":"string","title":"Prepay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/paypal/return":{"get":{"summary":"Paypal Return","description":"Never provisions anything: the verified webhook does that.","operationId":"paypal_return_api_saas_paypal_return_get","parameters":[{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"","title":"Order"}},{"name":"cancelled","in":"query","required":false,"schema":{"type":"string","default":"","title":"Cancelled"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents":{"get":{"summary":"My Documents","operationId":"my_documents_api_saas_documents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/saas/documents/{envelope_id}":{"get":{"summary":"My Document","operationId":"my_document_api_saas_documents__envelope_id__get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/consent/start":{"post":{"summary":"Consent Start","operationId":"consent_start_api_saas_documents__envelope_id__consent_start_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/consent":{"post":{"summary":"Consent Accept","operationId":"consent_accept_api_saas_documents__envelope_id__consent_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/pdf":{"get":{"summary":"Document Pdf","operationId":"document_pdf_api_saas_documents__envelope_id__pdf_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/view":{"get":{"summary":"Document View","operationId":"document_view_api_saas_documents__envelope_id__view_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/sign":{"post":{"summary":"Document Sign","operationId":"document_sign_api_saas_documents__envelope_id__sign_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/documents/{envelope_id}/executed.pdf":{"get":{"summary":"Executed Pdf","operationId":"executed_pdf_api_saas_documents__envelope_id__executed_pdf_get","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/me/subscriptions":{"get":{"summary":"My Subscriptions","operationId":"my_subscriptions_api_saas_me_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/saas/subscriptions/{subscription_id}/cancel-preview":{"get":{"summary":"Cancel Preview","operationId":"cancel_preview_api_saas_subscriptions__subscription_id__cancel_preview_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/subscriptions/{subscription_id}/cancel":{"post":{"summary":"Cancel","operationId":"cancel_api_saas_subscriptions__subscription_id__cancel_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/subscriptions/{subscription_id}/change-options":{"get":{"summary":"Change Options","operationId":"change_options_api_saas_subscriptions__subscription_id__change_options_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/subscriptions/{subscription_id}/change":{"post":{"summary":"Change Start","operationId":"change_start_api_saas_subscriptions__subscription_id__change_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/subscriptions/{subscription_id}/seats":{"post":{"summary":"Seats Buy","description":"Add team seats: a prorated invoice, paid like any invoice (Pay Now). The\nseats exist once the payment is confirmed.","operationId":"seats_buy_api_saas_subscriptions__subscription_id__seats_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/invoices/{invoice_id}/cancel":{"post":{"summary":"Seats Cancel","operationId":"seats_cancel_api_saas_invoices__invoice_id__cancel_post","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/changes/{change_id}":{"get":{"summary":"Change Get","operationId":"change_get_api_saas_changes__change_id__get","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/changes/{change_id}/paypal":{"post":{"summary":"Change Paypal","operationId":"change_paypal_api_saas_changes__change_id__paypal_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/invoices/{invoice_id}/pay":{"post":{"summary":"Invoice Pay","description":"Pay Now: a one-time PayPal order for an open invoice (fee or proration).","operationId":"invoice_pay_api_saas_invoices__invoice_id__pay_post","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/invoices/{invoice_id}/capture":{"post":{"summary":"Invoice Capture","operationId":"invoice_capture_api_saas_invoices__invoice_id__capture_post","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/receipts":{"get":{"summary":"Receipts List","operationId":"receipts_list_api_saas_receipts_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"-paid_at","title":"Sort"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/receipts/export":{"get":{"summary":"Receipts Export","operationId":"receipts_export_api_saas_receipts_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/receipts/{receipt_no}/versions":{"get":{"summary":"Receipt Versions","operationId":"receipt_versions_api_saas_receipts__receipt_no__versions_get","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/saas/receipts/{receipt_no}/v/{version}.pdf":{"get":{"summary":"Receipt Pdf","operationId":"receipt_pdf_api_saas_receipts__receipt_no__v__version__pdf_get","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/products":{"get":{"summary":"Admin Products","operationId":"admin_products_api_admin_saas_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/saas/products/{product_key}":{"get":{"summary":"Admin Product","operationId":"admin_product_api_admin_saas_products__product_key__get","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/products/{product_key}/draft":{"put":{"summary":"Admin Save Draft","operationId":"admin_save_draft_api_admin_saas_products__product_key__draft_put","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/products/{product_key}/publish":{"post":{"summary":"Admin Publish","operationId":"admin_publish_api_admin_saas_products__product_key__publish_post","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/products/{product_key}/rollback":{"post":{"summary":"Admin Rollback","operationId":"admin_rollback_api_admin_saas_products__product_key__rollback_post","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/products/{product_key}/sync-plans":{"post":{"summary":"Admin Sync Plans","operationId":"admin_sync_plans_api_admin_saas_products__product_key__sync_plans_post","parameters":[{"name":"product_key","in":"path","required":true,"schema":{"type":"string","title":"Product Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/templates":{"get":{"summary":"Admin Templates","operationId":"admin_templates_api_admin_saas_templates_get","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/templates/{key}/{version}/reviewed":{"post":{"summary":"Admin Template Reviewed","operationId":"admin_template_reviewed_api_admin_saas_templates__key___version__reviewed_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"version","in":"path","required":true,"schema":{"type":"string","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/settings":{"get":{"summary":"Admin Settings","operationId":"admin_settings_api_admin_saas_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Settings Save","operationId":"admin_settings_save_api_admin_saas_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/saas/billing-mode":{"put":{"summary":"Admin Billing Mode","description":"Manual (pay each month through PayPal checkout) or automatic (PayPal\nSubscriptions). Applies to NEW signups; existing subscriptions keep the\nmode they started with. Master admin only.","operationId":"admin_billing_mode_api_admin_saas_billing_mode_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/saas/metering":{"put":{"summary":"Admin Metering Save","description":"Update 01 U3 step 7: how many monthly-quota interactions one SSN\nverification check uses (default 1).","operationId":"admin_metering_save_api_admin_saas_metering_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/saas/tax-rates/{state}":{"put":{"summary":"Admin Tax Rate","operationId":"admin_tax_rate_api_admin_saas_tax_rates__state__put","parameters":[{"name":"state","in":"path","required":true,"schema":{"type":"string","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/subscriptions":{"get":{"summary":"Admin Subscriptions","operationId":"admin_subscriptions_api_admin_saas_subscriptions_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/receipts":{"get":{"summary":"Admin Receipts","operationId":"admin_receipts_api_admin_saas_receipts_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"user_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"User Id"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","default":"","title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","default":"","title":"End"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/receipts/{receipt_no}/reissue":{"post":{"summary":"Admin Reissue","operationId":"admin_reissue_api_admin_saas_receipts__receipt_no__reissue_post","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/receipts/{receipt_no}/refund":{"post":{"summary":"Admin Refund","description":"Refund a charge through PayPal. Master admin only.","operationId":"admin_refund_api_admin_saas_receipts__receipt_no__refund_post","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/receipts/{receipt_no}/v/{version}.pdf":{"get":{"summary":"Admin Receipt Pdf","operationId":"admin_receipt_pdf_api_admin_saas_receipts__receipt_no__v__version__pdf_get","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/contracts":{"get":{"summary":"Admin Contracts","operationId":"admin_contracts_api_admin_saas_contracts_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/saas/documents/{envelope_id}/countersign":{"post":{"summary":"Admin Countersign","description":"BBAIS countersigns from the master account -- its own session, like Land.","operationId":"admin_countersign_api_admin_saas_documents__envelope_id__countersign_post","parameters":[{"name":"envelope_id","in":"path","required":true,"schema":{"type":"string","title":"Envelope Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/me":{"get":{"summary":"Onboarding Me","operationId":"onboarding_me_api_admin_onboarding_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/activity/ping":{"post":{"summary":"Onboarding Ping","operationId":"onboarding_ping_api_admin_onboarding_activity_ping_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/reactivation-request":{"post":{"summary":"Reactivation Request","operationId":"reactivation_request_api_admin_onboarding_reactivation_request_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/lock-reasons":{"get":{"summary":"Lock Reasons","operationId":"lock_reasons_api_admin_onboarding_lock_reasons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/people":{"get":{"summary":"People","operationId":"people_api_admin_onboarding_people_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/people/{user_id}/lock":{"post":{"summary":"People Lock","operationId":"people_lock_api_admin_onboarding_people__user_id__lock_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/unlock":{"post":{"summary":"People Unlock","operationId":"people_unlock_api_admin_onboarding_people__user_id__unlock_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/reactivate":{"post":{"summary":"People Reactivate","operationId":"people_reactivate_api_admin_onboarding_people__user_id__reactivate_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/exempt":{"post":{"summary":"People Exempt","operationId":"people_exempt_api_admin_onboarding_people__user_id__exempt_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/training-required":{"post":{"summary":"People Training Required","operationId":"people_training_required_api_admin_onboarding_people__user_id__training_required_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/manager":{"post":{"summary":"People Manager","operationId":"people_manager_api_admin_onboarding_people__user_id__manager_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/audit":{"get":{"summary":"Onboarding Audit","operationId":"onboarding_audit_api_admin_onboarding_audit_get","parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/settings":{"get":{"summary":"Get Settings","operationId":"get_settings_api_admin_onboarding_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Settings","operationId":"put_settings_api_admin_onboarding_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/verification":{"get":{"summary":"My Verification","operationId":"my_verification_api_admin_onboarding_verification_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/verification/upload":{"post":{"summary":"My Upload","operationId":"my_upload_api_admin_onboarding_verification_upload_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/verification/bg-authorization":{"post":{"summary":"My Bg Authorization","operationId":"my_bg_authorization_api_admin_onboarding_verification_bg_authorization_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/verification/adverse/{case_id}/respond":{"post":{"summary":"My Adverse Response","operationId":"my_adverse_response_api_admin_onboarding_verification_adverse__case_id__respond_post","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/verification/documents/{doc_id}/link":{"post":{"summary":"My Document Link","description":"The subject's own report, while a case about it is open (FCRA copy).","operationId":"my_document_link_api_admin_onboarding_verification_documents__doc_id__link_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/agreement":{"post":{"summary":"My Agreement","operationId":"my_agreement_api_admin_onboarding_agreement_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/profile":{"get":{"summary":"My Profile","operationId":"my_profile_api_admin_onboarding_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"My Profile Save","operationId":"my_profile_save_api_admin_onboarding_profile_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/w9/form":{"get":{"summary":"W9 Form","operationId":"w9_form_api_admin_onboarding_w9_form_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/w9":{"post":{"summary":"My W9","operationId":"my_w9_api_admin_onboarding_w9_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/signed/{which}.pdf":{"get":{"summary":"My Signed Copy","description":"The contractor's own fully signed agreement / authorization.","operationId":"my_signed_copy_api_admin_onboarding_signed__which__pdf_get","parameters":[{"name":"which","in":"path","required":true,"schema":{"type":"string","title":"Which"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/signed/{which}.pdf":{"get":{"summary":"Person Signed Copy","operationId":"person_signed_copy_api_admin_onboarding_people__user_id__signed__which__pdf_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"which","in":"path","required":true,"schema":{"type":"string","title":"Which"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/payments/me":{"get":{"summary":"My Payments","operationId":"my_payments_api_admin_onboarding_payments_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/onboarding/document/{token}":{"get":{"summary":"Open Document","description":"No session needed: the link IS the permission, minted after the\nviewer's access was checked, bound to them, and dead in 5 minutes.","operationId":"open_document_api_onboarding_document__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/verification":{"get":{"summary":"Person Verification","operationId":"person_verification_api_admin_onboarding_people__user_id__verification_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/profile":{"get":{"summary":"Person Profile","operationId":"person_profile_api_admin_onboarding_people__user_id__profile_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/documents/{doc_id}/link":{"post":{"summary":"Person Document Link","operationId":"person_document_link_api_admin_onboarding_people__user_id__documents__doc_id__link_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/review":{"post":{"summary":"Person Review","operationId":"person_review_api_admin_onboarding_people__user_id__review_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/verification-required":{"post":{"summary":"Person Verification Required","operationId":"person_verification_required_api_admin_onboarding_people__user_id__verification_required_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/document-access":{"post":{"summary":"Person Document Access","operationId":"person_document_access_api_admin_onboarding_people__user_id__document_access_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/w9-hard-copy":{"post":{"summary":"Person W9 Hard Copy","description":"Master only. The one place the full TIN is printed (IRS hard-copy\nrequirement; owner approved 2026-09-27). A reason is required and logged;\nthe PDF is built in memory and never stored.","operationId":"person_w9_hard_copy_api_admin_onboarding_people__user_id__w9_hard_copy_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/documents/{doc_id}/delete":{"post":{"summary":"Delete Document","operationId":"delete_document_api_admin_onboarding_documents__doc_id__delete_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/retention-due":{"get":{"summary":"Retention Due","operationId":"retention_due_api_admin_onboarding_retention_due_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/people/{user_id}/paper-trail.{fmt}":{"get":{"summary":"Paper Trail","operationId":"paper_trail_api_admin_onboarding_people__user_id__paper_trail__fmt__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/adverse/factors":{"get":{"summary":"Adverse Factors","operationId":"adverse_factors_api_admin_onboarding_adverse_factors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/people/{user_id}/adverse":{"post":{"summary":"Adverse Open","operationId":"adverse_open_api_admin_onboarding_people__user_id__adverse_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/adverse/{case_id}/{step}":{"post":{"summary":"Adverse Step","operationId":"adverse_step_api_admin_onboarding_adverse__case_id___step__post","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"step","in":"path","required":true,"schema":{"type":"string","title":"Step"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/adverse/{case_id}/final-draft":{"get":{"summary":"Adverse Final Draft","operationId":"adverse_final_draft_api_admin_onboarding_adverse__case_id__final_draft_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/payments":{"get":{"summary":"Payments For","operationId":"payments_for_api_admin_onboarding_payments_get","parameters":[{"name":"user_id","in":"query","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Payment Record","operationId":"payment_record_api_admin_onboarding_payments_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/payments/{payment_id}/reverse":{"post":{"summary":"Payment Reverse","operationId":"payment_reverse_api_admin_onboarding_payments__payment_id__reverse_post","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/payment-methods":{"get":{"summary":"Payment Methods","operationId":"payment_methods_api_admin_onboarding_payment_methods_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/tax-export":{"get":{"summary":"Tax Export","operationId":"tax_export_api_admin_onboarding_tax_export_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/templates":{"get":{"summary":"Templates List","operationId":"templates_list_api_admin_onboarding_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/templates/{kind}":{"put":{"summary":"Templates Save","operationId":"templates_save_api_admin_onboarding_templates__kind__put","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/course":{"get":{"summary":"Course Outline","operationId":"course_outline_api_admin_onboarding_course_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/course/sections/{section_id}":{"get":{"summary":"Course Section","operationId":"course_section_api_admin_onboarding_course_sections__section_id__get","parameters":[{"name":"section_id","in":"path","required":true,"schema":{"type":"string","title":"Section Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/course/quiz/start":{"post":{"summary":"Course Quiz Start","operationId":"course_quiz_start_api_admin_onboarding_course_quiz_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/course/quiz/{attempt_id}":{"get":{"summary":"Course Quiz Resume","operationId":"course_quiz_resume_api_admin_onboarding_course_quiz__attempt_id__get","parameters":[{"name":"attempt_id","in":"path","required":true,"schema":{"type":"string","title":"Attempt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/course/quiz/{attempt_id}/answer":{"post":{"summary":"Course Quiz Answer","operationId":"course_quiz_answer_api_admin_onboarding_course_quiz__attempt_id__answer_post","parameters":[{"name":"attempt_id","in":"path","required":true,"schema":{"type":"string","title":"Attempt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/course/quiz/{attempt_id}/finish":{"post":{"summary":"Course Quiz Finish","operationId":"course_quiz_finish_api_admin_onboarding_course_quiz__attempt_id__finish_post","parameters":[{"name":"attempt_id","in":"path","required":true,"schema":{"type":"string","title":"Attempt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/course/nda":{"post":{"summary":"Course Nda","operationId":"course_nda_api_admin_onboarding_course_nda_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/certificate.pdf":{"get":{"summary":"My Certificate","operationId":"my_certificate_api_admin_onboarding_certificate_pdf_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/people/{user_id}/certificate.pdf":{"get":{"summary":"Person Certificate","operationId":"person_certificate_api_admin_onboarding_people__user_id__certificate_pdf_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/certificates/{number}/revoke":{"post":{"summary":"Certificate Revoke","operationId":"certificate_revoke_api_admin_onboarding_certificates__number__revoke_post","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/onboarding/certificates/{number}":{"get":{"summary":"Certificate Verify","description":"Public: confirms a certificate is valid or shows it as revoked.","operationId":"certificate_verify_api_onboarding_certificates__number__get","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","title":"Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/people/{user_id}/completions":{"get":{"summary":"Person Completions","operationId":"person_completions_api_admin_onboarding_people__user_id__completions_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/my-completions":{"get":{"summary":"My Completions","operationId":"my_completions_api_admin_onboarding_my_completions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/tour":{"get":{"summary":"Tour View","operationId":"tour_view_api_admin_onboarding_tour_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/tour/start":{"post":{"summary":"Tour Start","operationId":"tour_start_api_admin_onboarding_tour_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/tour/advance":{"post":{"summary":"Tour Advance","operationId":"tour_advance_api_admin_onboarding_tour_advance_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/tour/poll":{"post":{"summary":"Tour Poll","operationId":"tour_poll_api_admin_onboarding_tour_poll_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/docs":{"get":{"summary":"Contractor Docs","description":"Readable by everyone with the onboarding section, including locked accounts.","operationId":"contractor_docs_api_admin_onboarding_docs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/faqs":{"get":{"summary":"Contractor Faqs","operationId":"contractor_faqs_api_admin_onboarding_faqs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/cart":{"get":{"summary":"Cart View","operationId":"cart_view_api_cart_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/cart/items":{"post":{"summary":"Cart Add","operationId":"cart_add_api_cart_items_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/cart/items/{item_id}":{"delete":{"summary":"Cart Remove","operationId":"cart_remove_api_cart_items__item_id__delete","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cart/checkout":{"post":{"summary":"Cart Checkout","description":"One contract for every item in the cart, then one payment (on the cart order's page).","operationId":"cart_checkout_api_cart_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/me/plan-change/{order_id}":{"get":{"summary":"Plan Change Options","operationId":"plan_change_options_api_me_plan_change__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Plan Change Start","operationId":"plan_change_start_api_me_plan_change__order_id__post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/plan-changes":{"get":{"summary":"My Plan Changes","operationId":"my_plan_changes_api_me_plan_changes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/plan-changes/{change_id}/apply":{"post":{"summary":"Plan Change Apply","description":"A downgrade or an even change (nothing to pay now): applies once the amendment is signed.","operationId":"plan_change_apply_api_plan_changes__change_id__apply_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plan-changes/{change_id}/pay":{"post":{"summary":"Plan Change Pay Blkcoin","operationId":"plan_change_pay_blkcoin_api_plan_changes__change_id__pay_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plan-changes/{change_id}/pay/create-order":{"post":{"summary":"Plan Change Pay Create","operationId":"plan_change_pay_create_api_plan_changes__change_id__pay_create_order_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/plan-changes/{change_id}/pay/capture":{"post":{"summary":"Plan Change Pay Capture","operationId":"plan_change_pay_capture_api_plan_changes__change_id__pay_capture_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/platform-cancel/{order_id}":{"get":{"summary":"Platform Cancel Preview","operationId":"platform_cancel_preview_api_me_platform_cancel__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Platform Cancel","description":"Cancel now, in one step (owner, 2026-10-14: as easy as subscribing, per New York law). What is owed\nbecomes a balance to pay from the dashboard; it never blocks the cancellation.","operationId":"platform_cancel_api_me_platform_cancel__order_id__post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/cancellations":{"get":{"summary":"My Cancellations","operationId":"my_cancellations_api_me_cancellations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/cancellations/{cid}/pay":{"post":{"summary":"Cancellation Pay Blkcoin","operationId":"cancellation_pay_blkcoin_api_cancellations__cid__pay_post","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","title":"Cid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cancellations/{cid}/pay/create-order":{"post":{"summary":"Cancellation Pay Create","operationId":"cancellation_pay_create_api_cancellations__cid__pay_create_order_post","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","title":"Cid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cancellations/{cid}/pay/capture":{"post":{"summary":"Cancellation Pay Capture","operationId":"cancellation_pay_capture_api_cancellations__cid__pay_capture_post","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","title":"Cid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/cancellations":{"get":{"summary":"Admin Cancellations","description":"Admin: every self-serve cancellation, newest first: what was owed, whether it is paid, tablets to collect.","operationId":"admin_cancellations_api_admin_cancellations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/cancellations/{cid}/tablets-collected":{"post":{"summary":"Admin Tablets Collected","operationId":"admin_tablets_collected_api_admin_cancellations__cid__tablets_collected_post","parameters":[{"name":"cid","in":"path","required":true,"schema":{"type":"string","title":"Cid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/billing/enforcement-preview":{"get":{"summary":"Billing Enforcement Preview","description":"Admin: subscriptions and hosting plans from before billing enforcement shipped that are past due,\nwith what the late-payment rules would do. Read-only; nothing is cancelled or taken offline.","operationId":"billing_enforcement_preview_api_admin_billing_enforcement_preview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/me/platforms":{"get":{"summary":"My Platforms","description":"Manage PBPs and Customs: every platform the member owns, with everything billed for it.","operationId":"my_platforms_api_me_platforms_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/quote":{"post":{"summary":"Order Quote","description":"The live total for a selection. No login: a visitor sees real prices.","operationId":"order_quote_api_orders_quote_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders":{"post":{"summary":"Order Create","operationId":"order_create_api_orders_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/estimates":{"post":{"summary":"Estimate Create","description":"Ask for an estimate on a specialized build (it is priced by BBAIS, not at checkout).","operationId":"estimate_create_api_orders_estimates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/estimates/mine":{"get":{"summary":"Estimates Mine","operationId":"estimates_mine_api_orders_estimates_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/mine":{"get":{"summary":"Orders Mine","operationId":"orders_mine_api_orders_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/receipts":{"get":{"summary":"My Receipts","operationId":"my_receipts_api_orders_receipts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/receipts/{receipt_no}.pdf":{"get":{"summary":"Receipt Pdf","operationId":"receipt_pdf_api_orders_receipts__receipt_no__pdf_get","parameters":[{"name":"receipt_no","in":"path","required":true,"schema":{"type":"string","title":"Receipt No"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/contracts/{contract_id}":{"get":{"summary":"Contract Status","description":"Where one contract stands. The page that sent the member to sign reads\nthis to move on the moment the signature is recorded.","operationId":"contract_status_api_orders_contracts__contract_id__get","parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/contracts/{contract_id}/signed.pdf":{"get":{"summary":"Contract Pdf","description":"The signed copy (signature on its line and the signature certificate),\nor the document as issued while it is still unsigned.","operationId":"contract_pdf_api_orders_contracts__contract_id__signed_pdf_get","parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/contracts/issue":{"post":{"summary":"Contract Issue","description":"Put one text contract out for signature on the onboarding signing flow.\n\nThis replaces `/api/contracts/sign`, which recorded a typed name and an IP\naddress. The hosting agreement and the Pay in 4 frequency change are the\ncallers: they prepare their text with `/api/contracts/prepare` as before,\nand sign here.","operationId":"contract_issue_api_contracts_issue_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/orders/{order_id}":{"get":{"summary":"Order Get","operationId":"order_get_api_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{order_id}/cancel":{"post":{"summary":"Order Cancel","operationId":"order_cancel_api_orders__order_id__cancel_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{order_id}/pay":{"post":{"summary":"Order Pay","description":"Open the BLKPAY charge for exactly what the order owes today. The\namount comes from the order, never from the browser.","operationId":"order_pay_api_orders__order_id__pay_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{order_id}/pay-blkcoin":{"post":{"summary":"Order Pay Blkcoin","description":"Pay a signed order in BLKCOIN (products that have always been sold for BLKCOIN).","operationId":"order_pay_blkcoin_api_orders__order_id__pay_blkcoin_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/{order_id}/capture":{"post":{"summary":"Order Capture","operationId":"order_capture_api_orders__order_id__capture_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/home/highlights":{"get":{"summary":"Home Highlights","description":"What each home page highlight shows, in admin's order, with each item's\npublic summary. Read live: an admin change shows on the next load.","operationId":"home_highlights_api_home_highlights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ordering/home-media":{"post":{"summary":"Admin Home Media","description":"Upload one photo, video or captions file for a home highlight. The\nreturned url is then saved on the section with the settings.","operationId":"admin_home_media_api_admin_ordering_home_media_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tablets":{"get":{"summary":"Tablets Page","description":"The Tablet Packages page: prices (added to a build, and on its own) and\nevery build it can be added to, with a link to order each.","operationId":"tablets_page_api_tablets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ordering/settings":{"get":{"summary":"Admin Settings","operationId":"admin_settings_api_admin_ordering_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Settings Save","operationId":"admin_settings_save_api_admin_ordering_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ordering/listings/{listing_id}":{"get":{"summary":"Admin Listing Config","operationId":"admin_listing_config_api_admin_ordering_listings__listing_id__get","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Admin Listing Config Save","operationId":"admin_listing_config_save_api_admin_ordering_listings__listing_id__put","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ordering/blkai-knowledge":{"get":{"summary":"Admin Blkai Knowledge","description":"What BLK-AI chat knows about the platform right now, and exactly what it\nwould be handed for a question. No model is called.","operationId":"admin_blkai_knowledge_api_admin_ordering_blkai_knowledge_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ordering/estimates":{"get":{"summary":"Admin Estimates","operationId":"admin_estimates_api_admin_ordering_estimates_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ordering/estimates/{estimate_id}":{"patch":{"summary":"Admin Estimate Update","operationId":"admin_estimate_update_api_admin_ordering_estimates__estimate_id__patch","parameters":[{"name":"estimate_id","in":"path","required":true,"schema":{"type":"string","title":"Estimate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orders/{purchase_id}/tablet-delivered":{"post":{"summary":"Admin Tablet Delivered","description":"Record the day the tablets were delivered: the 30-day return counts from it (until it is set,\nfrom the day the order was paid).","operationId":"admin_tablet_delivered_api_admin_orders__purchase_id__tablet_delivered_post","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orders/{purchase_id}/push-to-blkbuilder":{"post":{"summary":"Admin Push To Blkbuilder","description":"Open a BLKBUILDER project for this order, carrying everything the\ncustomer chose and typed. One project per order; a second press returns it.","operationId":"admin_push_to_blkbuilder_api_admin_orders__purchase_id__push_to_blkbuilder_post","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/diy/sectors":{"get":{"summary":"Diy Sectors","operationId":"diy_sectors_api_a11y_diy_sectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/a11y/diy/scans":{"get":{"summary":"Diy List","operationId":"diy_list_api_a11y_diy_scans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Diy Start","operationId":"diy_start_api_a11y_diy_scans_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/a11y/diy/scans/{scan_id}":{"get":{"summary":"Diy Get","operationId":"diy_get_api_a11y_diy_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/diy/scans/{scan_id}/report.{fmt}":{"get":{"summary":"Diy Report","operationId":"diy_report_api_a11y_diy_scans__scan_id__report__fmt__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"fmt","in":"path","required":true,"schema":{"type":"string","title":"Fmt"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/a11y/diy/me":{"get":{"summary":"Diy Me","description":"The dashboard tab: does this member have an accessibility service (a\nclient portal, or a paid accessibility order), their scans, their orders.","operationId":"diy_me_api_a11y_diy_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/rights/legal-name":{"get":{"tags":["rights"],"summary":"My Legal Name","operationId":"my_legal_name_api_rights_legal_name_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["rights"],"summary":"Set Legal Name","description":"Establish the legal name (first time) or use the ONE lifetime update.","operationId":"set_legal_name_api_rights_legal_name_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/rights/mine":{"get":{"tags":["rights"],"summary":"My Rights","operationId":"my_rights_api_rights_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/rights":{"get":{"tags":["rights"],"summary":"Admin Rights","operationId":"admin_rights_api_admin_rights_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/rights/cancel-reissue":{"post":{"tags":["rights"],"summary":"Admin Cancel Reissue","description":"No-nicknames enforcement (confirmed rule): admin cancels a contract\nsigned with a nickname -> the signing is voided, the project is PAUSED,\nand a new contract is pushed to the member which must carry their REAL\nname. The pause lifts automatically when they re-sign validly.","operationId":"admin_cancel_reissue_api_admin_rights_cancel_reissue_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/rights/contracts/issue":{"post":{"tags":["rights"],"summary":"Issue Rights Contract","description":"Issue one usage-rights confirmation for signature. Body: {kind, name, link?}.","operationId":"issue_rights_contract_api_rights_contracts_issue_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/blk/chat/models":{"get":{"summary":"List Blk Chat Models","description":"Both sovereign models are always returned. Claude is HIDDEN and\nnot included — admin-restorable only.","operationId":"list_blk_chat_models_api_v1_blk_chat_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/webhooks/vibration-search":{"post":{"summary":"Vibration Webhook","description":"Receive Monitor webhook payloads from Parallel. On\nmonitor.event.detected we fetch the full event group and stream\neach event to the owning member's SSE subscribers.","operationId":"vibration_webhook_api_webhooks_vibration_search_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration-stream":{"get":{"summary":"Vibration Stream","description":"Server-Sent Events channel for the frontend Vibration feed. Push\ndelivery — every incoming Monitor webhook fans out to every open\nconnection this member holds.","operationId":"vibration_stream_api_vibration_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/monitors":{"post":{"summary":" Monitor Query","description":"Parallel Monitors want a natural-language monitoring INTENT, not a bare topic.\nA 3-word name ('All The Queen's Men Season 5') returns almost nothing; a rich intent\nreturns far more content. We store the member's short name for display but send this\nenriched intent to Parallel so the feed is actually full.","operationId":"_monitor_query_api_vibration_monitors_post","parameters":[{"name":"topic","in":"query","required":true,"schema":{"type":"string","title":"Topic"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response  Monitor Query Api Vibration Monitors Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Vibration Monitors","operationId":"list_vibration_monitors_api_vibration_monitors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/pending":{"get":{"summary":"Get Pending Vibration","description":"The vibration BLK-AI proposed in chat that's awaiting the member's schedule + depth\nconfirmation (drives the confirmation card in the chat). Null when there is none.","operationId":"get_pending_vibration_api_vibration_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Cancel Pending Vibration","operationId":"cancel_pending_vibration_api_vibration_pending_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/pending/confirm":{"post":{"summary":"Confirm Pending Vibration","description":"Confirmation button: create the proposed vibration with the schedule + depth the\nmember picked in the card. This is the ONLY create path from chat — no keyword guessing.","operationId":"confirm_pending_vibration_api_vibration_pending_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/monitors/{monitor_id}":{"patch":{"summary":"Edit Vibration Monitor","description":"Edit a vibration's name, SCHEDULE (frequency), or DEPTH (processor).\n\nParallel fixes a monitor's cadence + processor at creation time, so changing\nfrequency/depth cannot mutate the live monitor — we cancel it and create a fresh one\nwith the new settings, then migrate the event history onto the new monitor id so the\nmember keeps their stream. (This is why 'set to hourly' previously did nothing.)","operationId":"edit_vibration_monitor_api_vibration_monitors__monitor_id__patch","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Vibration Monitor","description":"HARD DELETE — cancels the upstream Parallel monitor AND removes\nthe row from Mongo + all associated events. Owner mandate 2026-07-04:\n'deactivate is not enough — users need real delete'.","operationId":"delete_vibration_monitor_api_vibration_monitors__monitor_id__delete","parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibration/events":{"get":{"summary":"List Vibration Events","operationId":"list_vibration_events_api_vibration_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/events/{event_id}/read":{"post":{"summary":"Mark Vibration Event Read","operationId":"mark_vibration_event_read_api_vibration_events__event_id__read_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibration/events/read-all":{"post":{"summary":"Mark All Vibration Events Read","operationId":"mark_all_vibration_events_read_api_vibration_events_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibration/events/{event_id}":{"get":{"summary":"Get Vibration Event","description":"Return the full stored event doc. Used by the frontend \"expand\nto view\" action on the feed. If the event has an empty output (e.g.\nit came from a `monitor.execution.completed` webhook where nothing\nmaterial changed), refetch from Parallel to see if the underlying\nevent group has real signals now, and merge them in.","operationId":"get_vibration_event_api_vibration_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications":{"get":{"summary":"Api List","operationId":"api_list_api_notifications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/notifications/{notification_id}/read":{"post":{"summary":"Api Mark Read","operationId":"api_mark_read_api_notifications__notification_id__read_post","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notifications/read-all":{"post":{"summary":"Api Mark All Read","operationId":"api_mark_all_read_api_notifications_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/logos":{"get":{"summary":"Get Logos","description":"Public — current logo URL per slot (or null). One upload applies\neverywhere that slot is used; the frontend falls back to the built-in symbol\nwhere null.","operationId":"get_logos_api_logos_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/logos/slots":{"get":{"summary":"Get Slots","description":"Public — slot metadata so the admin uploader stays in sync with the\nbackend's slot list without hardcoding it in the frontend.","operationId":"get_slots_api_logos_slots_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/logos/{slot}":{"post":{"summary":"Upload Logo","operationId":"upload_logo_api_admin_logos__slot__post","parameters":[{"name":"slot","in":"path","required":true,"schema":{"type":"string","title":"Slot"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_admin_logos__slot__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Clear Logo","operationId":"clear_logo_api_admin_logos__slot__delete","parameters":[{"name":"slot","in":"path","required":true,"schema":{"type":"string","title":"Slot"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products":{"get":{"summary":"List Products","operationId":"list_products_api_products_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Min"}},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Max"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"featured","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"published_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Published Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{slug}":{"get":{"summary":"Get Product","operationId":"get_product_api_products__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/products":{"post":{"summary":"Create Product","operationId":"create_product_api_admin_products_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_product_api_admin_products_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/products/{product_id}":{"patch":{"summary":"Update Product","operationId":"update_product_api_admin_products__product_id__patch","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Product","operationId":"delete_product_api_admin_products__product_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/products/{product_id}/thumbnail":{"post":{"summary":"Upload Product Thumbnail","operationId":"upload_product_thumbnail_api_admin_products__product_id__thumbnail_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_product_thumbnail_api_admin_products__product_id__thumbnail_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout/initiate":{"post":{"summary":"Checkout Initiate","description":"BLKPAY (PayPal white-label) — currently returns pending state awaiting PayPal keys.\nWhen PAYPAL_CLIENT_ID is configured, this will create a real order and return the approval URL.","operationId":"checkout_initiate_api_checkout_initiate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutInitBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout/capture":{"post":{"summary":"Checkout Capture","operationId":"checkout_capture_api_checkout_capture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/checkout/blkcoin":{"post":{"summary":"Checkout Blkcoin","operationId":"checkout_blkcoin_api_checkout_blkcoin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutInitBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/checkout/verify/{tx_id}":{"get":{"summary":"Checkout Verify","operationId":"checkout_verify_api_checkout_verify__tx_id__get","parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkcoin/balance":{"get":{"summary":"Blkcoin Balance","operationId":"blkcoin_balance_api_blkcoin_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/history":{"get":{"summary":"Blkcoin History","operationId":"blkcoin_history_api_blkcoin_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/award":{"post":{"summary":"Award Blkcoin","operationId":"award_blkcoin_api_admin_blkcoin_award_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlkcoinAwardBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts":{"get":{"summary":"List Posts","operationId":"list_posts_api_community_posts_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"post_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"hot","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Post","operationId":"create_post_api_community_posts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}":{"get":{"summary":"Get Post","operationId":"get_post_api_community_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Post","operationId":"delete_post_api_community_posts__post_id__delete","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}/vote":{"post":{"summary":"Vote Post","operationId":"vote_post_api_community_posts__post_id__vote_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}/pin":{"post":{"summary":"Pin Post","operationId":"pin_post_api_community_posts__post_id__pin_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/posts/{post_id}/comments":{"get":{"summary":"List Comments","operationId":"list_comments_api_community_posts__post_id__comments_get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Comment","operationId":"create_comment_api_community_posts__post_id__comments_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/comments/{comment_id}/vote":{"post":{"summary":"Vote Comment","operationId":"vote_comment_api_community_comments__comment_id__vote_post","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","title":"Comment Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/community/comments/{comment_id}":{"delete":{"summary":"Delete Comment","operationId":"delete_comment_api_community_comments__comment_id__delete","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/messages/conversations":{"get":{"summary":"Conversations","operationId":"conversations_api_messages_conversations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/messages/unread-count":{"get":{"summary":"Unread Count","operationId":"unread_count_api_messages_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/messages/{user_id}":{"get":{"summary":"Messages Thread","operationId":"messages_thread_api_messages__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Send Message","operationId":"send_message_api_messages__user_id__post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pbp":{"get":{"summary":"List Pbp","operationId":"list_pbp_api_pbp_get","parameters":[{"name":"platform_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Category"}},{"name":"customization_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customization Tier"}},{"name":"industry_tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Tag"}},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Min"}},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Max"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pbp/{slug}":{"get":{"summary":"Get Pbp","operationId":"get_pbp_api_pbp__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pbp":{"post":{"summary":"Create Pbp","operationId":"create_pbp_api_admin_pbp_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_pbp_api_admin_pbp_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pbp/{listing_id}":{"patch":{"summary":"Update Pbp","operationId":"update_pbp_api_admin_pbp__listing_id__patch","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Pbp","operationId":"delete_pbp_api_admin_pbp__listing_id__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pbp/{listing_id}/photos":{"post":{"summary":"Add Photos","operationId":"add_photos_api_admin_pbp__listing_id__photos_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_photos_api_admin_pbp__listing_id__photos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pbp/{listing_id}/photos/{index}":{"delete":{"summary":"Delete Photo","operationId":"delete_photo_api_admin_pbp__listing_id__photos__index__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pbp/{listing_id}/video":{"post":{"summary":"Upload Video","operationId":"upload_video_api_admin_pbp__listing_id__video_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_video_api_admin_pbp__listing_id__video_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pbp/checkout":{"post":{"summary":"Pbp Checkout","description":"Calculate total = base_price + sum of selected add-ons, then initiate BLKPAY.","operationId":"pbp_checkout_api_pbp_checkout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/service-presets/{service_type}":{"get":{"summary":"Get Service Presets","operationId":"get_service_presets_api_admin_service_presets__service_type__get","parameters":[{"name":"service_type","in":"path","required":true,"schema":{"type":"string","title":"Service Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/services":{"get":{"summary":"List Services","operationId":"list_services_api_services_get","parameters":[{"name":"service_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Type"}},{"name":"platform_category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Category"}},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},{"name":"industry_tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Tag"}},{"name":"price_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Min"}},{"name":"price_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Max"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/services/{slug}":{"get":{"summary":"Get Service","operationId":"get_service_api_services__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services":{"post":{"summary":"Create Service","operationId":"create_service_api_admin_services_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_service_api_admin_services_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}":{"patch":{"summary":"Update Service","operationId":"update_service_api_admin_services__listing_id__patch","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Service","operationId":"delete_service_api_admin_services__listing_id__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/photos":{"post":{"summary":"Add Service Photos","operationId":"add_service_photos_api_admin_services__listing_id__photos_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_service_photos_api_admin_services__listing_id__photos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/photos/{index}":{"delete":{"summary":"Delete Service Photo","operationId":"delete_service_photo_api_admin_services__listing_id__photos__index__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/videos":{"post":{"summary":"Add Service Videos","operationId":"add_service_videos_api_admin_services__listing_id__videos_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_service_videos_api_admin_services__listing_id__videos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/videos/{index}":{"delete":{"summary":"Delete Service Video","operationId":"delete_service_video_api_admin_services__listing_id__videos__index__delete","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/variations/{group_id}/options/{option_id}/thumbnail":{"post":{"summary":"Upload Variation Option Thumbnail","description":"Upload a thumbnail for a single variation option (e.g. the Black/Gold/White\nswatch image for a Color variation). Updates only that option in-place.","operationId":"upload_variation_option_thumbnail_api_admin_services__listing_id__variations__group_id__options__option_id__thumbnail_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"option_id","in":"path","required":true,"schema":{"type":"string","title":"Option Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_variation_option_thumbnail_api_admin_services__listing_id__variations__group_id__options__option_id__thumbnail_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/primary-video":{"post":{"summary":"Upload Primary Video","operationId":"upload_primary_video_api_admin_services__listing_id__primary_video_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_primary_video_api_admin_services__listing_id__primary_video_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/thumbnail":{"post":{"summary":"Upload Service Thumbnail","operationId":"upload_service_thumbnail_api_admin_services__listing_id__thumbnail_post","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_service_thumbnail_api_admin_services__listing_id__thumbnail_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/services/{listing_id}/photos/reorder":{"patch":{"summary":"Reorder Service Photos","operationId":"reorder_service_photos_api_admin_services__listing_id__photos_reorder_patch","parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","title":"Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reviews/{product_id}":{"get":{"summary":"List Reviews","operationId":"list_reviews_api_reviews__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reviews":{"post":{"summary":"Create Review","operationId":"create_review_api_reviews_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_review_api_reviews_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reviews":{"get":{"summary":"Admin List Reviews","operationId":"admin_list_reviews_api_admin_reviews_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/reviews/{review_id}/reply":{"post":{"summary":"Reply Review","operationId":"reply_review_api_admin_reviews__review_id__reply_post","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/reviews/{review_id}":{"patch":{"summary":"Update Review","operationId":"update_review_api_admin_reviews__review_id__patch","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Review","operationId":"delete_review_api_admin_reviews__review_id__delete","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reviews/{review_id}/replies":{"post":{"summary":"Add Review Reply","description":"Any authenticated user can reply to a review. Admin replies are flagged.","operationId":"add_review_reply_api_reviews__review_id__replies_post","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Review Replies","operationId":"list_review_replies_api_reviews__review_id__replies_get","parameters":[{"name":"review_id","in":"path","required":true,"schema":{"type":"string","title":"Review Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/products/search":{"get":{"summary":"Admin Search Products","description":"Admin search-for-assign: used by BMBB bundle builder & custom product assignment.","operationId":"admin_search_products_api_admin_products_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/search":{"get":{"summary":"Admin Search Users","operationId":"admin_search_users_api_admin_users_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-custom-products":{"get":{"summary":"My Custom Products","description":"Products/services admin-assigned specifically to me (single or multi target).","operationId":"my_custom_products_api_my_custom_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/my-addons":{"get":{"summary":"My Addons","operationId":"my_addons_api_my_addons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/my-addons/upgrade":{"post":{"summary":"Upgrade Addons","description":"Purchase additional add-ons for an existing service purchase.","operationId":"upgrade_addons_api_my_addons_upgrade_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/filters":{"get":{"summary":"List Filters","operationId":"list_filters_api_filters_get","parameters":[{"name":"applies_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applies To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/filters":{"post":{"summary":"Create Filter","operationId":"create_filter_api_admin_filters_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/filters/{filter_id}":{"patch":{"summary":"Update Filter","operationId":"update_filter_api_admin_filters__filter_id__patch","parameters":[{"name":"filter_id","in":"path","required":true,"schema":{"type":"string","title":"Filter Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Filter","operationId":"delete_filter_api_admin_filters__filter_id__delete","parameters":[{"name":"filter_id","in":"path","required":true,"schema":{"type":"string","title":"Filter Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/net-worth":{"get":{"summary":"Get Net Worth","operationId":"get_net_worth_api_net_worth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/valuation/categories":{"post":{"summary":"Create Val Category","operationId":"create_val_category_api_admin_valuation_categories_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/valuation/categories/{category_id}":{"patch":{"summary":"Update Val Category","operationId":"update_val_category_api_admin_valuation_categories__category_id__patch","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Val Category","operationId":"delete_val_category_api_admin_valuation_categories__category_id__delete","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/valuation/override":{"post":{"summary":"Set Val Override","operationId":"set_val_override_api_admin_valuation_override_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/net-worth/categories":{"post":{"summary":"Create Nw Category","operationId":"create_nw_category_api_admin_net_worth_categories_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/net-worth/categories/{category_id}":{"patch":{"summary":"Update Nw Category","operationId":"update_nw_category_api_admin_net_worth_categories__category_id__patch","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Nw Category","operationId":"delete_nw_category_api_admin_net_worth_categories__category_id__delete","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/net-worth/override":{"post":{"summary":"Set Nw Override","operationId":"set_nw_override_api_admin_net_worth_override_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/brand-partner/apply":{"post":{"summary":"Apply Brand Partner","operationId":"apply_brand_partner_api_brand_partner_apply_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_apply_brand_partner_api_brand_partner_apply_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand-partner/my-application":{"get":{"summary":"My Brand Partner","operationId":"my_brand_partner_api_brand_partner_my_application_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/brand-partners":{"get":{"summary":"Admin List Partners","operationId":"admin_list_partners_api_admin_brand_partners_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/brand-partners/{application_id}":{"patch":{"summary":"Update Partner","operationId":"update_partner_api_admin_brand_partners__application_id__patch","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-analytics":{"get":{"summary":"My Analytics","operationId":"my_analytics_api_my_analytics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/marketing-analytics":{"post":{"summary":"Upload Marketing Analytics","operationId":"upload_marketing_analytics_api_admin_marketing_analytics_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_marketing_analytics_api_admin_marketing_analytics_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/marketing-analytics/{analytics_id}":{"delete":{"summary":"Delete Analytics","operationId":"delete_analytics_api_admin_marketing_analytics__analytics_id__delete","parameters":[{"name":"analytics_id","in":"path","required":true,"schema":{"type":"string","title":"Analytics Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-custom-packages":{"get":{"summary":"My Custom Packages","operationId":"my_custom_packages_api_my_custom_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/custom-packages":{"get":{"summary":"Admin List Packages","operationId":"admin_list_packages_api_admin_custom_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Create Custom Package","operationId":"admin_create_custom_package_api_admin_custom_packages_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/custom-packages/{package_id}":{"patch":{"summary":"Admin Update Package","operationId":"admin_update_package_api_admin_custom_packages__package_id__patch","parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","title":"Package Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Delete Package","operationId":"admin_delete_package_api_admin_custom_packages__package_id__delete","parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","title":"Package Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-services":{"get":{"summary":"My Services","operationId":"my_services_api_my_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/events":{"get":{"summary":"List Events","operationId":"list_events_api_events_get","parameters":[{"name":"timeframe","in":"query","required":false,"schema":{"type":"string","default":"upcoming","title":"Timeframe"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"is_virtual","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Virtual"}},{"name":"featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Featured"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}":{"get":{"summary":"Get Event","operationId":"get_event_api_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}/register":{"post":{"summary":"Register Event","operationId":"register_event_api_events__event_id__register_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-events":{"get":{"summary":"My Events","operationId":"my_events_api_my_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/my-events/{registration_id}":{"patch":{"summary":"Edit My Event Registration","operationId":"edit_my_event_registration_api_my_events__registration_id__patch","parameters":[{"name":"registration_id","in":"path","required":true,"schema":{"type":"string","title":"Registration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events":{"post":{"summary":"Create Event","operationId":"create_event_api_admin_events_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_event_api_admin_events_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}":{"patch":{"summary":"Update Event","operationId":"update_event_api_admin_events__event_id__patch","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Event","operationId":"delete_event_api_admin_events__event_id__delete","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}/photos":{"post":{"summary":"Add Event Photos","operationId":"add_event_photos_api_admin_events__event_id__photos_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_event_photos_api_admin_events__event_id__photos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}/videos":{"post":{"summary":"Add Event Videos","operationId":"add_event_videos_api_admin_events__event_id__videos_post","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_add_event_videos_api_admin_events__event_id__videos_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}/guests":{"get":{"summary":"List Event Guests","operationId":"list_event_guests_api_admin_events__event_id__guests_get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}/guests/{reg_id}/checkin":{"patch":{"summary":"Checkin Guest","operationId":"checkin_guest_api_admin_events__event_id__guests__reg_id__checkin_patch","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}},{"name":"reg_id","in":"path","required":true,"schema":{"type":"string","title":"Reg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/contract-templates":{"get":{"summary":"List Templates","operationId":"list_templates_api_admin_contract_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Template","operationId":"create_template_api_admin_contract_templates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/contract-templates/{template_id}":{"patch":{"summary":"Update Template","operationId":"update_template_api_admin_contract_templates__template_id__patch","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Template","operationId":"delete_template_api_admin_contract_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/contracts/prepare":{"post":{"summary":"Prepare Contract","description":"Generate the contract body (fill template with user/product data) for customer to review+sign.","operationId":"prepare_contract_api_contracts_prepare_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/contracts/sign":{"post":{"summary":"Sign Contract","description":"Customer signs. Generate PDF, save to user dashboard.","operationId":"sign_contract_api_contracts_sign_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/my-contracts":{"get":{"summary":"My Contracts","operationId":"my_contracts_api_my_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/contracts":{"get":{"summary":"Admin Contracts","operationId":"admin_contracts_api_admin_contracts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/contracts/{contract_id}/void":{"patch":{"summary":"Void Contract","operationId":"void_contract_api_admin_contracts__contract_id__void_patch","parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/lease/start":{"post":{"summary":"Start Lease","operationId":"start_lease_api_lease_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/lease/pay/{payment_id}":{"post":{"summary":"Pay Lease","operationId":"pay_lease_api_lease_pay__payment_id__post","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/late-fees/run":{"post":{"summary":"Admin Run Late Fee Pass","operationId":"admin_run_late_fee_pass_api_admin_late_fees_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/late-payments":{"get":{"summary":"Admin Late Payments","operationId":"admin_late_payments_api_admin_late_payments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/payment-plans":{"get":{"summary":"Admin Payment Plans","description":"Full detail of every lease + pay-in-4 agreement so the admin sees everything\n(customer, product, contract, full schedule with per-payment status), not only\nthe late ones. Addresses 'admin doesnt receive full details'.","operationId":"admin_payment_plans_api_admin_payment_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/plan-payment/record-offline":{"post":{"summary":"Admin Record Offline Payment","description":"Admin manually marks an installment paid — for payments collected outside PayPal\n(cash, Zelle, wire, etc.). Records who/when/how so the audit trail is intact.\nThis is the reliable 'charge a payment' action available under PayPal Orders v2.","operationId":"admin_record_offline_payment_api_admin_plan_payment_record_offline_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/plan-payment/request-link":{"post":{"summary":"Admin Request Payment Link","description":"Generate a PayPal approval link for one or more installments that the admin can\nsend the customer. When the customer approves, /api/blkpay/return captures AND\nreconciles the installments. This is the 'charge a late payment' button under\nPayPal Orders v2 — it collects real money, but the customer must approve (a silent\ncharge requires PayPal Subscriptions / reference transactions, which need PayPal\nmerchant approval).","operationId":"admin_request_payment_link_api_admin_plan_payment_request_link_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/lease/payments/{payment_id}/adjust-date":{"patch":{"summary":"Adjust Lease Date","operationId":"adjust_lease_date_api_lease_payments__payment_id__adjust_date_patch","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/payments/{payment_id}/adjust-date":{"patch":{"summary":"Adjust Pay4 Date","operationId":"adjust_pay4_date_api_pay_in_4_payments__payment_id__adjust_date_patch","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/date-adjustments-this-year":{"get":{"summary":"Me Date Adjustments This Year","operationId":"me_date_adjustments_this_year_api_me_date_adjustments_this_year_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/lease/{agreement_id}/autopay":{"patch":{"summary":"Lease Autopay","operationId":"lease_autopay_api_lease__agreement_id__autopay_patch","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/{agreement_id}/autopay":{"patch":{"summary":"Pay4 Autopay","operationId":"pay4_autopay_api_pay_in_4__agreement_id__autopay_patch","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/lease/{agreement_id}/monthly-anchor":{"patch":{"summary":"Lease Set Anchor","description":"Move the every-month anchor day for this lease. Range: 1..28. Quota: 3 per\ncalendar year. Adjusts autopay + every unpaid payment.","operationId":"lease_set_anchor_api_lease__agreement_id__monthly_anchor_patch","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/{agreement_id}/monthly-anchor":{"patch":{"summary":"Pay4 Set Anchor","description":"Pay-in-4 is biweekly; the anchor here governs the autopay charge weekday.\nSame +/-15 day quota structure as lease for parity.","operationId":"pay4_set_anchor_api_pay_in_4__agreement_id__monthly_anchor_patch","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/lease/{agreement_id}/payoff-quote":{"get":{"summary":"Lease Payoff Quote","operationId":"lease_payoff_quote_api_lease__agreement_id__payoff_quote_get","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/{agreement_id}/payoff-quote":{"get":{"summary":"Pay4 Payoff Quote","operationId":"pay4_payoff_quote_api_pay_in_4__agreement_id__payoff_quote_get","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-lease-agreements":{"get":{"summary":"My Leases","operationId":"my_leases_api_my_lease_agreements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pay-in-4/start":{"post":{"summary":"Start Pay In 4","operationId":"start_pay_in_4_api_pay_in_4_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pay-in-4/cadences":{"get":{"summary":"Get Offered Cadences","description":"What Pay-in-4 frequencies are offered right now (drives the checkout choice).","operationId":"get_offered_cadences_api_pay_in_4_cadences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pay-in-4/cadences":{"patch":{"summary":"Set Offered Cadences","description":"Admin: choose which Pay-in-4 frequencies members may pick.","operationId":"set_offered_cadences_api_admin_pay_in_4_cadences_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/contracts/{contract_id}/sign-amendment":{"post":{"summary":"Sign Amendment","description":"Member signs + submits a pending amendment. All versions persist -\nsigning an amendment never touches the original or earlier amendments.","operationId":"sign_amendment_api_contracts__contract_id__sign_amendment_post","parameters":[{"name":"contract_id","in":"path","required":true,"schema":{"type":"string","title":"Contract Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pay-in-4/{agreement_id}/reissue-amendment":{"post":{"summary":"Reissue P4 Amendment","description":"Repair/support: (re)send the updated contract for the plan's CURRENT\nfrequency - for switches made before auto-issue shipped, or lost docs.","operationId":"reissue_p4_amendment_api_admin_pay_in_4__agreement_id__reissue_amendment_post","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/{agreement_id}/cadence":{"post":{"summary":"Switch Pay In 4 Cadence","description":"Switch an active Pay-in-4 plan between weekly and bi-weekly.\n\n- MEMBER: must supply a freshly SIGNED amendment contract (contract_id) that\n  entails the change. Lengthening (weekly→biweekly) costs\n  PAY_IN_4_LENGTHEN_FEE_BLKCOIN, paid immediately; shortening is free.\n- ADMIN: free, no re-sign required.\nBoth the original and the amendment contract persist on the agreement, and the\nremaining unpaid installments are rescheduled at the new cadence.","operationId":"switch_pay_in_4_cadence_api_pay_in_4__agreement_id__cadence_post","parameters":[{"name":"agreement_id","in":"path","required":true,"schema":{"type":"string","title":"Agreement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/pay-in-4/pay/{payment_id}":{"post":{"summary":"Pay P4","operationId":"pay_p4_api_pay_in_4_pay__payment_id__post","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-pay-in-4":{"get":{"summary":"My Pay In 4","operationId":"my_pay_in_4_api_my_pay_in_4_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/hosting-plans":{"get":{"tags":["hosting"],"summary":"List Hosting Plans","operationId":"list_hosting_plans_api_admin_hosting_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["hosting"],"summary":"Create Hosting Plan","description":"Admin pushes a recurring monthly hosting plan to a specific client.","operationId":"create_hosting_plan_api_admin_hosting_plans_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/hosting-plans/{plan_id}":{"patch":{"tags":["hosting"],"summary":"Edit Hosting Plan","description":"Admin edits a plan (amount, label, currency, notes) at any time. A new amount\nor currency also updates the current OPEN invoice so it bills at the new rate.","operationId":"edit_hosting_plan_api_admin_hosting_plans__plan_id__patch","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hosting-plans/{plan_id}/render-services":{"put":{"tags":["hosting"],"summary":"Link Render Services","description":"Link a hosting plan to the platform's own Render service(s), so an unpaid plan takes the platform out of\nlive mode automatically (suspended on day 20, resumed on payment). The My BLK World HQ services themselves\nand services already linked to another plan are refused. An empty list unlinks.","operationId":"link_render_services_api_admin_hosting_plans__plan_id__render_services_put","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hosting/live":{"get":{"tags":["hosting"],"summary":"Hosting Live","description":"Public: is this platform's hosting paid up? A platform hosted outside BLKBUILDER can read this\n(by its domain) and stay out of live mode while it says false.","operationId":"hosting_live_api_hosting_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/hosting-plans/{plan_id}/cancel":{"post":{"tags":["hosting"],"summary":"Cancel Hosting Plan","operationId":"cancel_hosting_plan_api_admin_hosting_plans__plan_id__cancel_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hosting-plans/{plan_id}/payment-link":{"post":{"tags":["hosting"],"summary":"Admin Hosting Payment Link","description":"Admin generates a PayPal link for the client to pay the current cycle (USD\nplans) — the same 'request payment with link' flow as Pay-in-4. Send the URL to\nthe client; it reconciles on capture/return.","operationId":"admin_hosting_payment_link_api_admin_hosting_plans__plan_id__payment_link_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/hosting-plans/{plan_id}/mark-paid":{"post":{"tags":["hosting"],"summary":"Admin Mark Hosting Paid","description":"Admin records a cycle paid outside the app (e.g. cash/transfer) and rolls forward.","operationId":"admin_mark_hosting_paid_api_admin_hosting_plans__plan_id__mark_paid_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-hosting/{plan_id}/domain":{"patch":{"tags":["hosting"],"summary":"My Hosting Domain","description":"The member sets or changes the domain on their own hosting plan (owner, 2026-10-14: domains\nconnected to the member and admin hosting, so both sides receive updates). Admin sees it on\nHosting Plans and is told.","operationId":"my_hosting_domain_api_my_hosting__plan_id__domain_patch","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/my-hosting":{"get":{"tags":["hosting"],"summary":"My Hosting","operationId":"my_hosting_api_my_hosting_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/hosting-plans/{plan_id}/activate":{"post":{"tags":["hosting"],"summary":"Activate Hosting Plan","description":"Client activates a pending plan by supplying a SIGNED hosting agreement.\nGenerates the first monthly invoice.","operationId":"activate_hosting_plan_api_hosting_plans__plan_id__activate_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hosting-plans/{plan_id}/pay":{"post":{"tags":["hosting"],"summary":"Pay Hosting Blkcoin","description":"BLKCOIN-currency plans: charge the client and roll to the next cycle.","operationId":"pay_hosting_blkcoin_api_hosting_plans__plan_id__pay_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hosting-plans/{plan_id}/pay/create-order":{"post":{"tags":["hosting"],"summary":"Pay Hosting Usd Create","description":"USD-currency plans: create a PayPal order for the current cycle.","operationId":"pay_hosting_usd_create_api_hosting_plans__plan_id__pay_create_order_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/hosting-plans/{plan_id}/pay/capture":{"post":{"tags":["hosting"],"summary":"Pay Hosting Usd Capture","operationId":"pay_hosting_usd_capture_api_hosting_plans__plan_id__pay_capture_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me/subscriptions":{"get":{"summary":"List My Subscriptions","operationId":"list_my_subscriptions_api_me_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/subscriptions/{subscription_id}/cancel":{"post":{"summary":"Cancel Subscription","operationId":"cancel_subscription_api_subscriptions__subscription_id__cancel_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/autopay":{"patch":{"summary":"Toggle Autopay","operationId":"toggle_autopay_api_subscriptions__subscription_id__autopay_patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/anchor-day":{"patch":{"summary":"Set Anchor","description":"Move the every-month due date by up to +/-15 days. 3 per calendar year.","operationId":"set_anchor_api_subscriptions__subscription_id__anchor_day_patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/cancel-preview":{"get":{"summary":"Cancel Preview","description":"What cancelling this subscription ends and what is owed, shown before the member confirms.","operationId":"cancel_preview_api_subscriptions__subscription_id__cancel_preview_get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/pay":{"post":{"summary":"Pay Subscription","description":"Pay this period in BLKCOIN (1 BLKCOIN = $1), through the one BLKCOIN engine, then roll forward.","operationId":"pay_subscription_api_subscriptions__subscription_id__pay_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/pay/create-order":{"post":{"summary":"Pay Subscription Create","description":"Pay this period with BLKPAY: open a charge for exactly what is due (from the subscription, never the browser).","operationId":"pay_subscription_create_api_subscriptions__subscription_id__pay_create_order_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/subscriptions/{subscription_id}/pay/capture":{"post":{"summary":"Pay Subscription Capture","operationId":"pay_subscription_capture_api_subscriptions__subscription_id__pay_capture_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/subscriptions/{subscription_id}/mark-paid":{"post":{"summary":"Admin Mark Subscription Paid","description":"Admin records a period paid outside the platform (cash, transfer) and rolls it forward.","operationId":"admin_mark_subscription_paid_api_admin_subscriptions__subscription_id__mark_paid_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/subscriptions":{"get":{"summary":"Admin List Subscriptions","description":"Every subscription across ALL members, with per-entry account details.","operationId":"admin_list_subscriptions_api_admin_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Admin Create Subscription","description":"Admin-issued subscription. Body:\n{ user_id|user_email, product_id?, product_title, monthly_amount,\n  monthly_anchor_day?, autopay_enrolled? }","operationId":"admin_create_subscription_api_admin_subscriptions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/subscriptions/{subscription_id}":{"delete":{"summary":"Admin Delete Subscription","operationId":"admin_delete_subscription_api_admin_subscriptions__subscription_id__delete","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Admin Edit Subscription","description":"Edit tier / price / status / next renewal date.","operationId":"admin_edit_subscription_api_admin_subscriptions__subscription_id__patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/subscriptions/unpaid-marked-paid":{"get":{"summary":"Admin Unpaid Marked Paid","description":"Every period the old member PAY NOW recorded as paid without taking money (method \"manual\", before\n2026-10-14). Read-only, so admin can see whether anyone used it and what is owed.","operationId":"admin_unpaid_marked_paid_api_admin_subscriptions_unpaid_marked_paid_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/subscriptions/{subscription_id}/cancel":{"post":{"summary":"Admin Cancel Subscription","operationId":"admin_cancel_subscription_api_admin_subscriptions__subscription_id__cancel_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/subscriptions/{subscription_id}/renew":{"post":{"summary":"Admin Renew Subscription","description":"Renew a period — free of charge (?free=true) or at cost (charges the\nmember's BLKCOIN via the unified engine + records the payment).","operationId":"admin_renew_subscription_api_admin_subscriptions__subscription_id__renew_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/chat/save-user-message":{"post":{"summary":"Save User Message","operationId":"save_user_message_api_ai_chat_save_user_message_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/chat/stream":{"post":{"summary":"Ai Chat Stream","description":"SSE stream for member chat. Returns incremental thinking-tokens\nfrom the BBAIS sovereign chat models. No internals leak.\nBody: { message, model?, session_id?, history? (optional) }","operationId":"ai_chat_stream_api_ai_chat_stream_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/claude/models":{"get":{"summary":"List Claude Models","description":"Public catalog. Members see the BBAIS sovereign chat models\n(BLKOmni Flash BA1, BLKCODE BA1-Fast) plus BLK-AI: Fable 5 — the\nonly Claude tier surfaced to members (verified Anthropic 2026\nrelease). Fable 5 falls back to BLKCODE BA1-Fast on any error.","operationId":"list_claude_models_api_ai_claude_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/claude/modes":{"get":{"summary":"List Chat Modes","description":"Public catalog of the search modes surfaced to members. Six modes\nship — five live (Deep, Smart, Internal, Web Scrape, Vibration) plus\nEnvision (image gen + image analysis). Rates, multipliers, and raw\nengine names never leak — the block is purely for the picker.\n(Owner directive 2026-07-04: five modes shown; Envision runs on the\nVision side and covers BOTH image generation and image analysis.)","operationId":"list_chat_modes_api_ai_claude_modes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/reasoning/tiers":{"get":{"summary":"List Reasoning Tiers","description":"Public catalog of BLK-AI reasoning tiers surfaced to members.\nBacked by the Parallel Task API's 7 verified processor tiers\n(docs.parallel.ai/task-api/guides/choose-a-processor, 2026-07-01:\ncore, core2x, pro, ultra, ultra2x, ultra4x, ultra8x). Frontend\nNEVER sees the processor strings — only the BLK-AI tier names.\nCost is BLKCOIN (raw USD × 4 per the pricing engine); the USD\nstays server-side.","operationId":"list_reasoning_tiers_api_ai_reasoning_tiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/claude/estimate":{"post":{"summary":"Estimate Claude Call","description":"Pre-call BLKCOIN estimate. Mode-aware: the multiplier depends on the\nsearch mode selected (deep_search 4.5×, smart_search 2.5×, internal 2.0×).\nReturns ONLY the BLKCOIN figure + the user's current balance + sufficiency\nflag. NO USD, NO rates, NO multiplier ever cross this boundary.\n\nBody:\n    {\n      \"model_id\": str,\n      \"search_mode\": \"deep_search\" | \"smart_search\" | \"internal\",\n      \"prompt\": str (optional),\n      \"history_chars\": int (optional),\n      \"system_chars\": int (optional),\n      \"expected_output_tokens\": int (optional, default 800)\n    }","operationId":"estimate_claude_call_api_ai_claude_estimate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/email-settings":{"get":{"summary":"Admin Get Email Settings","operationId":"admin_get_email_settings_api_admin_email_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Admin Set Email Settings","description":"Admin updates email delivery config. Body may include any of:\n    provider (auto|resend|smtp|off), smtp_host, smtp_port, smtp_user,\n    smtp_pass, smtp_from, resend_api_key, resend_from, admin_email.\nSecrets (smtp_pass, resend_api_key) are Fernet-encrypted with\nCONFIG_ENCRYPTION_KEY before being written to app_settings.email; without\nthat key this endpoint refuses to store them. Pass an empty string to clear\na value, which reverts it to the environment variable of the same name.","operationId":"admin_set_email_settings_api_admin_email_settings_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/email-settings/test":{"post":{"summary":"Admin Email Test","description":"Send a test email to the provided address (or admin_email). Returns\nwhether the underlying provider actually succeeded.","operationId":"admin_email_test_api_admin_email_settings_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/sessions":{"get":{"summary":"List Sessions","operationId":"list_sessions_api_ai_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/sessions/{session_id}":{"get":{"summary":"Get Session","operationId":"get_session_api_ai_sessions__session_id__get","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"}}}}}},"patch":{"summary":"Update Session","operationId":"update_session_api_ai_sessions__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"}}}}}},"delete":{"summary":"Delete Session","operationId":"delete_session_api_ai_sessions__session_id__delete","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"}}}}}}},"/api/ai/chat":{"post":{"summary":"Ai Chat","description":"BLK-AI Chat. Routes UNCONDITIONALLY to the BBAIS sovereign chat\nmodels (BLKOmni Flash BA1 / BLKCODE BA1-Fast). Claude is fully hidden\nfrom this surface — no Anthropic call is ever made from member chat.\n\nCODE-LEVEL ENVISION AUTO-ROUTER: regardless of the selected model, a\ngeneration request auto-switches to the generation combo (FlyBLK image /\nBLKCinema video), returns the media, then the session stays on natural\nconversation (never parks on Omni/Envision). Manually selecting the\nEnvision mode forces this generation combo for every render.","operationId":"ai_chat_api_ai_chat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifact-presets":{"get":{"summary":"List Artifact Presets","operationId":"list_artifact_presets_api_ai_artifact_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts/conversation":{"post":{"summary":"Artifact Conversation","description":"Multi-turn conversation BEFORE generating an artifact OR while EDITING an existing one.\n\nModes:\n  - Create mode (default): no `artifact_id` in body. BLK-AI helps the user shape the inputs\n    before they hit GENERATE on the form.\n  - Edit mode: `artifact_id` provided. BLK-AI loads the existing artifact and acts as an\n    editor — it CAN and WILL change the document. When the user confirms a change, the\n    frontend should call POST /api/ai/artifacts/{id}/revise with the agreed instruction.","operationId":"artifact_conversation_api_ai_artifacts_conversation_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts/generate":{"post":{"summary":"Generate Artifact","description":"Generate a sovereign-grade artifact from a preset + user inputs. Saves MD, PDF, HTML.","operationId":"generate_artifact_api_ai_artifacts_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts":{"get":{"summary":"List Artifacts","operationId":"list_artifacts_api_ai_artifacts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts/{artifact_id}":{"get":{"summary":"Get Artifact","operationId":"get_artifact_api_ai_artifacts__artifact_id__get","parameters":[{"name":"artifact_id","in":"path","required":true,"schema":{"type":"string","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Artifact","operationId":"update_artifact_api_ai_artifacts__artifact_id__patch","parameters":[{"name":"artifact_id","in":"path","required":true,"schema":{"type":"string","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Artifact","operationId":"delete_artifact_api_ai_artifacts__artifact_id__delete","parameters":[{"name":"artifact_id","in":"path","required":true,"schema":{"type":"string","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ai/artifacts":{"get":{"summary":"Admin List Artifacts","operationId":"admin_list_artifacts_api_admin_ai_artifacts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts/{artifact_id}/revise":{"post":{"summary":"Revise Artifact","description":"Revise an existing artifact via a conversational edit instruction. Regenerates PDF/HTML/MD.","operationId":"revise_artifact_api_ai_artifacts__artifact_id__revise_post","parameters":[{"name":"artifact_id","in":"path","required":true,"schema":{"type":"string","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ai/artifact-presets":{"post":{"summary":"Admin Add Preset","operationId":"admin_add_preset_api_admin_ai_artifact_presets_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ai/artifact-presets/{preset_id}":{"patch":{"summary":"Admin Update Preset","operationId":"admin_update_preset_api_admin_ai_artifact_presets__preset_id__patch","parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Admin Delete Preset","operationId":"admin_delete_preset_api_admin_ai_artifact_presets__preset_id__delete","parameters":[{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/chat/stop":{"post":{"summary":"Stop Chat","description":"Stop the in-flight reply for a session — marks the streaming assistant doc\naborted; the (detached) generation notices at its next flush and finalizes the\npartial reply. Persists, so it works even after a reload from another tab.","operationId":"stop_chat_api_ai_chat_stop_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/chat/feedback":{"post":{"summary":"Ai Chat Feedback","description":"Record a thumbs up/down on a BLK-AI response with optional preset reasons\nand a free-text note. Snapshots the FULL transcript for admin review.","operationId":"ai_chat_feedback_api_ai_chat_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/chat-feedback":{"get":{"summary":"Admin Chat Feedback","description":"Admin: all model feedback, newest first, with transcripts.","operationId":"admin_chat_feedback_api_admin_chat_feedback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/chat-feedback/{feedback_id}/resolve":{"post":{"summary":"Admin Resolve Feedback","operationId":"admin_resolve_feedback_api_admin_chat_feedback__feedback_id__resolve_post","parameters":[{"name":"feedback_id","in":"path","required":true,"schema":{"type":"string","title":"Feedback Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/memory":{"get":{"summary":"Get User Memory","operationId":"get_user_memory_api_ai_memory_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add User Memory","operationId":"add_user_memory_api_ai_memory_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Clear User Memory","operationId":"clear_user_memory_api_ai_memory_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/memory/{memory_id}":{"patch":{"summary":"Edit User Memory","operationId":"edit_user_memory_api_ai_memory__memory_id__patch","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Remove User Memory","operationId":"remove_user_memory_api_ai_memory__memory_id__delete","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/memory/toggle":{"post":{"summary":"Toggle User Memory","operationId":"toggle_user_memory_api_ai_memory_toggle_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/persona":{"get":{"summary":"Get Ai Persona Route","operationId":"get_ai_persona_route_api_ai_persona_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Set Ai Persona Route","operationId":"set_ai_persona_route_api_ai_persona_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/live-chat/request":{"post":{"summary":"Request Live Chat","operationId":"request_live_chat_api_live_chat_request_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/live-chat/sessions/{session_id}":{"get":{"summary":"Get Live Chat","operationId":"get_live_chat_api_live_chat_sessions__session_id__get","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"}}}}}}},"/api/live-chat/sessions/{session_id}/typing":{"post":{"summary":"Live Chat Typing","description":"Lightweight typing signal (polling-based): stamps a per-role timestamp the other\nside reads to show an 'Agent/Member is typing…' indicator.","operationId":"live_chat_typing_api_live_chat_sessions__session_id__typing_post","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"}}}}}}},"/api/live-chat/sessions/{session_id}/message":{"post":{"summary":"Send Live Chat Msg","operationId":"send_live_chat_msg_api_live_chat_sessions__session_id__message_post","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"}}}}}}},"/api/live-chat/my-sessions":{"get":{"summary":"My Live Chats","operationId":"my_live_chats_api_live_chat_my_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/live-chat/sessions/{session_id}/ai-transcript":{"get":{"summary":"Admin Live Chat Ai Transcript","description":"The FULL BLK-AI conversation the member was in when they requested a live\nagent — so the agent can actually see the whole context (the widget tells the\nmember we can, so we must). Admin-only.","operationId":"admin_live_chat_ai_transcript_api_admin_live_chat_sessions__session_id__ai_transcript_get","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"}}}}}}},"/api/admin/live-chat/sessions":{"get":{"summary":"Admin List Live Chats","operationId":"admin_list_live_chats_api_admin_live_chat_sessions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/live-chat/sessions/{session_id}/pickup":{"post":{"summary":"Pickup Chat","operationId":"pickup_chat_api_admin_live_chat_sessions__session_id__pickup_post","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"}}}}}}},"/api/admin/live-chat/sessions/{session_id}":{"patch":{"summary":"Update Chat Status","operationId":"update_chat_status_api_admin_live_chat_sessions__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"}}}}}}},"/api/admin/design-plans":{"get":{"summary":"Admin Design Plans","operationId":"admin_design_plans_api_admin_design_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ai/copilot/tools":{"get":{"summary":"Copilot Tools","operationId":"copilot_tools_api_admin_ai_copilot_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ai/copilot":{"post":{"summary":"Admin Copilot","description":"Admin Co-Pilot. Returns assistant reply + a list of executed actions.\nBody: { history: [{role,content}], message: str, dry_run?: bool, model_id?: str, session_id?: str, search_mode?: str }","operationId":"admin_copilot_api_admin_ai_copilot_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ai/copilot/sessions":{"get":{"summary":"Copilot List Sessions","operationId":"copilot_list_sessions_api_admin_ai_copilot_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/ai/copilot/sessions/{session_id}":{"get":{"summary":"Copilot Get Session","operationId":"copilot_get_session_api_admin_ai_copilot_sessions__session_id__get","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"}}}}}},"patch":{"summary":"Copilot Rename Session","operationId":"copilot_rename_session_api_admin_ai_copilot_sessions__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"}}}}}},"delete":{"summary":"Copilot Delete Session","operationId":"copilot_delete_session_api_admin_ai_copilot_sessions__session_id__delete","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"}}}}}}},"/api/admin/ai/copilot/stream":{"post":{"summary":"Admin Copilot Stream","operationId":"admin_copilot_stream_api_admin_ai_copilot_stream_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/artifacts/{artifact_id}/rename":{"post":{"summary":"Rename Artifact","operationId":"rename_artifact_api_ai_artifacts__artifact_id__rename_post","parameters":[{"name":"artifact_id","in":"path","required":true,"schema":{"type":"string","title":"Artifact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/vision/generate":{"post":{"summary":"Envision Generate","description":"Submit an Envision generation. Returns the job_id; the FE polls\n/api/ai/vision/generations/{job_id} for status + final URL.","operationId":"envision_generate_api_ai_vision_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/vision/generations":{"get":{"summary":"List Envision Generations","description":"This user's Envision generations, newest first — the saved-generations\nfolder. Every Envision render lands here and stays here.","operationId":"list_envision_generations_api_ai_vision_generations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/vision/generations/{job_id}":{"get":{"summary":"Get Envision Generation","description":"Poll a single Envision generation's status + final result URL.","operationId":"get_envision_generation_api_ai_vision_generations__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/vision/analyze":{"post":{"summary":"Envision Analyze","operationId":"envision_analyze_api_ai_vision_analyze_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/announcement":{"get":{"summary":"Get Announcement","description":"Public. Returns every banner that has something to show. A banner that is\noff, or empty, simply isn't in the list — so the page never renders an empty\nbar and never shifts.","operationId":"get_announcement_api_announcement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/announcement":{"get":{"summary":"Admin Get","operationId":"admin_get_api_admin_announcement_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/announcement/{banner_id}":{"put":{"summary":"Admin Update","description":"Toggle it, rewrite the text, choose the pages, or reorder/keep media.\n\nBody: { enabled?: bool, text?: str, pages?: [path, ...],\n        media_order?: [media_id, ...] }","operationId":"admin_update_api_admin_announcement__banner_id__put","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/announcement/{banner_id}/media":{"post":{"summary":"Admin Upload","description":"A REAL upload. The bytes are read and written to our own storage.\n\nThere is no url endpoint by design — the founder does not allow linked\nmedia, so the banner can only ever show a file we actually hold.","operationId":"admin_upload_api_admin_announcement__banner_id__media_post","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_upload_api_admin_announcement__banner_id__media_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/announcement/{banner_id}/media/presign":{"post":{"summary":"Admin Presign Media","description":"Hand back a url the BROWSER uploads to, straight into R2.\n\nA 4-minute video has no business travelling through the backend. On this path\nthe bytes go from the founder's machine directly to storage: no proxy body\nlimit, no memory on our side, no size ceiling, and the upload cannot take the\nplatform down. The backend only names the destination and, afterwards, records\nwhat landed.\n\nBody: { filename, content_type }","operationId":"admin_presign_media_api_admin_announcement__banner_id__media_presign_post","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/announcement/{banner_id}/media/confirm":{"post":{"summary":"Admin Confirm Media","description":"Register a file the browser just uploaded straight to R2.\n\nWe VERIFY it actually landed (and how big it is) before we record it — a\nclient saying \"it worked\" is not evidence.","operationId":"admin_confirm_media_api_admin_announcement__banner_id__media_confirm_post","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/announcement/{banner_id}/media/{media_id}/poster":{"post":{"summary":"Admin Upload Poster","description":"Attach a POSTER (thumbnail) to a video.\n\nA <video> with no poster paints BLACK until the member presses play — the\nbrowser has no frame to show. The poster is that first frame. The admin UI\ngrabs one from the video automatically on upload; this endpoint also lets the\nfounder upload her own.\n\nAn image — a real upload, like everything else here.","operationId":"admin_upload_poster_api_admin_announcement__banner_id__media__media_id__poster_post","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}},{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_upload_poster_api_admin_announcement__banner_id__media__media_id__poster_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/announcement/{banner_id}/media/{media_id}":{"delete":{"summary":"Admin Delete Media","operationId":"admin_delete_media_api_admin_announcement__banner_id__media__media_id__delete","parameters":[{"name":"banner_id","in":"path","required":true,"schema":{"type":"string","title":"Banner Id"}},{"name":"media_id","in":"path","required":true,"schema":{"type":"string","title":"Media Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docs/catalog":{"get":{"summary":"Docs Catalog","description":"Everything the docs page renders. Public, member-safe, read live.","operationId":"docs_catalog_api_docs_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/ledger":{"get":{"summary":"Get Ledger","operationId":"get_ledger_api_blkcoin_ledger_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/ledger/recent":{"get":{"summary":"Get Ledger Recent","operationId":"get_ledger_recent_api_blkcoin_ledger_recent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/summary":{"get":{"summary":"Get Summary","operationId":"get_summary_api_blkcoin_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/ledger":{"get":{"summary":"Admin All Ledger","description":"FULL platform BLKCOIN ledger — EVERY member's activity in one view, with\nper-entry account details. Paginated, filterable by member.","operationId":"admin_all_ledger_api_admin_blkcoin_ledger_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/identity-audit":{"get":{"summary":"Identity Audit","description":"PII-FREE health check: how many ledger + subscription rows resolve to a\nreal email vs a placeholder. Returns counts and masked id signatures only —\nno emails, usernames, or full user_ids — so it is safe to read directly.","operationId":"identity_audit_api_blkcoin_identity_audit_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/totals":{"get":{"summary":"Admin Totals","description":"Platform-wide purchased / spent / awarded from the unified ledger.","operationId":"admin_totals_api_admin_blkcoin_totals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/ledger/{user_id}":{"get":{"summary":"Admin User Ledger","operationId":"admin_user_ledger_api_admin_blkcoin_ledger__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkcoin/pools":{"get":{"summary":"My Pools","description":"The member's balance split into BLKCOIN they bought and BLKCOIN the platform issued.","operationId":"my_pools_api_blkcoin_pools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/spend-rules":{"get":{"summary":"Public Spend Rules","description":"How much of a payment may be BLKCOIN the platform issued, per category (shown in FAQs, Docs, checkout).","operationId":"public_spend_rules_api_blkcoin_spend_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkcoin/spend-quote":{"get":{"summary":"Spend Quote","description":"How a BLKCOIN payment would be funded (issued vs bought), before paying.","operationId":"spend_quote_api_blkcoin_spend_quote_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/spend-rules":{"get":{"summary":"Admin Get Spend Rules","operationId":"admin_get_spend_rules_api_admin_blkcoin_spend_rules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Admin Set Spend Rules","description":"Master admin only: the caps on BLKCOIN issued by the platform, per category.","operationId":"admin_set_spend_rules_api_admin_blkcoin_spend_rules_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/blkcoin/spend-rules/item":{"put":{"summary":"Admin Set Item Cap","description":"Master admin only: one product's or service's own cap (overrides its category). Clear with pct and blkcoin both null.","operationId":"admin_set_item_cap_api_admin_blkcoin_spend_rules_item_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/paypal/config":{"get":{"summary":"Paypal Config","operationId":"paypal_config_api_paypal_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkpay/create-order":{"post":{"summary":"Create Order","operationId":"create_order_api_blkpay_create_order_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkpay/capture":{"post":{"summary":"Capture Order","operationId":"capture_order_api_blkpay_capture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/paypal/webhook":{"post":{"summary":"Paypal Webhook","operationId":"paypal_webhook_api_paypal_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkpay/my-orders":{"get":{"summary":"My Orders","operationId":"my_orders_api_blkpay_my_orders_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkpay/return":{"get":{"summary":"Blkpay Return","description":"PayPal redirects here after the user approves. We capture the order and return\na tiny HTML page that postMessages success back to the opener and closes itself.","operationId":"blkpay_return_api_blkpay_return_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"PayerID","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payerid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkpay/cancel":{"get":{"summary":"Blkpay Cancel","operationId":"blkpay_cancel_api_blkpay_cancel_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkpay/plan-payments/create-order":{"post":{"summary":"Plan Payments Create Order","operationId":"plan_payments_create_order_api_blkpay_plan_payments_create_order_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkpay/plan-payments/capture":{"post":{"summary":"Plan Payments Capture","operationId":"plan_payments_capture_api_blkpay_plan_payments_capture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/orders":{"get":{"summary":"List Orders","description":"Admin: searchable, filterable, hydrated purchase list.\n`q` matches order_number, custom_order_number, payer_email, user email,\nuser display_name, product title, purchase_id, transaction_id.","operationId":"list_orders_api_admin_orders_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"plan","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orders/{purchase_id}":{"get":{"summary":"Get Order","operationId":"get_order_api_admin_orders__purchase_id__get","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"summary":"Update Order","description":"Admin: set/clear custom_order_number; optional notes.","operationId":"update_order_api_admin_orders__purchase_id__patch","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orders/backfill-numbers":{"post":{"summary":"Backfill","operationId":"backfill_api_admin_orders_backfill_numbers_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/me/orders/{purchase_id}":{"get":{"summary":"My Order","operationId":"my_order_api_me_orders__purchase_id__get","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"summary":"Cinema Auth Me","description":"Confirm session for the Cinema workspace.\nRe-uses the existing platform's session-token auth. Returns the minimum\nfields the Cinema shell needs (no internal flags, no engine ids).","operationId":"cinema_auth_me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/projects":{"get":{"summary":"List Projects","description":"List the authenticated user's Cinema projects, newest first.","operationId":"list_projects_api_v1_cinema_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Project","description":"Create a new Cinema project. Body: { name, type? }.\n`type` defaults to 'series'. Owner is the authenticated user.","operationId":"create_project_api_v1_cinema_projects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/projects/{project_id}":{"get":{"summary":"Get Project","description":"Open one Cinema project. 404 if not owned by the authenticated user.","operationId":"get_project_api_v1_cinema_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/admin/schema-status":{"get":{"summary":"Cinema Schema Status","operationId":"cinema_schema_status_api_v1_cinema_admin_schema_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/references":{"post":{"summary":"Upload Reference","description":"Upload a single reference file. Body is multipart:\n    file, media_type ('image'|'video'|'audio'), project_id.\nFile goes to a private path under CINEMA_UPLOAD_ROOT, served only via\nthe authenticated /references/{id}/file endpoint to its owner.","operationId":"upload_reference_api_v1_cinema_references_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_reference_api_v1_cinema_references_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List References","description":"List the user's existing references for a project (picker for slots).\nIncludes assets imported from the Saved Media library (`shared_in_projects`).","operationId":"list_references_api_v1_cinema_references_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/references/{reference_id}/file":{"get":{"summary":"Serve Reference File","description":"Owner-only file serving. The on-disk path is never returned.","operationId":"serve_reference_file_api_v1_cinema_references__reference_id__file_get","parameters":[{"name":"reference_id","in":"path","required":true,"schema":{"type":"string","title":"Reference Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/characters/check-handle":{"get":{"summary":"Check Character Handle","operationId":"check_character_handle_api_v1_cinema_characters_check_handle_get","parameters":[{"name":"handle","in":"query","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"character_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/characters":{"get":{"summary":"List Characters","operationId":"list_characters_api_v1_cinema_characters_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Character","description":"Create character. Body:\n    { project_id, name, tag_handle, canonical_description, behavioral_notes,\n      voice_id, do_not_render[], is_shared_across_projects,\n      references: [{reference_id, slot_label, use_for}] }\nReference links are written transactionally — on any failure the partial\ncharacter + any link rows are removed (no orphans, no false success).","operationId":"create_character_api_v1_cinema_characters_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/characters/{character_id}":{"get":{"summary":"Get Character","operationId":"get_character_api_v1_cinema_characters__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Character","operationId":"update_character_api_v1_cinema_characters__character_id__put","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Character","operationId":"delete_character_api_v1_cinema_characters__character_id__delete","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/characters/{character_id}/versions":{"get":{"summary":"Character Versions","operationId":"character_versions_api_v1_cinema_characters__character_id__versions_get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/characters/{character_id}/versions/{version_id}/restore":{"post":{"summary":"Restore Character Version","operationId":"restore_character_version_api_v1_cinema_characters__character_id__versions__version_id__restore_post","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"string","title":"Character Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/elements/check-handle":{"get":{"summary":"Check Element Handle","operationId":"check_element_handle_api_v1_cinema_elements_check_handle_get","parameters":[{"name":"handle","in":"query","required":true,"schema":{"type":"string","title":"Handle"}},{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"element_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/elements":{"get":{"summary":"List Elements","operationId":"list_elements_api_v1_cinema_elements_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Element","operationId":"create_element_api_v1_cinema_elements_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/elements/{element_id}":{"get":{"summary":"Get Element","operationId":"get_element_api_v1_cinema_elements__element_id__get","parameters":[{"name":"element_id","in":"path","required":true,"schema":{"type":"string","title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Element","operationId":"update_element_api_v1_cinema_elements__element_id__put","parameters":[{"name":"element_id","in":"path","required":true,"schema":{"type":"string","title":"Element Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Element","operationId":"delete_element_api_v1_cinema_elements__element_id__delete","parameters":[{"name":"element_id","in":"path","required":true,"schema":{"type":"string","title":"Element Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/resolve-assets":{"post":{"summary":"Resolve Assets","description":"Scan text for @-handles + exact names; return the resolved character +\nelement context (with all linked references, slot-labeled). This is what\nthe precision wrapper (Phase 5) and the generation pipeline (Phase 7) will\ncall so the user never re-uploads or re-describes a saved asset.","operationId":"resolve_assets_api_v1_cinema_resolve_assets_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/tag-suggest":{"get":{"summary":"Tag Suggest","operationId":"tag_suggest_api_v1_cinema_tag_suggest_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/director/presets":{"get":{"summary":"Director Presets","description":"Public per-user. Returns the dropdown catalog for the Camera & Style panel.","operationId":"director_presets_api_v1_cinema_director_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/director/draft":{"get":{"summary":"Get Director Draft","operationId":"get_director_draft_api_v1_cinema_director_draft_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Upsert Director Draft","operationId":"upsert_director_draft_api_v1_cinema_director_draft_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Clear Director Draft","operationId":"clear_director_draft_api_v1_cinema_director_draft_delete","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/director/expand":{"post":{"summary":"Director Expand","description":"Synchronous expand — kept for the low-stakes \"live reasoning\" side\npanel (director/expand/stream) whose caller already tolerates a silent\nfailure without blocking the render. The PRIMARY interactive Director\n(\"Compose a shot\") now uses the async submit/poll pair below, which\ntolerates the real cold-boot window instead of this endpoint's tight\nsame-request budget.","operationId":"director_expand_api_v1_cinema_director_expand_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/director/expand/submit":{"post":{"summary":"Director Expand Submit","description":"Submit a Director expand job. Returns immediately with job_id +\nstatus='waking'; the frontend polls GET .../jobs/{job_id}. Tolerates\na real cold-boot window (up to 15 min) instead of dying on a tight\nsame-request budget.","operationId":"director_expand_submit_api_v1_cinema_director_expand_submit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/director/expand/jobs/{job_id}":{"get":{"summary":"Director Expand Job Status","operationId":"director_expand_job_status_api_v1_cinema_director_expand_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/director/expand/stream":{"post":{"summary":"Director Expand Stream","operationId":"director_expand_stream_api_v1_cinema_director_expand_stream_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/director/validate":{"post":{"summary":"Director Validate","operationId":"director_validate_api_v1_cinema_director_validate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/director/wrap":{"post":{"summary":"Director Wrap","operationId":"director_wrap_api_v1_cinema_director_wrap_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/wallet/balance":{"get":{"summary":"Get Wallet Balance","operationId":"get_wallet_balance_api_v1_cinema_wallet_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/wallet/transactions":{"get":{"summary":"List Wallet Transactions","operationId":"list_wallet_transactions_api_v1_cinema_wallet_transactions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/wallet/topup/create-order":{"post":{"summary":"Topup Create Order","description":"Create a BLKPAY (PayPal v2) order for a BLKCOIN top-up.\nBody: { amount_blkcoin: float, return_origin?: str }\nReturns: { order_id, amount_usd, amount_blkcoin, approve_url }","operationId":"topup_create_order_api_v1_cinema_wallet_topup_create_order_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/wallet/topup/capture":{"post":{"summary":"Topup Capture","description":"Capture a BLKPAY order and credit the user's BLKCOIN balance.\nBody: { order_id: str }\nIdempotent — re-calling on an already-captured order returns the same result.","operationId":"topup_capture_api_v1_cinema_wallet_topup_capture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/library":{"get":{"summary":"List Library","description":"Saved Media — main hub. Lists EVERY asset owned by the caller across\nevery project they own (plus assets shared into projects they own).","operationId":"list_library_api_v1_cinema_library_get","parameters":[{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"}},{"name":"project_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/library/projects":{"get":{"summary":"List Library Projects","description":"Project picker (used by Import flow + filter chip).","operationId":"list_library_projects_api_v1_cinema_library_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cinema/library/{reference_id}":{"delete":{"summary":"Delete Library Asset","description":"Owner-only delete. Removes the asset row, its on-disk file, and any\nreference_links pointing at it (so character/element slots stop showing\na broken thumbnail).","operationId":"delete_library_asset_api_v1_cinema_library__reference_id__delete","parameters":[{"name":"reference_id","in":"path","required":true,"schema":{"type":"string","title":"Reference Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/library/{reference_id}/import":{"post":{"summary":"Import To Project","description":"Make an asset available inside another project the user owns.\nBody: { target_project_id: str }\nSame stored file — no duplication. Idempotent.","operationId":"import_to_project_api_v1_cinema_library__reference_id__import_post","parameters":[{"name":"reference_id","in":"path","required":true,"schema":{"type":"string","title":"Reference Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cinema/library/{reference_id}/save-as-ref":{"post":{"summary":"Save As Reference","description":"Attach an existing library asset as a reusable reference somewhere.\nBody:\n  destination: \"character\" | \"element\" | \"moodboard\" | \"loose\"\n  target_id:   character_id  | element_id | moodboard_id  | (ignored for loose)\n  slot_label:  \"@Image1\"...\"@Image9\" / \"@Video1\".../ \"@Audio1\"... (ignored for loose+moodboard)\n  use_for:     optional free-text note","operationId":"save_as_reference_api_v1_cinema_library__reference_id__save_as_ref_post","parameters":[{"name":"reference_id","in":"path","required":true,"schema":{"type":"string","title":"Reference Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects":{"get":{"tags":["blkbuilder"],"summary":"List Projects","operationId":"list_projects_api_blkbuilder_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["blkbuilder"],"summary":"Create Project","operationId":"create_project_api_blkbuilder_projects_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}":{"get":{"tags":["blkbuilder"],"summary":"Get Project","operationId":"get_project_api_blkbuilder_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Delete Project","operationId":"delete_project_api_blkbuilder_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["blkbuilder"],"summary":"Rename Project","description":"Rename a project. Owner-scoped. Trims, bounds the length.","operationId":"rename_project_api_blkbuilder_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/preview-status":{"get":{"tags":["blkbuilder"],"summary":"Preview Status","description":"Authoritative readiness probe used by the iframe before mount.\nReturns {running, ready} — ready means Vite is bound and responding.","operationId":"preview_status_api_blkbuilder_projects__project_id__preview_status_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/platform-types":{"get":{"tags":["blkbuilder"],"summary":"List Platform Types","description":"The platform types a build can declare — read from the installed template packs.\n\nVertical-blind: this returns whatever is installed under templates/. Add a pack and\nit appears here; core is not edited.","operationId":"list_platform_types_api_blkbuilder_platform_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/intake":{"get":{"tags":["blkbuilder"],"summary":"Get Intake","operationId":"get_intake_api_blkbuilder_projects__project_id__intake_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blkbuilder"],"summary":"Put Intake","description":"Save the user's brand intake. PRESERVES previously saved values — only\nkeys explicitly present in the body are updated (empty string = clear that\nkey intentionally; omitting a key = keep prior value). Required answers\n(platform_name + purpose) must be present somewhere — body or prior save.","operationId":"put_intake_api_blkbuilder_projects__project_id__intake_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/custom-ai/models":{"get":{"tags":["blkbuilder"],"summary":"Custom Ai Models","description":"UPDATE AI MODEL LIST (Phase 8.3): the current BBAIS models a custom AI can\nrun on. Members click 'Update AI Model List' to pull in newly-shipped BBAIS\nmodels. Only BBAIS-owned models ever appear.","operationId":"custom_ai_models_api_blkbuilder_projects__project_id__custom_ai_models_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/logo":{"post":{"tags":["blkbuilder"],"summary":"Upload Logo","description":"Accept a PNG/JPG/JPEG/SVG/WEBP up to 10 MB. Rejects anything\nelse. Overwrites any prior logo. Persists `intake.logo_path` so\nthe builder engine can reference it.","operationId":"upload_logo_api_blkbuilder_projects__project_id__logo_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_blkbuilder_projects__project_id__logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Get Logo","description":"Serve the logo binary. Owner-scoped. Prefers durable R2, falls back to\nany legacy on-disk copy.","operationId":"get_logo_api_blkbuilder_projects__project_id__logo_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Delete Logo","operationId":"delete_logo_api_blkbuilder_projects__project_id__logo_delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/original-prompt":{"put":{"tags":["blkbuilder"],"summary":"Save Original Prompt","operationId":"save_original_prompt_api_blkbuilder_projects__project_id__original_prompt_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Get Original Prompt","operationId":"get_original_prompt_api_blkbuilder_projects__project_id__original_prompt_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/additional-details":{"put":{"tags":["blkbuilder"],"summary":"Put Additional Details","description":"Save the separate 'Additional Details' box (8,000-char cap). Persisted on\nthe project so 'view full prompt' always has it and the planner injects it.","operationId":"put_additional_details_api_blkbuilder_projects__project_id__additional_details_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/full-prompt-view":{"get":{"tags":["blkbuilder"],"summary":"Full Prompt View","description":"Everything 'view full prompt' shows: Additional Details + the full original\nprompt, plus the latest build STRUCTURE and the latest PHASES for the toggle.","operationId":"full_prompt_view_api_blkbuilder_projects__project_id__full_prompt_view_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/files":{"get":{"tags":["blkbuilder"],"summary":"List Files","operationId":"list_files_api_blkbuilder_projects__project_id__files_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/file":{"get":{"tags":["blkbuilder"],"summary":"Read File","operationId":"read_file_api_blkbuilder_projects__project_id__file_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blkbuilder"],"summary":"Write File","operationId":"write_file_api_blkbuilder_projects__project_id__file_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Delete File","operationId":"delete_file_api_blkbuilder_projects__project_id__file_delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/region":{"get":{"tags":["blkbuilder"],"summary":"Read Region","operationId":"read_region_api_blkbuilder_projects__project_id__region_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}},{"name":"start","in":"query","required":true,"schema":{"type":"integer","title":"Start"}},{"name":"end","in":"query","required":true,"schema":{"type":"integer","title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/patch":{"post":{"tags":["blkbuilder"],"summary":"Apply Patch","operationId":"apply_patch_api_blkbuilder_projects__project_id__patch_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/run":{"post":{"tags":["blkbuilder"],"summary":"Run Project","operationId":"run_project_api_blkbuilder_projects__project_id__run_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/stop":{"post":{"tags":["blkbuilder"],"summary":"Stop Project","operationId":"stop_project_api_blkbuilder_projects__project_id__stop_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/client-error":{"post":{"tags":["blkbuilder"],"summary":"Report Client Error","description":"SELF-HEAL: the built app (index.html early handler + ErrorBoundary) reports the\nACTUAL runtime / module-level error that blanked the preview. Stored on the project\nso the verification loop can hand it to CODEBLK to fix the real crash — the missing\nlink that let 'blank white screen' persist (BLKOmni could SEE blank but had no error\nto fix from). Unauthenticated on purpose (the preview app has no session); diagnostic\nonly, scoped to a known project id, capped at 20, and NEVER trusted/executed as code.","operationId":"report_client_error_api_blkbuilder_projects__project_id__client_error_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/stream-demo":{"get":{"tags":["blkbuilder"],"summary":"Stream Demo","description":"Proof that the communication path streams incremental events to\nthe client (not one final blob). Returns 5 labeled steps.","operationId":"stream_demo_api_blkbuilder_stream_demo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/llm/stream-demo":{"get":{"tags":["blkbuilder"],"summary":"Llm Stream Demo","description":"Live proof that the single adapter streams tokens from the real\nbrain. Precision-first by default (temperature=0, no creativity).","operationId":"llm_stream_demo_api_blkbuilder_llm_stream_demo_get","parameters":[{"name":"prompt","in":"query","required":true,"schema":{"type":"string","title":"Prompt"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"demo","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/preview/{project_id}/{path}":{"put":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blkbuilder"],"summary":"Preview Proxy","description":"Forward HTTP to the per-project Vite dev server. Live preview\ntherefore reflects real files (preview equals live — E5).\n\nHonest 503 handling: when Vite is not running we return a polite\n200 HTML \"preview not ready\" page so Cloudflare doesn't wrap it\nwith the generic origin-error overlay. The caller (the iframe)\nsees a clean BLK-branded splash instead of a Cloudflare 503.","operationId":"preview_proxy_api_blkbuilder_preview__project_id___path__put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/plan":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Generate Plan","operationId":"blkbuilder_generate_plan_api_blkbuilder_projects__project_id__plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plan":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Generate Phase Plan","description":"PROMPT 2 · IMPL 2 — strict JSON phase-plan for the card renderer.\nPersists to `blkbuilder_phase_plans` collection so the FE can list,\nedit, split/merge, or regenerate.","operationId":"blkbuilder_generate_phase_plan_api_blkbuilder_projects__project_id__phase_plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/plans":{"get":{"tags":["blkbuilder"],"summary":"Blkbuilder List Plans","description":"Latest build plans — §7E place-restore: reopening a project brings the\nmember back to their structure exactly where they left off.","operationId":"blkbuilder_list_plans_api_blkbuilder_projects__project_id__plans_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans":{"get":{"tags":["blkbuilder"],"summary":"Blkbuilder List Phase Plans","operationId":"blkbuilder_list_phase_plans_api_blkbuilder_projects__project_id__phase_plans_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}":{"patch":{"tags":["blkbuilder"],"summary":"Blkbuilder Edit Phase Plan","description":"Edit a phase-plan: reorder, split, merge, delete phases, or\nupdate titles/descriptions/estimated_time. The FE sends the FULL\nupdated `phases` array — we validate and replace.","operationId":"blkbuilder_edit_phase_plan_api_blkbuilder_projects__project_id__phase_plans__plan_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Blkbuilder Delete Phase Plan","operationId":"blkbuilder_delete_phase_plan_api_blkbuilder_projects__project_id__phase_plans__plan_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Blkbuilder Get Phase Plan","operationId":"blkbuilder_get_phase_plan_api_blkbuilder_projects__project_id__phase_plans__plan_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/start":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Phase Plan Start","description":"Kick off the runner. Body: {mode: 'manual' | 'automatic'}.\nSets run_mode + advances to phase 1 (status='building').","operationId":"blkbuilder_phase_plan_start_api_blkbuilder_projects__project_id__phase_plans__plan_id__start_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/advance":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Phase Plan Advance","description":"Manual mode: member confirms the current phase → advance to the\nnext. Automatic mode: this endpoint also advances (called by the FE\nautomatically after each phase completes).\nReturns status. When current_phase > total, status flips to 'done'.","operationId":"blkbuilder_phase_plan_advance_api_blkbuilder_projects__project_id__phase_plans__plan_id__advance_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/cancel":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Phase Plan Cancel","operationId":"blkbuilder_phase_plan_cancel_api_blkbuilder_projects__project_id__phase_plans__plan_id__cancel_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/current-phase-prompt":{"get":{"tags":["blkbuilder"],"summary":"Blkbuilder Phase Current Prompt","description":"Returns the FE-usable build prompt for whichever phase is\ncurrently active — the phase's description + sections + a compact\nheader. The FE feeds this into the existing markdown-plan flow so\nthe /build endpoint executes it. This keeps Impl 3 wired to the\nexisting (tested) build engine without duplicating logic.","operationId":"blkbuilder_phase_current_prompt_api_blkbuilder_projects__project_id__phase_plans__plan_id__current_phase_prompt_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/plans/{plan_id}":{"get":{"tags":["blkbuilder"],"summary":"Blkbuilder Get Plan","operationId":"blkbuilder_get_plan_api_blkbuilder_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["blkbuilder"],"summary":"Blkbuilder Edit Plan","operationId":"blkbuilder_edit_plan_api_blkbuilder_plans__plan_id__patch","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/plans/{plan_id}/confirm":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Confirm Plan","operationId":"blkbuilder_confirm_plan_api_blkbuilder_plans__plan_id__confirm_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/plans/{plan_id}/discard":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Discard Plan","operationId":"blkbuilder_discard_plan_api_blkbuilder_plans__plan_id__discard_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/build":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Build","operationId":"blkbuilder_build_api_blkbuilder_projects__project_id__build_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/build/stream":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Build Stream","operationId":"blkbuilder_build_stream_api_blkbuilder_projects__project_id__build_stream_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/sessions":{"get":{"tags":["blkbuilder"],"summary":"List Build Sessions","operationId":"list_build_sessions_api_blkbuilder_projects__project_id__sessions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/sessions/{session_id}/steps":{"get":{"tags":["blkbuilder"],"summary":"List Build Steps","operationId":"list_build_steps_api_blkbuilder_sessions__session_id__steps_get","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"}}}}}}},"/api/blkbuilder/projects/{project_id}/history":{"get":{"tags":["blkbuilder"],"summary":"List File History","operationId":"list_file_history_api_blkbuilder_projects__project_id__history_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/revert":{"post":{"tags":["blkbuilder"],"summary":"Revert File","operationId":"revert_file_api_blkbuilder_projects__project_id__revert_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/edit-batches":{"get":{"tags":["blkbuilder"],"summary":"List Edit Batches","operationId":"list_edit_batches_api_blkbuilder_projects__project_id__edit_batches_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/revert-last":{"post":{"tags":["blkbuilder"],"summary":"Revert Last Edit","description":"Undo an edit batch. Body {} => the most recent batch; {\"batch_id\": ts}\n=> that specific batch. Reverts EVERY file the batch touched, back to the\ncontent that existed before the batch.","operationId":"revert_last_edit_api_blkbuilder_projects__project_id__revert_last_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/restore-file":{"post":{"tags":["blkbuilder"],"summary":"Restore File From History","description":"FORWARD restore: re-write a path with the newest REAL content from the\nappend-only history (skipping any auto-stub/placeholder versions). This heals\na file that was clobbered by something that does NOT log history — e.g. the\nstub generator replacing a missing App.jsx with a 'being built' placeholder on\na partial hydration. Persists to R2 + pushes to the live preview so the fix\nsurvives reload/redeploy. Body: {\"path\": \"src/App.jsx\"}.","operationId":"restore_file_from_history_api_blkbuilder_projects__project_id__restore_file_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/shield/info":{"get":{"tags":["blkbuilder"],"summary":"Blkshield Info","operationId":"blkshield_info_api_blkbuilder_shield_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/fork":{"post":{"tags":["blkbuilder"],"summary":"Fork Project Thread","operationId":"fork_project_thread_api_blkbuilder_projects__project_id__fork_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/clone/rights-contract":{"get":{"tags":["blkbuilder"],"summary":"Clone Rights Contract","description":"The usage-rights contract shown before an own-platform clone.","operationId":"clone_rights_contract_api_blkbuilder_clone_rights_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/start":{"post":{"tags":["blkbuilder"],"summary":"Clone Start","operationId":"clone_start_api_blkbuilder_projects__project_id__clone_start_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}":{"get":{"tags":["blkbuilder"],"summary":"Clone Get","operationId":"clone_get_api_blkbuilder_projects__project_id__clone__clone_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/verify":{"post":{"tags":["blkbuilder"],"summary":"Clone Verify","operationId":"clone_verify_api_blkbuilder_projects__project_id__clone__clone_id__verify_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/reference":{"post":{"tags":["blkbuilder"],"summary":"Clone Upload Reference","operationId":"clone_upload_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_clone_upload_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/reference/{ref_id}":{"get":{"tags":["blkbuilder"],"summary":"Clone Get Reference","operationId":"clone_get_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference__ref_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}},{"name":"ref_id","in":"path","required":true,"schema":{"type":"string","title":"Ref Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Clone Delete Reference","operationId":"clone_delete_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference__ref_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}},{"name":"ref_id","in":"path","required":true,"schema":{"type":"string","title":"Ref Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/references":{"get":{"tags":["blkbuilder"],"summary":"Clone List References","operationId":"clone_list_references_api_blkbuilder_projects__project_id__clone__clone_id__references_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/scrape":{"post":{"tags":["blkbuilder"],"summary":"Clone Scrape","description":"Scrape the clone target via Parallel Extract API. Also downloads\nany image URLs surfaced by the extract so the user can review them\nbefore the plan runs.","operationId":"clone_scrape_api_blkbuilder_projects__project_id__clone__clone_id__scrape_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/rescrape-page":{"post":{"tags":["blkbuilder"],"summary":"Rescrape Page","description":"PER-PAGE RESCRAPE (owner: \"the pages rescraped CORRECTLY individually\", correct in\n≤2 tries). Re-fetch ONE page fresh, swap ONLY that page's block in build_source_context\n(never touching the other pages), refresh the OWNED per-page content (blkClonePages) +\nmedia, and re-own via the quality pass. Bounded to 2 fetch attempts so a flaky page is\ncorrected in 2 tries max.","operationId":"rescrape_page_api_blkbuilder_projects__project_id__rescrape_page_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/plan":{"post":{"tags":["blkbuilder"],"summary":"Clone Generate Plan","description":"Generate a CLONE-MODE build plan via the sovereign fleet (BLKCODE\nFast BA1 by default, Fable 5 if selected). Image ANALYSIS is deferred\nuntil BLKOmni is live — reference photos are stored for user review\nand their existence is signaled to the planner in text.\n\nPersists into `blkbuilder_build_plans` so the Phase 0-A confirmation\nflow (review/edit/confirm/build) takes over from here.","operationId":"clone_generate_plan_api_blkbuilder_projects__project_id__clone__clone_id__plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/clone/{clone_id}/discard":{"post":{"tags":["blkbuilder"],"summary":"Clone Discard","operationId":"clone_discard_api_blkbuilder_projects__project_id__clone__clone_id__discard_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"clone_id","in":"path","required":true,"schema":{"type":"string","title":"Clone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/resume":{"post":{"tags":["blkbuilder"],"summary":"Resume And Repair","description":"RESUME & REPAIR — pick up a failed OR finished build and drive it to a\ncomplete, compiling state WITHOUT restarting it. Regenerates only the\nunfinished files (from their own intended plan), stubs anything still\nunfinished so the preview always renders, then re-verifies. Progress streams\nover the existing run/stream tail; this returns immediately.","operationId":"resume_and_repair_api_blkbuilder_projects__project_id__phase_plans__plan_id__resume_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/run/stream":{"post":{"tags":["blkbuilder"],"summary":"Phase Plan Run Stream","description":"RESUMABLE TAIL of the detached build. Spawns the runner if the plan is\nin 'building' and none is active; then streams persisted events from the\nbeginning (or ?after=<event id>). Disconnecting only stops the tail - the\nbuild itself keeps running server-side.","operationId":"phase_plan_run_stream_api_blkbuilder_projects__project_id__phase_plans__plan_id__run_stream_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/phase-plans/{plan_id}/build-status":{"get":{"tags":["blkbuilder"],"summary":"Phase Plan Build Status","operationId":"phase_plan_build_status_api_blkbuilder_projects__project_id__phase_plans__plan_id__build_status_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/quality-pass":{"post":{"tags":["blkbuilder"],"summary":"Blkbuilder Run Quality Pass","description":"Manually re-run the SEO / meta / OG / JSON-LD / sitemap / robots\ngeneration. Called automatically by the phase runner after each\nsuccessful phase, but exposed here for on-demand refresh (e.g. after\nintake edits).","operationId":"blkbuilder_run_quality_pass_api_blkbuilder_projects__project_id__quality_pass_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/quality-report":{"get":{"tags":["blkbuilder"],"summary":"Blkbuilder Get Quality Report","operationId":"blkbuilder_get_quality_report_api_blkbuilder_projects__project_id__quality_report_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/view-gate/status":{"get":{"tags":["blkbuilder"],"summary":"View Gate Status","operationId":"view_gate_status_api_blkbuilder_view_gate_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/setup":{"post":{"tags":["blkbuilder"],"summary":"View Gate Setup","operationId":"view_gate_setup_api_blkbuilder_view_gate_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/unlock":{"post":{"tags":["blkbuilder"],"summary":"View Gate Unlock","operationId":"view_gate_unlock_api_blkbuilder_view_gate_unlock_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/lock":{"post":{"tags":["blkbuilder"],"summary":"View Gate Lock","operationId":"view_gate_lock_api_blkbuilder_view_gate_lock_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/change":{"post":{"tags":["blkbuilder"],"summary":"View Gate Change","operationId":"view_gate_change_api_blkbuilder_view_gate_change_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/request-reset":{"post":{"tags":["blkbuilder"],"summary":"View Gate Request Reset","description":"Email a single-use reset link for the VIEW password. Always 202 with the\nsame generic message (enumeration-safe, mirrors the account reset flow).\nDelivery honestly logs `not_configured` until SMTP is activated — the flow\nis fully wired and starts delivering the moment the env vars land.","operationId":"view_gate_request_reset_api_blkbuilder_view_gate_request_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/reset":{"post":{"tags":["blkbuilder"],"summary":"View Gate Reset","description":"Complete a view-password reset. Single-use, expiry-checked.","operationId":"view_gate_reset_api_blkbuilder_view_gate_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/master/status":{"get":{"tags":["blkbuilder"],"summary":"Master Status","operationId":"master_status_api_blkbuilder_view_gate_master_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/master":{"put":{"tags":["blkbuilder"],"summary":"Master Set","description":"Set/rotate the master password. Admin-only; rotation is audit-logged.\nRotating revokes every outstanding master unlock immediately.","operationId":"master_set_api_blkbuilder_view_gate_master_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/master/unlock":{"post":{"tags":["blkbuilder"],"summary":"Master Unlock","description":"Admin enters the master password + the member to work on; returns an\nunlock token that opens THAT member's gated views. Logged.","operationId":"master_unlock_api_blkbuilder_view_gate_master_unlock_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/master/log":{"get":{"tags":["blkbuilder"],"summary":"Master Log","description":"The required audit trail — who used the master key, on which member,\nwhen, and what was accessed.","operationId":"master_log_api_blkbuilder_view_gate_master_log_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/view-gate/master/projects":{"get":{"tags":["blkbuilder"],"summary":"Master Projects","description":"List the unlocked member's BLKBUILDER projects so admin can pick one\nto open its gated code/DB views. Requires a live master unlock token.","operationId":"master_projects_api_blkbuilder_view_gate_master_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/recovery-options":{"get":{"tags":["blkbuilder"],"summary":"View Gate Recovery Options","description":"Which ways back in this member actually has — the UI shows only these.","operationId":"view_gate_recovery_options_api_blkbuilder_view_gate_recovery_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/reset-with-account":{"post":{"tags":["blkbuilder"],"summary":"View Gate Reset With Account","description":"Signed-in member proves it's them with their MyBLKWorldHQ ACCOUNT password,\nthen sets a new view password. Same guessing limit as recovery codes.","operationId":"view_gate_reset_with_account_api_blkbuilder_view_gate_reset_with_account_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/recover":{"post":{"tags":["blkbuilder"],"summary":"View Gate Recover","description":"Spend one recovery code, set a new view password.","operationId":"view_gate_recover_api_blkbuilder_view_gate_recover_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/recovery-codes":{"post":{"tags":["blkbuilder"],"summary":"View Gate New Recovery Codes","description":"Regenerate recovery codes — only while the member's views are unlocked.","operationId":"view_gate_new_recovery_codes_api_blkbuilder_view_gate_recovery_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/view-gate/master/reset":{"post":{"tags":["blkbuilder"],"summary":"Master Reset View Password","description":"ADMIN + MASTER KEY: set a member's view password (numbers only) — the last-\nresort reset when they have no codes and no account password. Revokes every\nopen unlock for that member, issues fresh recovery codes, audit-logged. The\nmaster admin's own account can only be reset by the master admin.","operationId":"master_reset_view_password_api_blkbuilder_view_gate_master_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/repo-index/rebuild":{"post":{"tags":["blkbuilder"],"summary":"Repo Index Rebuild","operationId":"repo_index_rebuild_api_blkbuilder_projects__project_id__repo_index_rebuild_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/repo-index":{"get":{"tags":["blkbuilder"],"summary":"Repo Index Get","operationId":"repo_index_get_api_blkbuilder_projects__project_id__repo_index_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/repo-index/locate":{"get":{"tags":["blkbuilder"],"summary":"Repo Index Locate","operationId":"repo_index_locate_api_blkbuilder_projects__project_id__repo_index_locate_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/edit-selection":{"post":{"tags":["blkbuilder"],"summary":"Edit Selection","description":"The Select Tool endpoint. FE captured a click in the preview and\nsends { testid | selector, prompt }. Backend uses the tree-sitter\nrepo index to find the exact source location, calls the LLM to\nrewrite the file, applies the patch, and returns the new content.","operationId":"edit_selection_api_blkbuilder_projects__project_id__edit_selection_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/edit-inline":{"post":{"tags":["blkbuilder"],"summary":"Edit Inline","description":"User edited text directly in the preview overlay (contenteditable).\nBody: { testid | selector, old_text, new_text }.\nWe locate the element, find `old_text` inside its source snippet, and\ndo a targeted string replace — no LLM call, no risk of hallucination.","operationId":"edit_inline_api_blkbuilder_projects__project_id__edit_inline_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/automations/estimate":{"get":{"tags":["blkbuilder"],"summary":"Automation Estimate","description":"Member-safe cost ESTIMATE for an automation. All math is server-side; only clean\nBLKCOIN figures leave (no multiplier, no GPU rate, no engine name — spec §4).","operationId":"automation_estimate_api_blkbuilder_projects__project_id__automations_estimate_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/automations":{"post":{"tags":["blkbuilder"],"summary":"Automation Create","operationId":"automation_create_api_blkbuilder_projects__project_id__automations_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Automation List","operationId":"automation_list_api_blkbuilder_projects__project_id__automations_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/automations/{automation_id}/runs":{"get":{"tags":["blkbuilder"],"summary":"Automation Runs","description":"Full run HISTORY for an agent — every run, newest first, with the full\nreport + the exact files acted on. This is where users see what each\nautomation actually did.","operationId":"automation_runs_api_blkbuilder_projects__project_id__automations__automation_id__runs_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/automations/{automation_id}":{"patch":{"tags":["blkbuilder"],"summary":"Automation Update","operationId":"automation_update_api_blkbuilder_projects__project_id__automations__automation_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Automation Delete","operationId":"automation_delete_api_blkbuilder_projects__project_id__automations__automation_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/automations/{automation_id}/run-now":{"post":{"tags":["blkbuilder"],"summary":"Automation Run Now","operationId":"automation_run_now_api_blkbuilder_projects__project_id__automations__automation_id__run_now_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/download":{"get":{"tags":["blkbuilder"],"summary":"Project Download","description":"Stream a zip of the workspace. Skips node_modules/dist/build/.git.","operationId":"project_download_api_blkbuilder_projects__project_id__download_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/db/tables":{"get":{"tags":["blkbuilder"],"summary":"Db Tables","description":"List every BLKBUILDER collection this project has data in, with row counts.","operationId":"db_tables_api_blkbuilder_projects__project_id__db_tables_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/db/rows":{"get":{"tags":["blkbuilder"],"summary":"Db Rows","operationId":"db_rows_api_blkbuilder_projects__project_id__db_rows_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/db/schema":{"get":{"tags":["blkbuilder"],"summary":"Db Schema","description":"Infer a schema for the given table by sampling up to 20 rows.","operationId":"db_schema_api_blkbuilder_projects__project_id__db_schema_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/db/row":{"patch":{"tags":["blkbuilder"],"summary":"Db Row Update","description":"Inline cell edit. Body: { table, selector: {...}, updates: {...} }.\nSelector must include at least one primary key from the table's row.","operationId":"db_row_update_api_blkbuilder_projects__project_id__db_row_patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blkbuilder"],"summary":"Db Row Insert","description":"Add a new row to a writable collection. Body: { table, row: {...} }.","operationId":"db_row_insert_api_blkbuilder_projects__project_id__db_row_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Db Row Delete","description":"Delete a row. Body: { table, selector: {...} }.","operationId":"db_row_delete_api_blkbuilder_projects__project_id__db_row_delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/db/generate-password":{"post":{"tags":["blkbuilder"],"summary":"Db Generate Password","operationId":"db_generate_password_api_blkbuilder_projects__project_id__db_generate_password_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/preview-version":{"get":{"tags":["blkbuilder"],"summary":"Preview Version Get","description":"FE polls this to detect edits it should reflect. Also auto-restarts\nthe Vite dev server if the process died since last check — that way\n'preview always works, edits always persist, reload always survives'\nholds without the user clicking anything.","operationId":"preview_version_get_api_blkbuilder_projects__project_id__preview_version_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/preview-bump":{"post":{"tags":["blkbuilder"],"summary":"Preview Bump","description":"Explicit bump — used by tests, by the FE's manual reload, or by\nany internal caller that mutated files outside a runner.","operationId":"preview_bump_api_blkbuilder_projects__project_id__preview_bump_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/agents/catalog":{"get":{"tags":["blkbuilder"],"summary":"Agents Catalog","description":"The 6 typed agents + presets. FE renders these as the create panel.","operationId":"agents_catalog_api_blkbuilder_agents_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/agents":{"post":{"tags":["blkbuilder"],"summary":"Agent Create","description":"Create a typed agent on a project. Body:\n{ agent_type, mode: run_once|automatic, trigger: after_build|after_deploy|\n  after_edit|daily|weekly|custom, interval_minutes?, duration_days?,\n  budget_cap_blkcoin, custom_prompt? }","operationId":"agent_create_api_blkbuilder_projects__project_id__agents_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Agent List","operationId":"agent_list_api_blkbuilder_projects__project_id__agents_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/agents/{automation_id}/findings":{"get":{"tags":["blkbuilder"],"summary":"Agent Findings","operationId":"agent_findings_api_blkbuilder_projects__project_id__agents__automation_id__findings_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/agents/{automation_id}/findings/{finding_id}":{"patch":{"tags":["blkbuilder"],"summary":"Agent Finding Action","description":"Ignore / fix / view actions on a finding. Body: {action: 'ignore'|'fixed'|'note', note?}","operationId":"agent_finding_action_api_blkbuilder_projects__project_id__agents__automation_id__findings__finding_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}},{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/agents/{automation_id}/run-now":{"post":{"tags":["blkbuilder"],"summary":"Agent Run Now","operationId":"agent_run_now_api_blkbuilder_projects__project_id__agents__automation_id__run_now_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/agents/{automation_id}":{"delete":{"tags":["blkbuilder"],"summary":"Agent Delete","operationId":"agent_delete_api_blkbuilder_projects__project_id__agents__automation_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["blkbuilder"],"summary":"Agent Update","operationId":"agent_update_api_blkbuilder_projects__project_id__agents__automation_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"automation_id","in":"path","required":true,"schema":{"type":"string","title":"Automation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/agents/preset/{preset_id}":{"post":{"tags":["blkbuilder"],"summary":"Agent Install Preset","description":"One-click install of a preset — creates all its agents with defaults.","operationId":"agent_install_preset_api_blkbuilder_projects__project_id__agents_preset__preset_id__post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"preset_id","in":"path","required":true,"schema":{"type":"string","title":"Preset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/status":{"get":{"tags":["blkbuilder"],"summary":"Launch Status","operationId":"launch_status_api_blkbuilder_projects__project_id__launch_status_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/purchase":{"post":{"tags":["blkbuilder"],"summary":"Launch Purchase","operationId":"launch_purchase_api_blkbuilder_projects__project_id__launch_purchase_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/transfer":{"post":{"tags":["blkbuilder"],"summary":"Launch Transfer","operationId":"launch_transfer_api_blkbuilder_projects__project_id__launch_transfer_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/connect":{"post":{"tags":["blkbuilder"],"summary":"Launch Connect","operationId":"launch_connect_api_blkbuilder_projects__project_id__launch_connect_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/launch/providers":{"get":{"tags":["blkbuilder"],"summary":"Launch Providers","operationId":"launch_providers_api_blkbuilder_launch_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/detect":{"get":{"tags":["blkbuilder"],"summary":"Launch Detect","operationId":"launch_detect_api_blkbuilder_projects__project_id__launch_detect_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"domain","in":"query","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/auto-connect":{"post":{"tags":["blkbuilder"],"summary":"Launch Auto Connect","description":"Provider-API auto connect. Credentials are used for this one request\nand never stored or logged.","operationId":"launch_auto_connect_api_blkbuilder_projects__project_id__launch_auto_connect_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/domain-connect":{"post":{"tags":["blkbuilder"],"summary":"Launch Domain Connect","description":"One-click Domain Connect: returns the host's approval URL. The domain\nis charged + attached now (as auto); VERIFY confirms once approved.","operationId":"launch_domain_connect_api_blkbuilder_projects__project_id__launch_domain_connect_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/disconnect":{"post":{"tags":["blkbuilder"],"summary":"Launch Disconnect","operationId":"launch_disconnect_api_blkbuilder_projects__project_id__launch_disconnect_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/verify":{"post":{"tags":["blkbuilder"],"summary":"Launch Verify","operationId":"launch_verify_api_blkbuilder_projects__project_id__launch_verify_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/{launch_id}/cancel":{"post":{"tags":["blkbuilder"],"summary":"Launch Cancel","operationId":"launch_cancel_api_blkbuilder_projects__project_id__launch__launch_id__cancel_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"launch_id","in":"path","required":true,"schema":{"type":"string","title":"Launch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/backup":{"get":{"tags":["blkbuilder"],"summary":"Backup Status","description":"Plain-language state for the member's \"Back up to GitHub\" button.","operationId":"backup_status_api_blkbuilder_projects__project_id__backup_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blkbuilder"],"summary":"Backup Now","description":"One click: a private copy of this project's code in the member's own GitHub.","operationId":"backup_now_api_blkbuilder_projects__project_id__backup_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/site/status":{"get":{"tags":["blkbuilder"],"summary":"Site Status","operationId":"site_status_api_blkbuilder_projects__project_id__site_status_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/site/publish":{"post":{"tags":["blkbuilder"],"summary":"Site Publish","operationId":"site_publish_api_blkbuilder_projects__project_id__site_publish_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/admin-account/status":{"get":{"tags":["blkbuilder"],"summary":"Admin Account Status","operationId":"admin_account_status_api_blkbuilder_admin_account_status_get","parameters":[{"name":"project_id","in":"query","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/admin-account/setup":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Setup","description":"Create the admin account from EMAIL + passphrase at initial build.\nPassphrase is bcrypt-hashed. Idempotent-safe: 409 if already set (use\n/change or /reset instead) so a rebuild never silently overwrites it.","operationId":"admin_account_setup_api_blkbuilder_admin_account_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/change":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Change","operationId":"admin_account_change_api_blkbuilder_admin_account_change_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/owner-set":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Owner Set","description":"OWNER force-set the admin email + passphrase WITHOUT needing the current one.\nOwning the project (BBAIS auth via _own_project) IS the authorization — this is the\n\"reset from your dashboard\" path, so the owner is never locked out of their own\nplatform's admin, and builds we create are always recoverable/testable. Upserts.","operationId":"admin_account_owner_set_api_blkbuilder_admin_account_owner_set_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/master-search":{"get":{"tags":["blkbuilder"],"summary":"Admin Account Master Search","description":"ADMIN: find any platform to master-reset — by project id, name, or owner\nemail/username. Admin-gated (BBAIS admin); returns light rows for selection,\nincluding whether an admin account already exists and its email.","operationId":"admin_account_master_search_api_blkbuilder_admin_account_master_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/admin-account/master-reset":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Master Reset","description":"ADMIN uses the BLKBUILDER MASTER KEY to reset ANY platform's admin email +\npassphrase — the 'change the password if necessary' override. Requires BOTH\nadmin auth AND the correct master key. Upserts, so a platform whose admin\naccount was never created is still recoverable. Every attempt is audit-logged\nto the shared master access log; all live admin sessions are revoked.","operationId":"admin_account_master_reset_api_blkbuilder_admin_account_master_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/reset":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Reset Member","description":"Complete a reset from the DASHBOARD with the emailed token (member-authed\n— mirrors the view-gate reset). The on-platform code path is the runtime\nendpoint below.","operationId":"admin_account_reset_member_api_blkbuilder_admin_account_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/request-reset":{"post":{"tags":["blkbuilder"],"summary":"Admin Account Request Reset","description":"Dashboard: email a reset (link + code) to the admin email. Generic reply.","operationId":"admin_account_request_reset_api_blkbuilder_admin_account_request_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/admin-login":{"post":{"tags":["blkbuilder"],"summary":"Runtime Admin Login","description":"The generated platform's admin panel signs in here (via its own backend).\nVerifies EMAIL + passphrase against the bcrypt hash. No hardcoded default —\nif the account was never set, it fails closed with a setup signal.","operationId":"runtime_admin_login_api_blkbuilder_runtime_admin_login_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/admin-request-reset":{"post":{"tags":["blkbuilder"],"summary":"Runtime Admin Request Reset","description":"On-platform 'forgot passphrase': emails the reset code to the admin email.\nGeneric reply (enumeration-safe).","operationId":"runtime_admin_request_reset_api_blkbuilder_runtime_admin_request_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/admin-reset":{"post":{"tags":["blkbuilder"],"summary":"Runtime Admin Reset","description":"On-platform reset with the 6-digit CODE from the email.","operationId":"runtime_admin_reset_api_blkbuilder_runtime_admin_reset_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin-account/recovery":{"get":{"tags":["blkbuilder"],"summary":"Admin Account Recovery Status","operationId":"admin_account_recovery_status_api_blkbuilder_admin_account_recovery_get","parameters":[{"name":"project_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/admin-account/recovery-codes":{"post":{"tags":["blkbuilder"],"summary":"Admin Account New Recovery Codes","description":"Owner (signed in to BLKBUILDER, owns the project) regenerates the codes.","operationId":"admin_account_new_recovery_codes_api_blkbuilder_admin_account_recovery_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/admin-reset-options":{"post":{"tags":["blkbuilder"],"summary":"Runtime Admin Reset Options","description":"The site's forgot-passphrase screen asks which routes exist — the email one\nis offered only when email is actually configured.","operationId":"runtime_admin_reset_options_api_blkbuilder_runtime_admin_reset_options_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/admin-recover":{"post":{"tags":["blkbuilder"],"summary":"Runtime Admin Recover","description":"On-platform: spend one recovery code, set a new passphrase.","operationId":"runtime_admin_recover_api_blkbuilder_runtime_admin_recover_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/site-store":{"get":{"tags":["blkbuilder"],"summary":"Runtime Site Store Get","operationId":"runtime_site_store_get_api_blkbuilder_runtime_site_store_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["blkbuilder"],"summary":"Runtime Site Store Put","operationId":"runtime_site_store_put_api_blkbuilder_runtime_site_store_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/site-upload/{name}":{"put":{"tags":["blkbuilder"],"summary":"Runtime Site Upload Put","operationId":"runtime_site_upload_put_api_blkbuilder_runtime_site_upload__name__put","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Runtime Site Upload Get","operationId":"runtime_site_upload_get_api_blkbuilder_runtime_site_upload__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/runtime/pay/config":{"get":{"tags":["blkbuilder"],"summary":"Runtime Pay Config","operationId":"runtime_pay_config_api_blkbuilder_runtime_pay_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/pay/admin-config":{"get":{"tags":["blkbuilder"],"summary":"Runtime Pay Admin Config","operationId":"runtime_pay_admin_config_api_blkbuilder_runtime_pay_admin_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["blkbuilder"],"summary":"Runtime Pay Admin Config Put","operationId":"runtime_pay_admin_config_put_api_blkbuilder_runtime_pay_admin_config_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/pay/start":{"post":{"tags":["blkbuilder"],"summary":"Runtime Pay Start","description":"Body: {method, items:[{name,unit_amount,quantity}], kind, success_url, cancel_url}.\nReturns {redirect, provider_ref, ref} (Cash App: {redirect: cash.app link, pending: true}).","operationId":"runtime_pay_start_api_blkbuilder_runtime_pay_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/runtime/pay/confirm":{"post":{"tags":["blkbuilder"],"summary":"Runtime Pay Confirm","description":"Body: {provider:'stripe', session_id} or {provider:'paypal', token (order id)}.","operationId":"runtime_pay_confirm_api_blkbuilder_runtime_pay_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/payments":{"get":{"tags":["blkbuilder"],"summary":"Project Payments Get","operationId":"project_payments_get_api_blkbuilder_projects__project_id__payments_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blkbuilder"],"summary":"Project Payments Put","operationId":"project_payments_put_api_blkbuilder_projects__project_id__payments_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/import":{"post":{"tags":["blkbuilder"],"summary":"Import Code","operationId":"import_code_api_blkbuilder_projects__project_id__import_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_import_code_api_blkbuilder_projects__project_id__import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/github/status":{"get":{"tags":["blkbuilder"],"summary":"Github Status","operationId":"github_status_api_blkbuilder_github_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/github/oauth/start":{"get":{"tags":["blkbuilder"],"summary":"Github Oauth Start","description":"Mint a single-use state and hand the FE the GitHub authorize URL.","operationId":"github_oauth_start_api_blkbuilder_github_oauth_start_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/github/oauth/callback":{"post":{"tags":["blkbuilder"],"summary":"Github Oauth Callback","description":"FE callback page posts {code, state}. Exchange, encrypt, store.","operationId":"github_oauth_callback_api_blkbuilder_github_oauth_callback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/github/disconnect":{"post":{"tags":["blkbuilder"],"summary":"Github Disconnect","operationId":"github_disconnect_api_blkbuilder_github_disconnect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/github/repos":{"get":{"tags":["blkbuilder"],"summary":"Github Repos","operationId":"github_repos_api_blkbuilder_github_repos_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/github/branches":{"get":{"tags":["blkbuilder"],"summary":"Github Branches","operationId":"github_branches_api_blkbuilder_github_branches_get","parameters":[{"name":"repo","in":"query","required":false,"schema":{"type":"string","default":"","title":"Repo"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/github/import":{"post":{"tags":["blkbuilder"],"summary":"Github Import","operationId":"github_import_api_blkbuilder_projects__project_id__github_import_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/github/export":{"post":{"tags":["blkbuilder"],"summary":"Github Export","description":"Push the project's current tree as ONE commit. Body:\n{repo | new_repo_name(+private), branch, commit_message, create_pr, base_branch}\nNew branch names are created from the base; create_pr opens base<-branch.","operationId":"github_export_api_blkbuilder_projects__project_id__github_export_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/ebook/lookup":{"post":{"tags":["blkbuilder"],"summary":"Ebook Lookup","description":"Resolve real book metadata from ISBN, author+title, or an Amazon link.","operationId":"ebook_lookup_api_blkbuilder_projects__project_id__ebook_lookup_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/ebook/rights-contract":{"get":{"tags":["blkbuilder"],"summary":"Ebook Rights Contract","operationId":"ebook_rights_contract_api_blkbuilder_ebook_rights_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/ebook/start":{"post":{"tags":["blkbuilder"],"summary":"Ebook Start","operationId":"ebook_start_api_blkbuilder_projects__project_id__ebook_start_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/ebook/{ebook_id}/plan":{"post":{"tags":["blkbuilder"],"summary":"Ebook Plan","operationId":"ebook_plan_api_blkbuilder_projects__project_id__ebook__ebook_id__plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"ebook_id","in":"path","required":true,"schema":{"type":"string","title":"Ebook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/watermark/remove":{"post":{"tags":["blkbuilder"],"summary":"Watermark Remove","operationId":"watermark_remove_api_blkbuilder_projects__project_id__watermark_remove_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/yourstore/intake":{"put":{"tags":["blkbuilder"],"summary":"Yourstore Intake Put","operationId":"yourstore_intake_put_api_blkbuilder_projects__project_id__yourstore_intake_put","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blkbuilder"],"summary":"Yourstore Intake Get","operationId":"yourstore_intake_get_api_blkbuilder_projects__project_id__yourstore_intake_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/yourstore/rights-contract":{"get":{"tags":["blkbuilder"],"summary":"Yourstore Rights Contract","operationId":"yourstore_rights_contract_api_blkbuilder_yourstore_rights_contract_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/yourstore/plan":{"post":{"tags":["blkbuilder"],"summary":"Yourstore Plan","description":"Reserve the store slug + generate the storefront plan into the normal\nconfirm-then-build flow. Optional Stan Store import: {import_url, rights}.","operationId":"yourstore_plan_api_blkbuilder_projects__project_id__yourstore_plan_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/yourstore/directory":{"get":{"tags":["blkbuilder"],"summary":"Yourstore Directory","description":"Creator BLKStore (5B-2): the live directory of PUBLISHED /yourstores.\nA live view of the store registry - published stores appear automatically,\npaused/draft ones drop off. Public-readable: browsing is how members find\ncreators; purchasing/building still requires an account.","operationId":"yourstore_directory_api_blkbuilder_yourstore_directory_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/projects/{project_id}/launch/connect-yourstore-blocked":{"post":{"tags":["blkbuilder"],"summary":"Yourstore Domain Blocked","description":"Explicit, honest block: custom domains are a full-platform feature.\n/yourstores live at their myblkworldhq URL by design.","operationId":"yourstore_domain_blocked_api_blkbuilder_projects__project_id__launch_connect_yourstore_blocked_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/chat":{"get":{"tags":["blkbuilder"],"summary":"Chat History","description":"Messages for the active (or requested) saved chat. Restores on reload.","operationId":"chat_history_api_blkbuilder_projects__project_id__chat_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/chat-sessions":{"get":{"tags":["blkbuilder"],"summary":"List Chat Sessions","operationId":"list_chat_sessions_api_blkbuilder_projects__project_id__chat_sessions_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blkbuilder"],"summary":"New Chat Session","operationId":"new_chat_session_api_blkbuilder_projects__project_id__chat_sessions_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/chat-sessions/{session_id}":{"patch":{"tags":["blkbuilder"],"summary":"Rename Chat Session","operationId":"rename_chat_session_api_blkbuilder_projects__project_id__chat_sessions__session_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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"}}}}}},"delete":{"tags":["blkbuilder"],"summary":"Delete Chat Session","operationId":"delete_chat_session_api_blkbuilder_projects__project_id__chat_sessions__session_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"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"}}}}}}},"/api/blkbuilder/projects/{project_id}/chat/stream":{"post":{"tags":["blkbuilder"],"summary":"Chat Stream","operationId":"chat_stream_api_blkbuilder_projects__project_id__chat_stream_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/admin/vault/control":{"get":{"tags":["blkbuilder"],"summary":"Vault Get Control","operationId":"vault_get_control_api_blkbuilder_admin_vault_control_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["blkbuilder"],"summary":"Vault Set Control","operationId":"vault_set_control_api_blkbuilder_admin_vault_control_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin/vault/codes":{"get":{"tags":["blkbuilder"],"summary":"Vault List Codes","operationId":"vault_list_codes_api_blkbuilder_admin_vault_codes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["blkbuilder"],"summary":"Vault Store Code","operationId":"vault_store_code_api_blkbuilder_admin_vault_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blkbuilder/admin/vault/codes/{code_id}":{"delete":{"tags":["blkbuilder"],"summary":"Vault Delete Code","operationId":"vault_delete_code_api_blkbuilder_admin_vault_codes__code_id__delete","parameters":[{"name":"code_id","in":"path","required":true,"schema":{"type":"string","title":"Code Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/secrets":{"get":{"tags":["blkbuilder"],"summary":"List Secrets","operationId":"list_secrets_api_blkbuilder_projects__project_id__secrets_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blkbuilder"],"summary":"Add Secret","operationId":"add_secret_api_blkbuilder_projects__project_id__secrets_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/projects/{project_id}/secrets/{name}":{"delete":{"tags":["blkbuilder"],"summary":"Remove Secret","operationId":"remove_secret_api_blkbuilder_projects__project_id__secrets__name__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","title":"Project Id"}},{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blkbuilder/platform-assistant":{"post":{"tags":["blkbuilder"],"summary":"Platform Assistant","operationId":"platform_assistant_api_blkbuilder_platform_assistant_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/sync-routes":{"post":{"summary":"Admin Sync Routes","description":"Set Render's routes from the live site's prerendered.json now (it also happens after every frontend deploy).","operationId":"admin_sync_routes_api_admin_seo_sync_routes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/routes-status":{"get":{"summary":"Admin Routes Status","operationId":"admin_routes_status_api_admin_seo_routes_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/sitemap.xml":{"get":{"summary":"Sitemap Api","operationId":"sitemap_api_api_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/llms-full.txt":{"get":{"summary":"Llms Full Api","operationId":"llms_full_api_api_llms_full_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/regenerate":{"post":{"summary":"Admin Regenerate Seo","operationId":"admin_regenerate_seo_api_admin_seo_regenerate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/seo/settings":{"get":{"summary":"Get Seo Settings","description":"Public: the frontend reads these on every page load to inject the\nverification meta tags into <head>. Returns ONLY public codes — nothing\nsensitive.","operationId":"get_seo_settings_api_seo_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/settings":{"put":{"summary":"Set Seo Settings","operationId":"set_seo_settings_api_admin_seo_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/export":{"get":{"summary":"Admin Export Content","description":"Download every exportable collection as one JSON bundle. Run this on\nthe PREVIEW environment, save the file, then upload via the matching\nimport endpoint on PRODUCTION.","operationId":"admin_export_content_api_admin_seo_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/seo/import":{"post":{"summary":"Admin Import Content","description":"Import the JSON bundle produced by /export into THIS environment. Each\nrow is upserted by its natural primary key (product_id / listing_id /\nevent_id / faq_id / etc.) — so this is safe to run repeatedly and\nidempotent by design.\n\nAccepts either multipart file upload (bundle_file) OR raw JSON body.","operationId":"admin_import_content_api_admin_seo_import_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_admin_import_content_api_admin_seo_import_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AssignBody":{"properties":{"serial":{"type":"string","maxLength":64,"minLength":1,"title":"Serial"},"role":{"type":"string","enum":["rolling","countertop"],"title":"Role"}},"additionalProperties":false,"type":"object","required":["serial","role"],"title":"AssignBody"},"BlkcoinAwardBody":{"properties":{"user_id":{"type":"string","title":"User Id"},"amount":{"type":"number","title":"Amount"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_id","amount","reason"],"title":"BlkcoinAwardBody"},"Body_add_api_communicate_gallery_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"source":{"type":"string","title":"Source","default":"camera"}},"type":"object","required":["file"],"title":"Body_add_api_communicate_gallery_post"},"Body_add_event_photos_api_admin_events__event_id__photos_post":{"properties":{"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos"}},"type":"object","required":["photos"],"title":"Body_add_event_photos_api_admin_events__event_id__photos_post"},"Body_add_event_videos_api_admin_events__event_id__videos_post":{"properties":{"videos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Videos"}},"type":"object","required":["videos"],"title":"Body_add_event_videos_api_admin_events__event_id__videos_post"},"Body_add_photos_api_admin_pbp__listing_id__photos_post":{"properties":{"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos"}},"type":"object","required":["photos"],"title":"Body_add_photos_api_admin_pbp__listing_id__photos_post"},"Body_add_references_api_v1_cinema_character_library__character_id__references_post":{"properties":{"references":{"items":{"type":"string","format":"binary"},"type":"array","title":"References"}},"type":"object","title":"Body_add_references_api_v1_cinema_character_library__character_id__references_post"},"Body_add_service_photos_api_admin_services__listing_id__photos_post":{"properties":{"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos"}},"type":"object","required":["photos"],"title":"Body_add_service_photos_api_admin_services__listing_id__photos_post"},"Body_add_service_videos_api_admin_services__listing_id__videos_post":{"properties":{"videos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Videos"}},"type":"object","required":["videos"],"title":"Body_add_service_videos_api_admin_services__listing_id__videos_post"},"Body_admin_add_showcase_api_admin_blkai_showcase_post":{"properties":{"model_id":{"type":"string","title":"Model Id"},"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title","default":""},"file":{"type":"string","format":"binary","title":"File"},"audio":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Audio"}},"type":"object","required":["model_id","kind","file"],"title":"Body_admin_add_showcase_api_admin_blkai_showcase_post"},"Body_admin_agreement_upload_api_admin_docfraud_ecbsv_agreement_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_admin_agreement_upload_api_admin_docfraud_ecbsv_agreement_post"},"Body_admin_import_content_api_admin_seo_import_post":{"properties":{"bundle_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Bundle File"}},"type":"object","title":"Body_admin_import_content_api_admin_seo_import_post"},"Body_admin_media_add_api_admin_communicate_media_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"title":{"type":"string","title":"Title","default":""},"caption":{"type":"string","title":"Caption","default":""},"alt":{"type":"string","title":"Alt","default":""}},"type":"object","required":["file"],"title":"Body_admin_media_add_api_admin_communicate_media_post"},"Body_admin_upload_api_admin_announcement__banner_id__media_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_admin_upload_api_admin_announcement__banner_id__media_post"},"Body_admin_upload_media_api_admin_home_content_media_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"purpose":{"type":"string","title":"Purpose","default":"image"}},"type":"object","required":["file"],"title":"Body_admin_upload_media_api_admin_home_content_media_post"},"Body_admin_upload_media_api_v1_admin_blog_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"purpose":{"type":"string","title":"Purpose","default":"body"}},"type":"object","required":["file"],"title":"Body_admin_upload_media_api_v1_admin_blog_upload_post"},"Body_admin_upload_poster_api_admin_announcement__banner_id__media__media_id__poster_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_admin_upload_poster_api_admin_announcement__banner_id__media__media_id__poster_post"},"Body_apply_brand_partner_api_brand_partner_apply_post":{"properties":{"mode":{"type":"string","title":"Mode"},"vehicle_make":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Make"},"vehicle_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Model"},"vehicle_year":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Year"},"vehicle_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Color"},"vehicle_photo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Vehicle Photo"},"store_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Name"},"store_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Address"},"store_photo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Store Photo"},"preferred_industries":{"type":"string","title":"Preferred Industries","default":""},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"payment_method":{"type":"string","title":"Payment Method","default":"blkpay"}},"type":"object","required":["mode"],"title":"Body_apply_brand_partner_api_brand_partner_apply_post"},"Body_clone_upload_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_clone_upload_reference_api_blkbuilder_projects__project_id__clone__clone_id__reference_post"},"Body_copilot_upload_api_copilot_home_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"purpose":{"type":"string","title":"Purpose","default":"image"}},"type":"object","required":["file"],"title":"Body_copilot_upload_api_copilot_home_upload_post"},"Body_create_character_api_v1_cinema_character_library_post":{"properties":{"name":{"type":"string","title":"Name"},"references":{"items":{"type":"string","format":"binary"},"type":"array","title":"References"}},"type":"object","required":["name"],"title":"Body_create_character_api_v1_cinema_character_library_post"},"Body_create_event_api_admin_events_post":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"short_description":{"type":"string","title":"Short Description","default":""},"event_type":{"type":"string","title":"Event Type","default":"free"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"location_name":{"type":"string","title":"Location Name","default":""},"location_address":{"type":"string","title":"Location Address","default":""},"location_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Url"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"doors_open_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doors Open Time"},"timezone_str":{"type":"string","title":"Timezone Str","default":"UTC"},"max_guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Guests"},"category":{"type":"string","title":"Category","default":"Community"},"is_virtual":{"type":"boolean","title":"Is Virtual","default":false},"virtual_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Virtual Link"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_published":{"type":"boolean","title":"Is Published","default":true},"reminder_schedule":{"type":"string","title":"Reminder Schedule","default":"[\"1 week before\",\"1 day before\",\"1 hour before\"]"},"thumbnail":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Thumbnail"},"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos","default":[]},"videos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Videos","default":[]}},"type":"object","required":["title","start_date"],"title":"Body_create_event_api_admin_events_post"},"Body_create_pbp_api_admin_pbp_post":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"short_description":{"type":"string","title":"Short Description","default":""},"tags":{"type":"string","title":"Tags","default":""},"base_price":{"type":"number","title":"Base Price"},"platform_category":{"type":"string","title":"Platform Category"},"customization_tier":{"type":"string","title":"Customization Tier","default":"professional"},"tech_stack":{"type":"string","title":"Tech Stack","default":""},"estimated_delivery":{"type":"string","title":"Estimated Delivery","default":"48 hours"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"features":{"type":"string","title":"Features","default":"[]"},"add_ons":{"type":"string","title":"Add Ons","default":"[]"},"included_with_purchase":{"type":"string","title":"Included With Purchase","default":"[]"},"industry_tags":{"type":"string","title":"Industry Tags","default":""},"max_sales":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sales"},"is_published":{"type":"boolean","title":"Is Published","default":true},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"thumbnail":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Thumbnail"},"demo_video":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Demo Video"},"demo_photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Demo Photos","default":[]}},"type":"object","required":["title","base_price","platform_category"],"title":"Body_create_pbp_api_admin_pbp_post"},"Body_create_platform_api_admin_platforms_post":{"properties":{"platform_name":{"type":"string","title":"Platform Name"},"tagline":{"type":"string","title":"Tagline","default":""},"description":{"type":"string","title":"Description","default":""},"external_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Url"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"status":{"type":"string","title":"Status","default":"live"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"is_active":{"type":"boolean","title":"Is Active","default":true},"logo":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Logo"}},"type":"object","required":["platform_name"],"title":"Body_create_platform_api_admin_platforms_post"},"Body_create_product_api_admin_products_post":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"short_description":{"type":"string","title":"Short Description","default":""},"price":{"type":"number","title":"Price","default":0.0},"sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sale Price"},"product_type":{"type":"string","title":"Product Type","default":"digital_product"},"category":{"type":"string","title":"Category","default":""},"tags":{"type":"string","title":"Tags","default":""},"is_published":{"type":"boolean","title":"Is Published","default":false},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"is_blkcoin_exclusive":{"type":"boolean","title":"Is Blkcoin Exclusive","default":false},"thumbnail":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Thumbnail"}},"type":"object","required":["title"],"title":"Body_create_product_api_admin_products_post"},"Body_create_review_api_reviews_post":{"properties":{"product_id":{"type":"string","title":"Product Id"},"rating":{"type":"integer","title":"Rating"},"title":{"type":"string","title":"Title","default":""},"body":{"type":"string","title":"Body"},"photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Photos","default":[]},"videos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Videos","default":[]}},"type":"object","required":["product_id","rating","body"],"title":"Body_create_review_api_reviews_post"},"Body_create_service_api_admin_services_post":{"properties":{"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description","default":""},"short_description":{"type":"string","title":"Short Description","default":""},"tags":{"type":"string","title":"Tags","default":""},"service_type":{"type":"string","title":"Service Type"},"base_price":{"type":"number","title":"Base Price","default":0.0},"sale_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sale Price"},"platform_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Category"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"tech_stack":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tech Stack"},"estimated_delivery":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Delivery"},"preview_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Url"},"saas_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Saas Url"},"features":{"type":"string","title":"Features","default":"[]"},"add_ons":{"type":"string","title":"Add Ons","default":"[]"},"included_items":{"type":"string","title":"Included Items","default":"[]"},"industry_tags":{"type":"string","title":"Industry Tags","default":""},"monthly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Price"},"posts_included":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posts Included"},"custom_tier_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Tier Details"},"is_lease_to_own":{"type":"boolean","title":"Is Lease To Own","default":false},"lease_down_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lease Down Payment"},"lease_36mo_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lease 36Mo Monthly"},"lease_48mo_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lease 48Mo Monthly"},"lease_60mo_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lease 60Mo Monthly"},"pay_in_4_enabled":{"type":"boolean","title":"Pay In 4 Enabled","default":false},"pay_in_4_cadences":{"type":"string","title":"Pay In 4 Cadences","default":"[\"weekly\",\"biweekly\"]"},"max_sales":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Sales"},"is_published":{"type":"boolean","title":"Is Published","default":true},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"requires_shipping":{"type":"boolean","title":"Requires Shipping","default":false},"is_bbais_built":{"type":"boolean","title":"Is Bbais Built","default":true},"bundle_product_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bundle Product Ids"},"bundle_custom_items":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bundle Custom Items"},"bundle_override_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bundle Override Price"},"variation_groups":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variation Groups"},"target_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Id"},"target_user_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target User Ids"},"living_infra_pricing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Living Infra Pricing"},"thumbnail":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Thumbnail"},"demo_video":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Demo Video"},"demo_photos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Demo Photos","default":[]},"demo_videos":{"items":{"type":"string","format":"binary"},"type":"array","title":"Demo Videos","default":[]}},"type":"object","required":["title","service_type"],"title":"Body_create_service_api_admin_services_post"},"Body_create_voice_api_voice_voices_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"display_name":{"type":"string","title":"Display Name","default":"Untitled voice"}},"type":"object","required":["file"],"title":"Body_create_voice_api_voice_voices_post"},"Body_dispute_info_api_docfraud_disputes__dispute_id__info_post":{"properties":{"text":{"type":"string","title":"Text","default":""},"attachment":{"type":"string","format":"binary","title":"Attachment"}},"type":"object","title":"Body_dispute_info_api_docfraud_disputes__dispute_id__info_post"},"Body_files_add_api_communicate_blkfiles_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_files_add_api_communicate_blkfiles_post"},"Body_import_code_api_blkbuilder_projects__project_id__import_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_code_api_blkbuilder_projects__project_id__import_post"},"Body_open_dispute_api_docfraud_my_documents__link_id__disputes_post":{"properties":{"item_type":{"type":"string","title":"Item Type","default":""},"item_ref":{"type":"string","title":"Item Ref","default":""},"text":{"type":"string","title":"Text","default":""},"attachment":{"type":"string","format":"binary","title":"Attachment"}},"type":"object","title":"Body_open_dispute_api_docfraud_my_documents__link_id__disputes_post"},"Body_photo_set_api_communicate_contacts__contact_id__photo_put":{"properties":{"photo":{"type":"string","format":"binary","title":"Photo"}},"type":"object","required":["photo"],"title":"Body_photo_set_api_communicate_contacts__contact_id__photo_put"},"Body_public_link_upload_api_docfraud_public_link__token__upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"doc_type":{"type":"string","title":"Doc Type","default":""}},"type":"object","required":["file"],"title":"Body_public_link_upload_api_docfraud_public_link__token__upload_post"},"Body_readd_reference_api_voice_voices__voice_id__reference_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_readd_reference_api_voice_voices__voice_id__reference_post"},"Body_replace_id_api_docfraud_file_requests__request_id__id_post":{"properties":{"id_file":{"type":"string","format":"binary","title":"Id File"}},"type":"object","required":["id_file"],"title":"Body_replace_id_api_docfraud_file_requests__request_id__id_post"},"Body_submit_request_api_docfraud_file_requests_post":{"properties":{"last_name":{"type":"string","title":"Last Name","default":""},"dob":{"type":"string","title":"Dob","default":""},"email":{"type":"string","title":"Email","default":""},"phone":{"type":"string","title":"Phone","default":""},"id_file":{"type":"string","format":"binary","title":"Id File"}},"type":"object","title":"Body_submit_request_api_docfraud_file_requests_post"},"Body_upload_api_communicate_conversations__conv_id__files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_api_communicate_conversations__conv_id__files_post"},"Body_upload_avatar_api_users_avatar_post":{"properties":{"avatar":{"type":"string","format":"binary","title":"Avatar"}},"type":"object","required":["avatar"],"title":"Body_upload_avatar_api_users_avatar_post"},"Body_upload_banner_api_users_banner_post":{"properties":{"banner":{"type":"string","format":"binary","title":"Banner"}},"type":"object","required":["banner"],"title":"Body_upload_banner_api_users_banner_post"},"Body_upload_document_api_docfraud_applicants__applicant_id__documents_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"doc_type":{"type":"string","title":"Doc Type","default":"other"},"supporting":{"type":"string","title":"Supporting","default":""}},"type":"object","required":["file"],"title":"Body_upload_document_api_docfraud_applicants__applicant_id__documents_post"},"Body_upload_logo_api_admin_logos__slot__post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_admin_logos__slot__post"},"Body_upload_logo_api_blkbuilder_projects__project_id__logo_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_blkbuilder_projects__project_id__logo_post"},"Body_upload_marketing_analytics_api_admin_marketing_analytics_post":{"properties":{"user_id":{"type":"string","title":"User Id"},"period":{"type":"string","title":"Period"},"notes":{"type":"string","title":"Notes","default":""},"impressions":{"type":"integer","title":"Impressions","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"conversions":{"type":"integer","title":"Conversions","default":0},"reach":{"type":"integer","title":"Reach","default":0},"engagement":{"type":"integer","title":"Engagement","default":0},"attachments":{"items":{"type":"string","format":"binary"},"type":"array","title":"Attachments","default":[]}},"type":"object","required":["user_id","period"],"title":"Body_upload_marketing_analytics_api_admin_marketing_analytics_post"},"Body_upload_platform_logo_api_admin_platforms__platform_id__logo_post":{"properties":{"logo":{"type":"string","format":"binary","title":"Logo"}},"type":"object","required":["logo"],"title":"Body_upload_platform_logo_api_admin_platforms__platform_id__logo_post"},"Body_upload_primary_video_api_admin_services__listing_id__primary_video_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"}},"type":"object","required":["video"],"title":"Body_upload_primary_video_api_admin_services__listing_id__primary_video_post"},"Body_upload_product_thumbnail_api_admin_products__product_id__thumbnail_post":{"properties":{"thumbnail":{"type":"string","format":"binary","title":"Thumbnail"}},"type":"object","required":["thumbnail"],"title":"Body_upload_product_thumbnail_api_admin_products__product_id__thumbnail_post"},"Body_upload_reference_api_v1_cinema_references_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"media_type":{"type":"string","title":"Media Type"},"project_id":{"type":"string","title":"Project Id"}},"type":"object","required":["file","media_type","project_id"],"title":"Body_upload_reference_api_v1_cinema_references_post"},"Body_upload_service_thumbnail_api_admin_services__listing_id__thumbnail_post":{"properties":{"thumbnail":{"type":"string","format":"binary","title":"Thumbnail"}},"type":"object","required":["thumbnail"],"title":"Body_upload_service_thumbnail_api_admin_services__listing_id__thumbnail_post"},"Body_upload_variation_option_thumbnail_api_admin_services__listing_id__variations__group_id__options__option_id__thumbnail_post":{"properties":{"thumbnail":{"type":"string","format":"binary","title":"Thumbnail"}},"type":"object","required":["thumbnail"],"title":"Body_upload_variation_option_thumbnail_api_admin_services__listing_id__variations__group_id__options__option_id__thumbnail_post"},"Body_upload_video_api_admin_pbp__listing_id__video_post":{"properties":{"video":{"type":"string","format":"binary","title":"Video"}},"type":"object","required":["video"],"title":"Body_upload_video_api_admin_pbp__listing_id__video_post"},"Body_voice_send_api_communicate_conversations__conv_id__voice_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"duration_ms":{"type":"integer","title":"Duration Ms","default":0}},"type":"object","required":["file"],"title":"Body_voice_send_api_communicate_conversations__conv_id__voice_post"},"Body_wb_save_api_communicate_meetings__meeting_id__whiteboards_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_wb_save_api_communicate_meetings__meeting_id__whiteboards_post"},"ChangePasswordBody":{"properties":{"current_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Password"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["new_password"],"title":"ChangePasswordBody"},"CheckoutInitBody":{"properties":{"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["product_id"],"title":"CheckoutInitBody"},"CommentCreate":{"properties":{"body":{"type":"string","title":"Body"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"}},"type":"object","required":["body"],"title":"CommentCreate"},"FAQCreate":{"properties":{"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"category":{"type":"string","title":"Category","default":"General"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"is_published":{"type":"boolean","title":"Is Published","default":true}},"type":"object","required":["question","answer"],"title":"FAQCreate"},"FleetBody":{"properties":{"allowlist":{"items":{"type":"string"},"type":"array","maxItems":40,"title":"Allowlist"},"app_version":{"type":"string","maxLength":40,"title":"App Version","default":""},"apk_url":{"type":"string","maxLength":500,"title":"Apk Url","default":""},"apk_sha256":{"type":"string","maxLength":64,"title":"Apk Sha256","default":""}},"additionalProperties":false,"type":"object","title":"FleetBody"},"ForgotPasswordBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KioskBody":{"properties":{"on":{"type":"boolean","title":"On"}},"additionalProperties":false,"type":"object","required":["on"],"title":"KioskBody"},"LoginBody":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identifier"},"password":{"type":"string","title":"Password"}},"type":"object","required":["password"],"title":"LoginBody"},"MessageCreate":{"properties":{"body":{"type":"string","title":"Body"}},"type":"object","required":["body"],"title":"MessageCreate"},"PostCreate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"body":{"type":"string","title":"Body"},"post_type":{"type":"string","enum":["discussion","announcement","resource","question","showcase"],"title":"Post Type","default":"discussion"},"category":{"type":"string","title":"Category","default":"General Discussion"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["body"],"title":"PostCreate"},"ProfileUpdateBody":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"bio":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bio"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"social_links":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Social Links"}},"type":"object","title":"ProfileUpdateBody"},"ProvisioningBody":{"properties":{"wifi_ssid":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Wifi Ssid"},"wifi_password":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"Wifi Password"},"wifi_security":{"anyOf":[{"type":"string","enum":["NONE","WPA","WEP","EAP"]},{"type":"null"}],"title":"Wifi Security"}},"additionalProperties":false,"type":"object","title":"ProvisioningBody"},"RegisterBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"full_name":{"type":"string","title":"Full Name"},"username":{"type":"string","title":"Username"}},"type":"object","required":["email","password","full_name","username"],"title":"RegisterBody"},"ResetPasswordBody":{"properties":{"token":{"type":"string","maxLength":512,"minLength":16,"title":"Token"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordBody"},"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"},"VoteBody":{"properties":{"vote_value":{"type":"integer","enum":[-1,1],"title":"Vote Value"}},"type":"object","required":["vote_value"],"title":"VoteBody"}}}}