{"openapi": "3.1.0", "info": {"title": "Dromad API", "version": "1", "description": "GEO research tools for coding agents."}, "paths": {"/api/v1/version": {"get": {"operationId": "dromad_server_api_meta_get_version", "summary": "Get Version", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ServerVersion"}}}}}, "description": "The oldest `dromad` CLI this server answers. Needs no credential. An\nolder CLI gets `cli_outdated` (HTTP 426) from every other endpoint, before\nanything is run or charged; other clients are not checked.", "tags": ["meta"]}}, "/api/v1/me": {"get": {"operationId": "dromad_server_api_accounts_me", "summary": "Me", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Me"}}}}}, "description": "The account and credential this request authenticated as.", "tags": ["account"], "security": [{"BearerAuth": []}]}}, "/api/v1/api-keys": {"get": {"operationId": "dromad_server_api_accounts_list_api_keys", "summary": "List Api Keys", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiKeyList"}}}}}, "tags": ["account"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "dromad_server_api_accounts_create_api_key", "summary": "Create Api Key", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiKeyCreated"}}}}}, "description": "Create an API key that acts in ``workspace_id`` (your own workspace if\nomitted) and spends its credit. The response carries the key itself, once.", "tags": ["account"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiKeyCreateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/api-keys/{key_id}": {"delete": {"operationId": "dromad_server_api_accounts_revoke_api_key", "summary": "Revoke Api Key", "parameters": [{"in": "path", "name": "key_id", "schema": {"title": "Key Id", "type": "string"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "tags": ["account"], "security": [{"BearerAuth": []}]}}, "/api/v1/cli/auth/start": {"post": {"operationId": "dromad_server_api_cli_auth_start", "summary": "Start", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CLIAuthStart"}}}}}, "tags": ["cli auth"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CLIAuthStartRequest"}}}, "required": true}}}, "/api/v1/cli/auth/poll": {"post": {"operationId": "dromad_server_api_cli_auth_poll", "summary": "Poll", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CLIAuthPoll"}}}}}, "tags": ["cli auth"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CLIAuthPollRequest"}}}, "required": true}}}, "/api/v1/cli/auth/token": {"delete": {"operationId": "dromad_server_api_cli_auth_revoke_current_token", "summary": "Revoke Current Token", "parameters": [], "responses": {"204": {"description": "No Content"}}, "description": "Revoke the CLI token this request is authenticated with (``dromad logout``).", "tags": ["cli auth"], "security": [{"BearerAuth": []}]}}, "/api/v1/prompts": {"post": {"operationId": "dromad_server_api_runs_create_prompt", "summary": "Create Prompt", "parameters": [], "responses": {"202": {"description": "Accepted", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PromptBatch"}}}}}, "description": "Run a prompt on one or more engines. Returns the queued batch and its\nruns at once; wait for them with ``GET /batches/{id}?wait=30``.", "tags": ["runs"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PromptRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/runs": {"get": {"operationId": "dromad_server_api_runs_list_runs", "summary": "List Runs", "parameters": [{"in": "query", "name": "batch", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Batch"}, "required": false}, {"in": "query", "name": "fanout", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Fanout"}, "required": false}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project"}, "required": false}, {"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 50, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cursor"}, "required": false}, {"in": "query", "name": "wait", "schema": {"default": 0, "title": "Wait", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RunList"}}}}}, "description": "Newest first, across every workspace this credential can act in.\n``project`` or ``workspace`` narrows it; ``fanout`` filters to one fanout's\nruns and ``batch`` to one batch,\nand with ``wait`` (seconds, up to 30) the call holds until that batch has\nfinished.", "tags": ["runs"], "security": [{"BearerAuth": []}]}}, "/api/v1/runs/{run_id}": {"get": {"operationId": "dromad_server_api_runs_get_run", "summary": "Get Run", "parameters": [{"in": "path", "name": "run_id", "schema": {"title": "Run Id", "type": "string"}, "required": true}, {"in": "query", "name": "wait", "schema": {"default": 0, "title": "Wait", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Run"}}}}}, "description": "One run. With ``wait`` (seconds, up to 30) the call holds until it has finished.", "tags": ["runs"], "security": [{"BearerAuth": []}]}}, "/api/v1/batches/{batch_id}": {"get": {"operationId": "dromad_server_api_runs_get_batch", "summary": "Get Batch", "parameters": [{"in": "path", "name": "batch_id", "schema": {"title": "Batch Id", "type": "string"}, "required": true}, {"in": "query", "name": "wait", "schema": {"default": 0, "title": "Wait", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PromptBatch"}}}}}, "description": "A batch and its runs. With ``wait`` (seconds, up to 30) the call holds\nuntil every run has finished.", "tags": ["runs"], "security": [{"BearerAuth": []}]}}, "/api/v1/citation-analyses": {"post": {"operationId": "dromad_server_api_analyses_create_citation_analysis", "summary": "Create Citation Analysis", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/CitationAnalysis"}}}}}, "description": "Count what a set of prompt runs cited. ``ids`` takes run IDs and batch\nIDs; the analysis is computed from stored results and returned complete.", "tags": ["analyses"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CitationAnalysisRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/questions": {"post": {"operationId": "dromad_server_api_analyses_create_questions", "summary": "Create Questions", "parameters": [], "responses": {"202": {"description": "Accepted", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuestionsAnalysis"}}}}}, "description": "Generate the questions people ask about a topic. Returns the queued\nanalysis at once; wait for it with ``GET /analyses/{id}?wait=30``.", "tags": ["analyses"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/QuestionsRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/analyses": {"get": {"operationId": "dromad_server_api_analyses_list_analyses", "summary": "List Analyses", "parameters": [{"in": "query", "name": "kind", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Kind"}, "required": false}, {"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project"}, "required": false}, {"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 50, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cursor"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AnalysisList"}}}}}, "description": "Newest first; ``kind`` filters (``questions`` or ``citations``), ``project``\nor ``workspace`` narrows to one.", "tags": ["analyses"], "security": [{"BearerAuth": []}]}}, "/api/v1/analyses/{analysis_id}": {"get": {"operationId": "dromad_server_api_analyses_get_analysis", "summary": "Get Analysis", "parameters": [{"in": "path", "name": "analysis_id", "schema": {"title": "Analysis Id", "type": "string"}, "required": true}, {"in": "query", "name": "wait", "schema": {"default": 0, "title": "Wait", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"discriminator": {"mapping": {"citations": "#/components/schemas/CitationAnalysis", "questions": "#/components/schemas/QuestionsAnalysis"}, "propertyName": "kind"}, "oneOf": [{"$ref": "#/components/schemas/QuestionsAnalysis"}, {"$ref": "#/components/schemas/CitationAnalysis"}], "title": "Response"}}}}}, "description": "One analysis. With ``wait`` (seconds, up to 30) the call holds until it has finished.", "tags": ["analyses"], "security": [{"BearerAuth": []}]}}, "/api/v1/fanouts/estimate": {"post": {"operationId": "dromad_server_api_fanouts_estimate_fanout", "summary": "Estimate Fanout", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanoutEstimate"}}}}}, "description": "What a fanout would run and its estimated cost: prompts \u00d7 engines \u00d7 runs\nprompt runs, each at its engine's current prompt price. Informational: it\nstarts nothing, holds nothing and is not a quote.", "tags": ["fanouts"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanoutRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/fanouts": {"post": {"operationId": "dromad_server_api_fanouts_create_fanout", "summary": "Create Fanout", "parameters": [], "responses": {"202": {"description": "Accepted", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Fanout"}}}}}, "description": "Run every prompt on every engine ``runs`` times, web search on, to\nrecord what each searched. Returns the queued fanout at once; wait for it\nwith ``GET /fanouts/{id}?wait=30``. The whole fanout is priced and its\ncredit reserved at once: if the workspace's available credit does not\ncover all of it, none of it starts (``insufficient_credit``). Each run is\nthen charged when it completes and released if it fails.", "tags": ["fanouts"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanoutRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}, "get": {"operationId": "dromad_server_api_fanouts_list_fanouts", "summary": "List Fanouts", "parameters": [{"in": "query", "name": "project", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Project"}, "required": false}, {"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 50, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cursor"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/FanoutList"}}}}}, "description": "Newest first, without their observations. ``project`` or ``workspace``\nnarrows it.", "tags": ["fanouts"], "security": [{"BearerAuth": []}]}}, "/api/v1/fanouts/{fanout_id}": {"get": {"operationId": "dromad_server_api_fanouts_get_fanout", "summary": "Get Fanout", "parameters": [{"in": "path", "name": "fanout_id", "schema": {"title": "Fanout Id", "type": "string"}, "required": true}, {"in": "query", "name": "wait", "schema": {"default": 0, "title": "Wait", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Fanout"}}}}}, "description": "The fanout and every query observed, nested prompt \u2192 engine \u2192 run.\nWith ``wait`` (seconds, up to 30) the call holds until every run has\nfinished. Each run's answer, sources and raw envelope are on the run\n(``GET /runs/{run_id}``).", "tags": ["fanouts"], "security": [{"BearerAuth": []}]}}, "/api/v1/audits": {"post": {"operationId": "dromad_server_api_audits_create_audit", "summary": "Create Audit", "parameters": [], "responses": {"202": {"description": "Accepted", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Run"}}}}}, "description": "Audit one page. Returns the queued run at once; its ``result`` is the\naudit document once ``GET /runs/{id}?wait=30`` reports it finished.", "tags": ["audits"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AuditRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/runs/{object_id}/share": {"get": {"operationId": "run_share_status", "summary": "Share Status", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareStatus"}}}}}, "description": "Whether the object is shared, and its link if it is.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "run_share", "summary": "Enable", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareState"}}}}}, "description": "Share with anyone who has the link. Only finished objects can be shared;\nasking again returns the same link.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}, "delete": {"operationId": "run_unshare", "summary": "Revoke", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "description": "Stop sharing: the link stops working at once.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}}, "/api/v1/runs/{object_id}/share/rotate": {"post": {"operationId": "run_share_rotate", "summary": "Rotate", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareState"}}}}}, "description": "Replace the link: the old one stops working, the new one is returned.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}}, "/api/v1/analyses/{object_id}/share": {"get": {"operationId": "analysis_share_status", "summary": "Share Status", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareStatus"}}}}}, "description": "Whether the object is shared, and its link if it is.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "analysis_share", "summary": "Enable", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareState"}}}}}, "description": "Share with anyone who has the link. Only finished objects can be shared;\nasking again returns the same link.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}, "delete": {"operationId": "analysis_unshare", "summary": "Revoke", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "description": "Stop sharing: the link stops working at once.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}}, "/api/v1/analyses/{object_id}/share/rotate": {"post": {"operationId": "analysis_share_rotate", "summary": "Rotate", "parameters": [{"in": "path", "name": "object_id", "schema": {"title": "Object Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ShareState"}}}}}, "description": "Replace the link: the old one stops working, the new one is returned.", "tags": ["sharing"], "security": [{"BearerAuth": []}]}}, "/api/v1/pricing": {"get": {"operationId": "dromad_server_api_billing_get_pricing", "summary": "Get Pricing", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RateCard"}}}}}, "description": "What each operation costs now. Needs no credential. A prompt on several\nengines costs the sum of its engines' prices.", "tags": ["billing"]}}, "/api/v1/billing": {"get": {"operationId": "dromad_server_api_billing_get_billing", "summary": "Get Billing", "parameters": [{"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BillingSummary"}}}}}, "description": "A workspace's credit: what it has, what is held for work in progress,\nand what new work can use. Your personal workspace unless ``workspace``\nnames another you belong to.", "tags": ["billing"], "security": [{"BearerAuth": []}]}}, "/api/v1/billing/transactions": {"get": {"operationId": "dromad_server_api_billing_list_transactions", "summary": "List Transactions", "parameters": [{"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}, {"in": "query", "name": "limit", "schema": {"default": 50, "title": "Limit", "type": "integer"}, "required": false}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cursor"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/TransactionList"}}}}}, "description": "Every change to the workspace's balance, newest first, with who caused it.", "tags": ["billing"], "security": [{"BearerAuth": []}]}}, "/api/v1/billing/usage": {"get": {"operationId": "dromad_server_api_billing_get_usage", "summary": "Get Usage", "parameters": [{"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}, {"in": "query", "name": "days", "schema": {"default": 30, "title": "Days", "type": "integer"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/UsageReport"}}}}}, "description": "What was charged, by day, product and engine. Work that failed was not\ncharged and is not listed.", "tags": ["billing"], "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces": {"get": {"operationId": "dromad_server_api_workspaces_list_workspaces", "summary": "List Workspaces", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkspaceList"}}}}}, "description": "The workspaces this credential can act in, your own first.", "tags": ["workspaces"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "dromad_server_api_workspaces_create_workspace", "summary": "Create Workspace", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Workspace"}}}}}, "description": "Start a team workspace. You are its admin.", "tags": ["workspaces"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkspaceCreateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces/{workspace_id}": {"get": {"operationId": "dromad_server_api_workspaces_get_workspace", "summary": "Get Workspace", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Workspace"}}}}}, "tags": ["workspaces"], "security": [{"BearerAuth": []}]}, "patch": {"operationId": "dromad_server_api_workspaces_rename_workspace", "summary": "Rename Workspace", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Workspace"}}}}}, "description": "Admins only.", "tags": ["workspaces"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/WorkspaceUpdateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces/{workspace_id}/members": {"get": {"operationId": "dromad_server_api_workspaces_list_members", "summary": "List Members", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemberList"}}}}}, "tags": ["workspaces"], "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces/{workspace_id}/members/{member_id}": {"patch": {"operationId": "dromad_server_api_workspaces_change_role", "summary": "Change Role", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Member"}}}}}, "description": "Admins only. A workspace keeps at least one admin.", "tags": ["workspaces"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MemberUpdateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}, "delete": {"operationId": "dromad_server_api_workspaces_remove_member", "summary": "Remove Member", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}, {"in": "path", "name": "member_id", "schema": {"title": "Member Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "description": "An admin removes anyone; anyone removes themselves. Their work stays:\nit is the workspace's.", "tags": ["workspaces"], "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces/{workspace_id}/invitations": {"get": {"operationId": "dromad_server_api_workspaces_list_invitations", "summary": "List Invitations", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/InvitationList"}}}}}, "description": "Admins only.", "tags": ["workspaces"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "dromad_server_api_workspaces_create_invitation", "summary": "Create Invitation", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/InvitationCreated"}}}}}, "description": "Admins only. The response carries the link, once; it is also emailed\nwhen this server can send mail (``emailed`` says whether it was).", "tags": ["workspaces"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/InvitationCreateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/workspaces/{workspace_id}/invitations/{invitation_id}": {"delete": {"operationId": "dromad_server_api_workspaces_revoke_invitation", "summary": "Revoke Invitation", "parameters": [{"in": "path", "name": "workspace_id", "schema": {"title": "Workspace Id", "type": "string"}, "required": true}, {"in": "path", "name": "invitation_id", "schema": {"title": "Invitation Id", "type": "string"}, "required": true}], "responses": {"204": {"description": "No Content"}}, "tags": ["workspaces"], "security": [{"BearerAuth": []}]}}, "/api/v1/projects": {"get": {"operationId": "dromad_server_api_projects_list_projects", "summary": "List Projects", "parameters": [{"in": "query", "name": "workspace", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Workspace"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectList"}}}}}, "description": "Every project this credential can see, by workspace; ``workspace``\nnarrows to one.", "tags": ["projects"], "security": [{"BearerAuth": []}]}, "post": {"operationId": "dromad_server_api_projects_create_project", "summary": "Create Project", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Project"}}}}}, "description": "Start a project. Any member of the workspace can.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectCreateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}}, "/api/v1/projects/{project_id}": {"patch": {"operationId": "dromad_server_api_projects_update_project", "summary": "Update Project", "parameters": [{"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Project"}}}}}, "description": "Rename a project, or say what it is about. Any member can. ``context``\nreplaces the old one whole.", "tags": ["projects"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ProjectUpdateRequest"}}}, "required": true}, "security": [{"BearerAuth": []}]}, "get": {"operationId": "dromad_server_api_projects_get_project", "summary": "Get Project", "parameters": [{"in": "path", "name": "project_id", "schema": {"title": "Project Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Project"}}}}}, "tags": ["projects"], "security": [{"BearerAuth": []}]}}}, "components": {"schemas": {"ServerVersion": {"properties": {"min_cli_version": {"title": "Min Cli Version", "type": "string"}}, "required": ["min_cli_version"], "title": "ServerVersion", "type": "object"}, "Credential": {"description": "The credential a request authenticated with.", "properties": {"kind": {"title": "Kind", "type": "string"}, "id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}}, "required": ["kind", "id", "name"], "title": "Credential", "type": "object"}, "Me": {"properties": {"email": {"title": "Email", "type": "string"}, "credential": {"$ref": "#/components/schemas/Credential"}, "workspaces": {"description": "Where this credential can act, your own first.", "items": {"$ref": "#/components/schemas/Workspace"}, "title": "Workspaces", "type": "array"}}, "required": ["email", "credential"], "title": "Me", "type": "object"}, "Workspace": {"properties": {"id": {"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "kind": {"description": "personal (yours alone) or team.", "title": "Kind", "type": "string"}, "role": {"description": "Your role in it: admin or member.", "title": "Role", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["id", "name", "kind", "role", "created_at"], "title": "Workspace", "type": "object"}, "ApiKey": {"properties": {"id": {"pattern": "^(?:ak)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "prefix": {"title": "Prefix", "type": "string"}, "workspace_id": {"anyOf": [{"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The one workspace this key acts in and whose credit it spends.", "title": "Workspace Id"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "last_used_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Used At"}, "revoked_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Revoked At"}}, "required": ["id", "name", "prefix", "created_at"], "title": "ApiKey", "type": "object"}, "ApiKeyList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ApiKey"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "ApiKeyList", "type": "object"}, "ApiKeyCreated": {"description": "Returned once, at creation. ``key`` is never retrievable again.", "properties": {"id": {"pattern": "^(?:ak)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "prefix": {"title": "Prefix", "type": "string"}, "workspace_id": {"anyOf": [{"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The one workspace this key acts in and whose credit it spends.", "title": "Workspace Id"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "last_used_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Used At"}, "revoked_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Revoked At"}, "key": {"title": "Key", "type": "string"}}, "required": ["id", "name", "prefix", "created_at", "key"], "title": "ApiKeyCreated", "type": "object"}, "ApiKeyCreateRequest": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "workspace_id": {"anyOf": [{"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "Where the key acts. Your own workspace if omitted.", "title": "Workspace Id"}}, "required": ["name"], "title": "ApiKeyCreateRequest", "type": "object"}, "CLIAuthStart": {"description": "What the CLI shows the user, and the secret it polls with.\n\n``device_code`` never leaves the CLI; ``user_code`` is what the person\ncompares in the browser before approving.", "properties": {"device_code": {"title": "Device Code", "type": "string"}, "user_code": {"title": "User Code", "type": "string"}, "verification_uri": {"title": "Verification Uri", "type": "string"}, "verification_uri_complete": {"title": "Verification Uri Complete", "type": "string"}, "expires_in": {"title": "Expires In", "type": "integer"}, "interval": {"title": "Interval", "type": "integer"}}, "required": ["device_code", "user_code", "verification_uri", "verification_uri_complete", "expires_in", "interval"], "title": "CLIAuthStart", "type": "object"}, "CLIAuthStartRequest": {"properties": {"client_name": {"maxLength": 200, "minLength": 1, "title": "Client Name", "type": "string"}}, "required": ["client_name"], "title": "CLIAuthStartRequest", "type": "object"}, "CLIAuthPoll": {"properties": {"status": {"title": "Status", "type": "string"}, "token": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Token"}, "token_id": {"anyOf": [{"pattern": "^(?:ct)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Token Id"}, "email": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Email"}}, "required": ["status"], "title": "CLIAuthPoll", "type": "object"}, "CLIAuthPollRequest": {"properties": {"device_code": {"title": "Device Code", "type": "string"}}, "required": ["device_code"], "title": "CLIAuthPollRequest", "type": "object"}, "AuditContent": {"properties": {"extraction_method": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Which arm of the main-content cascade found the content.", "title": "Extraction Method"}, "word_count": {"default": 0, "title": "Word Count", "type": "integer"}, "likely_js_dependent": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "The served HTML looks like a JavaScript shell (Dromad does not render JS).", "title": "Likely Js Dependent"}, "excerpt": {"default": "", "title": "Excerpt", "type": "string"}, "blocks": {"default": 0, "title": "Blocks", "type": "integer"}, "code_blocks": {"default": 0, "title": "Code Blocks", "type": "integer"}, "tables": {"default": 0, "title": "Tables", "type": "integer"}, "links": {"allOf": [{"$ref": "#/components/schemas/LinkCounts"}], "default": {"total": 0, "main": 0, "navigation": 0, "internal": 0, "external": 0}}, "rendering_signals": {"additionalProperties": true, "default": {}, "title": "Rendering Signals", "type": "object"}}, "title": "AuditContent", "type": "object"}, "AuditDates": {"properties": {"published": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Published"}, "modified": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Modified"}, "last_modified_header": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Last Modified Header"}}, "title": "AuditDates", "type": "object"}, "AuditFetch": {"properties": {"status": {"description": "success, redirect, client_error, server_error, blocked, non_html, fetch_error", "title": "Status", "type": "string"}, "http_status": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Http Status"}, "redirect_chain": {"default": [], "items": {"$ref": "#/components/schemas/RedirectHop"}, "title": "Redirect Chain", "type": "array"}, "content_type": {"default": "", "title": "Content Type", "type": "string"}, "server_headers": {"additionalProperties": {"type": "string"}, "default": {}, "title": "Server Headers", "type": "object"}, "elapsed_ms": {"default": 0, "title": "Elapsed Ms", "type": "integer"}, "error": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Error"}, "truncated": {"default": false, "title": "Truncated", "type": "boolean"}, "robots_txt": {"anyOf": [{"$ref": "#/components/schemas/RobotsTxt"}, {"type": "null"}]}}, "required": ["status"], "title": "AuditFetch", "type": "object"}, "AuditFinding": {"properties": {"key": {"title": "Key", "type": "string"}, "version": {"title": "Version", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "category": {"title": "Category", "type": "string"}, "severity": {"title": "Severity", "type": "string"}, "evidence_level": {"title": "Evidence Level", "type": "string"}, "status": {"title": "Status", "type": "string"}, "reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}, "items": {"default": [], "items": {"$ref": "#/components/schemas/FindingItem"}, "title": "Items", "type": "array"}, "why_it_matters": {"title": "Why It Matters", "type": "string"}, "recommendation": {"title": "Recommendation", "type": "string"}}, "required": ["key", "version", "name", "category", "severity", "evidence_level", "status", "why_it_matters", "recommendation"], "title": "AuditFinding", "type": "object"}, "AuditMetadata": {"properties": {"title": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Title"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "canonical": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Canonical"}, "lang": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Lang"}, "robots": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Robots"}, "x_robots_tag": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "X Robots Tag"}, "noindex": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Noindex"}, "nofollow": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Nofollow"}, "open_graph": {"additionalProperties": {"type": "string"}, "default": {}, "title": "Open Graph", "type": "object"}, "dates": {"allOf": [{"$ref": "#/components/schemas/AuditDates"}], "default": {"published": null, "modified": null, "last_modified_header": null}}, "structured_data_types": {"default": [], "items": {"type": "string"}, "title": "Structured Data Types", "type": "array"}, "structured_data_blocks": {"default": 0, "title": "Structured Data Blocks", "type": "integer"}, "structured_data_errors": {"default": 0, "title": "Structured Data Errors", "type": "integer"}, "markdown_alternates": {"default": [], "items": {"type": "string"}, "title": "Markdown Alternates", "type": "array"}, "llms_txt": {"default": [], "items": {"$ref": "#/components/schemas/LlmsTxtProbe"}, "title": "Llms Txt", "type": "array"}}, "title": "AuditMetadata", "type": "object"}, "AuditPage": {"properties": {"url": {"description": "As requested.", "title": "Url", "type": "string"}, "final_url": {"description": "Where the fetch landed after redirects.", "title": "Final Url", "type": "string"}, "domain": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Domain"}}, "required": ["url", "final_url"], "title": "AuditPage", "type": "object"}, "AuditResult": {"properties": {"page": {"$ref": "#/components/schemas/AuditPage"}, "fetch": {"$ref": "#/components/schemas/AuditFetch"}, "content": {"$ref": "#/components/schemas/AuditContent"}, "structure": {"$ref": "#/components/schemas/AuditStructure"}, "metadata": {"$ref": "#/components/schemas/AuditMetadata"}, "findings": {"items": {"$ref": "#/components/schemas/AuditFinding"}, "title": "Findings", "type": "array"}}, "required": ["page", "fetch", "content", "structure", "metadata", "findings"], "title": "AuditResult", "type": "object"}, "AuditStructure": {"properties": {"headings": {"default": [], "description": "The main-content outline, in order.", "items": {"$ref": "#/components/schemas/Heading"}, "title": "Headings", "type": "array"}, "h1_count": {"default": 0, "description": "h1 headings in the main content's outline. Whether the page has an h1 anywhere is the missing_h1 finding.", "title": "H1 Count", "type": "integer"}, "level_skips": {"default": [], "items": {"$ref": "#/components/schemas/LevelSkip"}, "title": "Level Skips", "type": "array"}}, "title": "AuditStructure", "type": "object"}, "Batch": {"properties": {"id": {"pattern": "^(?:rq)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "kind": {"title": "Kind", "type": "string"}, "status": {"title": "Status", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "input": {"additionalProperties": true, "title": "Input", "type": "object"}, "run_ids": {"items": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, "title": "Run Ids", "type": "array"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}}, "required": ["id", "kind", "status", "input", "run_ids", "created_at", "updated_at"], "title": "Batch", "type": "object"}, "FindingEvidence": {"properties": {"label": {"title": "Label", "type": "string"}, "value": {"title": "Value"}, "source": {"default": "", "title": "Source", "type": "string"}}, "required": ["label"], "title": "FindingEvidence", "type": "object"}, "FindingItem": {"properties": {"summary": {"title": "Summary", "type": "string"}, "subtype": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Subtype"}, "severity": {"title": "Severity", "type": "string"}, "details": {"additionalProperties": true, "default": {}, "title": "Details", "type": "object"}, "evidence": {"default": [], "items": {"$ref": "#/components/schemas/FindingEvidence"}, "title": "Evidence", "type": "array"}}, "required": ["summary", "severity"], "title": "FindingItem", "type": "object"}, "Heading": {"properties": {"level": {"title": "Level", "type": "integer"}, "text": {"title": "Text", "type": "string"}}, "required": ["level", "text"], "title": "Heading", "type": "object"}, "LevelSkip": {"properties": {"from_level": {"title": "From Level", "type": "integer"}, "to_level": {"title": "To Level", "type": "integer"}, "at": {"title": "At", "type": "string"}}, "required": ["from_level", "to_level", "at"], "title": "LevelSkip", "type": "object"}, "LinkCounts": {"description": "Links to http(s) pages. Same-page anchors (``#section``) and ``mailto:``,\n``tel:`` and ``javascript:`` hrefs are not links here, so an API reference whose\nbody only links to its own parameters has ``main: 0``.", "properties": {"total": {"default": 0, "title": "Total", "type": "integer"}, "main": {"default": 0, "description": "In the main content.", "title": "Main", "type": "integer"}, "navigation": {"default": 0, "description": "In nav, header, footer and sidebars.", "title": "Navigation", "type": "integer"}, "internal": {"default": 0, "title": "Internal", "type": "integer"}, "external": {"default": 0, "title": "External", "type": "integer"}}, "title": "LinkCounts", "type": "object"}, "LlmsTxtProbe": {"properties": {"kind": {"title": "Kind", "type": "string"}, "url": {"title": "Url", "type": "string"}, "http_status": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Http Status"}, "found": {"description": "A 200 whose body is not an HTML page.", "title": "Found", "type": "boolean"}, "links": {"default": 0, "title": "Links", "type": "integer"}}, "required": ["kind", "url", "found"], "title": "LlmsTxtProbe", "type": "object"}, "PromptBatch": {"description": "A prompt batch and its runs: the response to ``POST /prompts`` (runs\nqueued) and, once finished, what ``dromad prompt --json`` prints.", "properties": {"batch": {"$ref": "#/components/schemas/Batch"}, "runs": {"items": {"$ref": "#/components/schemas/Run"}, "title": "Runs", "type": "array"}}, "required": ["batch", "runs"], "title": "PromptBatch", "type": "object"}, "PromptResult": {"description": "What one engine answered, and the sources it showed.", "properties": {"answer": {"title": "Answer", "type": "string"}, "sources": {"items": {"$ref": "#/components/schemas/SourceObservation"}, "title": "Sources", "type": "array"}, "searches": {"items": {"$ref": "#/components/schemas/SearchObservation"}, "title": "Searches", "type": "array"}, "citations_exposed": {"description": "Whether the answer carried any citation marks at all.", "title": "Citations Exposed", "type": "boolean"}, "searched": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Whether the engine searched the web. Null when that was not recorded.", "title": "Searched"}, "search_calls": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many searches it ran; one search can carry several queries, or none the provider showed. Null when that was not recorded.", "title": "Search Calls"}}, "required": ["answer", "sources", "searches", "citations_exposed"], "title": "PromptResult", "type": "object"}, "RedirectHop": {"properties": {"url": {"title": "Url", "type": "string"}, "status": {"title": "Status", "type": "integer"}, "location": {"title": "Location", "type": "string"}}, "required": ["url", "status", "location"], "title": "RedirectHop", "type": "object"}, "RobotsTxt": {"properties": {"url": {"title": "Url", "type": "string"}, "http_status": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Http Status"}, "found": {"title": "Found", "type": "boolean"}, "allows_page": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Whether robots.txt lets Dromad fetch the page.", "title": "Allows Page"}}, "required": ["url", "found", "allows_page"], "title": "RobotsTxt", "type": "object"}, "Run": {"properties": {"id": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "kind": {"title": "Kind", "type": "string"}, "status": {"title": "Status", "type": "string"}, "engine": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Engine"}, "model": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The model the provider reported using.", "title": "Model"}, "batch_id": {"anyOf": [{"pattern": "^(?:rq)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Batch Id"}, "fanout_id": {"anyOf": [{"pattern": "^(?:fo)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The fanout this run is one execution of, if any.", "title": "Fanout Id"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project this run is filed under. Null on a shared page.", "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who ran it, by email. Null on a shared page.", "title": "Created By"}, "input": {"additionalProperties": true, "title": "Input", "type": "object"}, "result": {"anyOf": [{"$ref": "#/components/schemas/PromptResult"}, {"$ref": "#/components/schemas/AuditResult"}, {"type": "null"}], "title": "Result"}, "error": {"anyOf": [{"$ref": "#/components/schemas/RunError"}, {"type": "null"}]}, "usage": {"anyOf": [{"$ref": "#/components/schemas/Usage"}, {"type": "null"}]}, "charge": {"anyOf": [{"$ref": "#/components/schemas/RunCharge"}, {"type": "null"}], "description": "What this run costs the account. Null if it was not billable."}, "cost_usd": {"anyOf": [{"type": "number"}, {"type": "null"}], "description": "No longer reported: always null. See `charge`.", "title": "Cost Usd"}, "duration_ms": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Duration Ms"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "started_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Started At"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}}, "required": ["id", "kind", "status", "input", "created_at"], "title": "Run", "type": "object"}, "RunCharge": {"description": "What one run costs the account. ``held`` while the work is queued or\nrunning: that much credit is set aside. Then ``captured`` (paid; a set of questions\npays for the questions it generated, which can be fewer than it held for)\nor ``released`` (the work failed and cost nothing).", "properties": {"status": {"description": "held, captured or released.", "title": "Status", "type": "string"}, "amount_usd": {"description": "Held while held; paid once captured; 0 if released.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount Usd", "type": "string"}, "unit": {"title": "Unit", "type": "string"}, "units": {"title": "Units", "type": "integer"}, "unit_price_usd": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unit Price Usd", "type": "string"}, "pricing_version": {"title": "Pricing Version", "type": "string"}}, "required": ["status", "amount_usd", "unit", "units", "unit_price_usd", "pricing_version"], "title": "RunCharge", "type": "object"}, "RunError": {"properties": {"code": {"title": "Code", "type": "string"}, "message": {"title": "Message", "type": "string"}, "engine": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Engine"}, "retryable": {"default": false, "title": "Retryable", "type": "boolean"}}, "required": ["code", "message"], "title": "RunError", "type": "object"}, "SearchObservation": {"description": "One query the engine searched, as the provider showed it.\n\nProviders order their search calls; several queries inside one call were\nissued together and have no order among themselves. The three provenance\nfields are null on a run recorded before they were kept.", "properties": {"query": {"title": "Query", "type": "string"}, "position": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "1-based place in the envelope, across the run.", "title": "Position"}, "search_call": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "1-based search call the query belongs to.", "title": "Search Call"}, "provider_search_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The provider's own ID for that search call.", "title": "Provider Search Id"}}, "required": ["query"], "title": "SearchObservation", "type": "object"}, "SourceObservation": {"properties": {"url": {"title": "Url", "type": "string"}, "raw_url": {"description": "The URL exactly as the engine returned it.", "title": "Raw Url", "type": "string"}, "resolution": {"title": "Resolution", "type": "string"}, "domain": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Registered domain of `url`; null if unresolved.", "title": "Domain"}, "domain_hint": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "For an unresolved redirect, the domain the engine's title named. A hint only.", "title": "Domain Hint"}, "title": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Title"}, "cited": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "title": "Cited"}, "citation_count": {"default": 0, "title": "Citation Count", "type": "integer"}, "citation_positions": {"description": "1-based positions in the answer's sequence of citations.", "items": {"type": "integer"}, "title": "Citation Positions", "type": "array"}, "search_query_observed": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Appeared in the results of a search the engine ran.", "title": "Search Query Observed"}, "retrieval_observed": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "The provider showed that the page's content reached the model.", "title": "Retrieval Observed"}}, "required": ["url", "raw_url", "resolution", "domain", "cited", "search_query_observed", "retrieval_observed"], "title": "SourceObservation", "type": "object"}, "Usage": {"properties": {"input_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Input Tokens"}, "output_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Output Tokens"}, "reasoning_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Reasoning Tokens"}, "total_tokens": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Total Tokens"}, "web_searches": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Web Searches"}}, "title": "Usage", "type": "object"}, "PromptRequest": {"properties": {"prompt": {"maxLength": 4000, "minLength": 1, "title": "Prompt", "type": "string"}, "engines": {"items": {"type": "string"}, "minItems": 1, "title": "Engines", "type": "array"}, "project": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project to file this under (pr_\u2026).", "title": "Project"}}, "required": ["prompt"], "title": "PromptRequest", "type": "object"}, "RunList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/RunSummary"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["items"], "title": "RunList", "type": "object"}, "RunSummary": {"properties": {"id": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "kind": {"title": "Kind", "type": "string"}, "status": {"title": "Status", "type": "string"}, "engine": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Engine"}, "batch_id": {"anyOf": [{"pattern": "^(?:rq)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Batch Id"}, "fanout_id": {"anyOf": [{"pattern": "^(?:fo)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Fanout Id"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "subject": {"description": "The prompt text, or what else the run was about.", "title": "Subject", "type": "string"}, "source_count": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Source Count"}, "cited_count": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Cited Count"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}}, "required": ["id", "kind", "status", "subject", "created_at"], "title": "RunSummary", "type": "object"}, "CitationAnalysis": {"description": "What a set of prompt runs cited. See :mod:`dromad.schemas.citations`\nfor what each count means and how unknowns are reported.", "properties": {"id": {"pattern": "^(?:fa|ca)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "status": {"title": "Status", "type": "string"}, "subject": {"title": "Subject", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project this is filed under. Null on a shared page.", "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who made it, by email. Null on a shared page.", "title": "Created By"}, "run_ids": {"items": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, "title": "Run Ids", "type": "array"}, "error": {"anyOf": [{"$ref": "#/components/schemas/RunError"}, {"type": "null"}]}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}, "kind": {"const": "citations", "default": "citations", "title": "Kind", "type": "string"}, "method": {"title": "Method", "type": "string"}, "brands": {"default": [], "items": {"type": "string"}, "title": "Brands", "type": "array"}, "target_domains": {"default": [], "items": {"type": "string"}, "title": "Target Domains", "type": "array"}, "totals": {"$ref": "#/components/schemas/CitationTotals"}, "engines": {"default": [], "items": {"$ref": "#/components/schemas/EngineSummary"}, "title": "Engines", "type": "array"}, "domains": {"default": [], "items": {"$ref": "#/components/schemas/DomainRow"}, "title": "Domains", "type": "array"}, "pages": {"default": [], "items": {"$ref": "#/components/schemas/PageRow"}, "title": "Pages", "type": "array"}, "overlap": {"$ref": "#/components/schemas/CitationOverlap"}, "retrieved_not_cited": {"default": [], "items": {"$ref": "#/components/schemas/SeenNotCited"}, "title": "Retrieved Not Cited", "type": "array"}, "textual_mentions": {"default": [], "items": {"$ref": "#/components/schemas/TextualMention"}, "title": "Textual Mentions", "type": "array"}, "domain_coverage": {"default": [], "items": {"$ref": "#/components/schemas/DomainCoverage"}, "title": "Domain Coverage", "type": "array"}, "excluded_runs": {"default": [], "items": {"$ref": "#/components/schemas/ExcludedRun"}, "title": "Excluded Runs", "type": "array"}}, "required": ["id", "status", "subject", "run_ids", "created_at", "method", "totals", "overlap"], "title": "CitationAnalysis", "type": "object"}, "CitationOverlap": {"properties": {"engines": {"title": "Engines", "type": "integer"}, "domains_by_engine_count": {"additionalProperties": {"type": "integer"}, "description": "How many cited domains were cited by 1, 2, \u2026 engines.", "title": "Domains By Engine Count", "type": "object"}, "pages_by_engine_count": {"additionalProperties": {"type": "integer"}, "title": "Pages By Engine Count", "type": "object"}, "domains_cited_by_every_engine": {"items": {"type": "string"}, "title": "Domains Cited By Every Engine", "type": "array"}, "pages_cited_by_every_engine": {"items": {"type": "string"}, "title": "Pages Cited By Every Engine", "type": "array"}}, "required": ["engines", "domains_by_engine_count", "pages_by_engine_count", "domains_cited_by_every_engine", "pages_cited_by_every_engine"], "title": "CitationOverlap", "type": "object"}, "CitationTotals": {"properties": {"runs": {"title": "Runs", "type": "integer"}, "prompts": {"title": "Prompts", "type": "integer"}, "engines": {"title": "Engines", "type": "integer"}, "citations": {"title": "Citations", "type": "integer"}, "unique_cited_urls": {"title": "Unique Cited Urls", "type": "integer"}, "unique_cited_domains": {"title": "Unique Cited Domains", "type": "integer"}, "sources_observed": {"description": "Every source any answer cited or listed.", "title": "Sources Observed", "type": "integer"}, "retrieved_not_cited": {"description": "Sources seen in search results or retrieval but not cited.", "title": "Retrieved Not Cited", "type": "integer"}, "citation_status_unknown": {"description": "Sources whose citation status the provider did not expose.", "title": "Citation Status Unknown", "type": "integer"}, "unresolved_sources": {"description": "Redirect URLs that could not be resolved.", "title": "Unresolved Sources", "type": "integer"}, "runs_without_citation_marks": {"title": "Runs Without Citation Marks", "type": "integer"}}, "required": ["runs", "prompts", "engines", "citations", "unique_cited_urls", "unique_cited_domains", "sources_observed", "retrieved_not_cited", "citation_status_unknown", "unresolved_sources", "runs_without_citation_marks"], "title": "CitationTotals", "type": "object"}, "DomainCoverage": {"properties": {"domain": {"title": "Domain", "type": "string"}, "runs": {"title": "Runs", "type": "integer"}, "cited_runs": {"title": "Cited Runs", "type": "integer"}, "unknown_runs": {"description": "Runs that did not cite it but whose citations were not exposed.", "title": "Unknown Runs", "type": "integer"}, "cited_rate": {"description": "cited_runs / runs; a floor when unknown_runs > 0.", "title": "Cited Rate", "type": "number"}, "prompts": {"title": "Prompts", "type": "integer"}, "cited_prompts": {"title": "Cited Prompts", "type": "integer"}, "citations": {"title": "Citations", "type": "integer"}, "pages": {"items": {"type": "string"}, "title": "Pages", "type": "array"}, "by_engine": {"items": {"$ref": "#/components/schemas/EngineCoverage"}, "title": "By Engine", "type": "array"}, "prompts_cited": {"items": {"type": "string"}, "title": "Prompts Cited", "type": "array"}, "prompts_seen_not_cited": {"description": "Prompts where it appeared in results but was never cited.", "items": {"type": "string"}, "title": "Prompts Seen Not Cited", "type": "array"}, "prompts_absent": {"description": "Prompts where it never appeared at all.", "items": {"type": "string"}, "title": "Prompts Absent", "type": "array"}}, "required": ["domain", "runs", "cited_runs", "unknown_runs", "cited_rate", "prompts", "cited_prompts", "citations", "pages", "by_engine", "prompts_cited", "prompts_seen_not_cited", "prompts_absent"], "title": "DomainCoverage", "type": "object"}, "DomainRow": {"properties": {"domain": {"title": "Domain", "type": "string"}, "citations": {"title": "Citations", "type": "integer"}, "pages": {"description": "Distinct cited pages on this domain.", "title": "Pages", "type": "integer"}, "runs": {"title": "Runs", "type": "integer"}, "prompts": {"title": "Prompts", "type": "integer"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}, "seen_not_cited": {"description": "Times it was seen in a run without being cited.", "title": "Seen Not Cited", "type": "integer"}}, "required": ["domain", "citations", "pages", "runs", "prompts", "engines", "seen_not_cited"], "title": "DomainRow", "type": "object"}, "EngineCoverage": {"properties": {"engine": {"title": "Engine", "type": "string"}, "runs": {"title": "Runs", "type": "integer"}, "cited_runs": {"title": "Cited Runs", "type": "integer"}, "unknown_runs": {"title": "Unknown Runs", "type": "integer"}}, "required": ["engine", "runs", "cited_runs", "unknown_runs"], "title": "EngineCoverage", "type": "object"}, "EngineSummary": {"properties": {"engine": {"title": "Engine", "type": "string"}, "runs": {"title": "Runs", "type": "integer"}, "runs_with_citations": {"title": "Runs With Citations", "type": "integer"}, "citations": {"title": "Citations", "type": "integer"}, "unique_cited_domains": {"title": "Unique Cited Domains", "type": "integer"}, "runs_without_citation_marks": {"title": "Runs Without Citation Marks", "type": "integer"}}, "required": ["engine", "runs", "runs_with_citations", "citations", "unique_cited_domains", "runs_without_citation_marks"], "title": "EngineSummary", "type": "object"}, "ExcludedRun": {"properties": {"run_id": {"title": "Run Id", "type": "string"}, "reason": {"title": "Reason", "type": "string"}}, "required": ["run_id", "reason"], "title": "ExcludedRun", "type": "object"}, "PageRow": {"properties": {"url": {"title": "Url", "type": "string"}, "domain": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Domain"}, "title": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Title"}, "citations": {"title": "Citations", "type": "integer"}, "runs": {"title": "Runs", "type": "integer"}, "prompts": {"title": "Prompts", "type": "integer"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}}, "required": ["url", "citations", "runs", "prompts", "engines"], "title": "PageRow", "type": "object"}, "SeenNotCited": {"properties": {"url": {"title": "Url", "type": "string"}, "domain": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Domain"}, "runs": {"title": "Runs", "type": "integer"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}}, "required": ["url", "runs", "engines"], "title": "SeenNotCited", "type": "object"}, "TextualMention": {"description": "Naive by design: a case-insensitive whole-word match of the term in\nanswer text. A single-word brand that is also an ordinary word, or a brand\nwritten differently, will be miscounted.", "properties": {"term": {"title": "Term", "type": "string"}, "runs_mentioning": {"title": "Runs Mentioning", "type": "integer"}, "runs": {"title": "Runs", "type": "integer"}, "prompts_mentioning": {"title": "Prompts Mentioning", "type": "integer"}, "prompts": {"title": "Prompts", "type": "integer"}, "occurrences": {"title": "Occurrences", "type": "integer"}, "runs_mentioning_by_engine": {"additionalProperties": {"type": "integer"}, "title": "Runs Mentioning By Engine", "type": "object"}}, "required": ["term", "runs_mentioning", "runs", "prompts_mentioning", "prompts", "occurrences", "runs_mentioning_by_engine"], "title": "TextualMention", "type": "object"}, "CitationAnalysisRequest": {"properties": {"ids": {"description": "Run IDs (dr_\u2026) and/or batch IDs (rq_\u2026); a batch contributes all its runs.", "items": {"type": "string"}, "maxItems": 500, "minItems": 1, "title": "Ids", "type": "array"}, "brands": {"description": "Terms to count in answer text (naive, case-insensitive word match).", "items": {"type": "string"}, "maxItems": 20, "title": "Brands", "type": "array"}, "domains": {"description": "Domains to report coverage for, e.g. exa.ai. Subdomains count.", "items": {"type": "string"}, "maxItems": 20, "title": "Domains", "type": "array"}, "use_project_context": {"default": false, "description": "With no brands and no domains given, use the ones the runs' project records: its domains, and its brands and competitors as terms. What was used is in the analysis, as always.", "title": "Use Project Context", "type": "boolean"}}, "required": ["ids"], "title": "CitationAnalysisRequest", "type": "object"}, "Question": {"properties": {"id": {"title": "Id", "type": "string"}, "text": {"title": "Text", "type": "string"}, "cluster_id": {"title": "Cluster Id", "type": "string"}, "intent": {"title": "Intent", "type": "string"}, "specificity": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Specificity"}}, "required": ["id", "text", "cluster_id", "intent"], "title": "Question", "type": "object"}, "QuestionCluster": {"properties": {"id": {"title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "intent": {"title": "Intent", "type": "string"}, "question_ids": {"items": {"type": "string"}, "title": "Question Ids", "type": "array"}}, "required": ["id", "name", "intent", "question_ids"], "title": "QuestionCluster", "type": "object"}, "QuestionsAnalysis": {"properties": {"id": {"pattern": "^(?:fa|ca)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "status": {"title": "Status", "type": "string"}, "subject": {"title": "Subject", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project this is filed under. Null on a shared page.", "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who made it, by email. Null on a shared page.", "title": "Created By"}, "run_ids": {"items": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, "title": "Run Ids", "type": "array"}, "error": {"anyOf": [{"$ref": "#/components/schemas/RunError"}, {"type": "null"}]}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}, "kind": {"const": "questions", "default": "questions", "title": "Kind", "type": "string"}, "topic": {"title": "Topic", "type": "string"}, "requested_count": {"title": "Requested Count", "type": "integer"}, "questions": {"default": [], "items": {"$ref": "#/components/schemas/Question"}, "title": "Questions", "type": "array"}, "clusters": {"default": [], "items": {"$ref": "#/components/schemas/QuestionCluster"}, "title": "Clusters", "type": "array"}, "provenance": {"anyOf": [{"$ref": "#/components/schemas/QuestionsProvenance"}, {"type": "null"}]}, "charge": {"anyOf": [{"$ref": "#/components/schemas/RunCharge"}, {"type": "null"}], "description": "Held for requested_count, paid for the questions generated."}}, "required": ["id", "status", "subject", "run_ids", "created_at", "topic", "requested_count"], "title": "QuestionsAnalysis", "type": "object"}, "QuestionsProvenance": {"properties": {"strategy": {"title": "Strategy", "type": "string"}, "prompt_version": {"title": "Prompt Version", "type": "string"}, "prompt_sha": {"description": "SHA-256 of prompt_text.", "title": "Prompt Sha", "type": "string"}, "prompt_text": {"description": "The full generation prompt, as sent.", "title": "Prompt Text", "type": "string"}, "model": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Model"}, "run_id": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Run Id", "type": "string"}, "generated_at": {"format": "date-time", "title": "Generated At", "type": "string"}}, "required": ["strategy", "prompt_version", "prompt_sha", "prompt_text", "run_id", "generated_at"], "title": "QuestionsProvenance", "type": "object"}, "QuestionsRequest": {"properties": {"topic": {"maxLength": 300, "minLength": 2, "title": "Topic", "type": "string"}, "count": {"default": 30, "description": "How many questions to ask for. Charged for those that come back.", "maximum": 50, "minimum": 5, "title": "Count", "type": "integer"}, "project": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project to file this under (pr_\u2026).", "title": "Project"}}, "required": ["topic"], "title": "QuestionsRequest", "type": "object"}, "AnalysisList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/AnalysisSummary"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["items"], "title": "AnalysisList", "type": "object"}, "AnalysisSummary": {"properties": {"id": {"pattern": "^(?:fa|ca)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "kind": {"title": "Kind", "type": "string"}, "status": {"title": "Status", "type": "string"}, "subject": {"title": "Subject", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "run_count": {"title": "Run Count", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}}, "required": ["id", "kind", "status", "subject", "run_count", "created_at"], "title": "AnalysisSummary", "type": "object"}, "FanoutEstimate": {"description": "What a fanout would run, and what that is estimated to cost at the\nprices in effect now. For showing before starting; asking for one starts\nnothing. It is not a quote and authorizes nothing: what a fanout may start\nis decided when it is created, by the credit the workspace then has.", "properties": {"prompts": {"title": "Prompts", "type": "integer"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}, "runs": {"title": "Runs", "type": "integer"}, "executions": {"description": "prompts \u00d7 engines \u00d7 runs: one prompt run each.", "title": "Executions", "type": "integer"}, "max_executions": {"description": "The most one fanout may run on this server.", "title": "Max Executions", "type": "integer"}, "identical_prompts": {"description": "Prompts whose text repeats an earlier one. They are run all the same.", "title": "Identical Prompts", "type": "integer"}, "lines": {"items": {"$ref": "#/components/schemas/FanoutEstimateLine"}, "title": "Lines", "type": "array"}, "total_usd": {"description": "The estimated cost: every prompt run at its engine's current price. A run that fails is not charged.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Usd", "type": "string"}, "pricing_version": {"title": "Pricing Version", "type": "string"}, "billing_enabled": {"title": "Billing Enabled", "type": "boolean"}, "available_usd": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "description": "Credit the workspace can use now. Null while billing is off.", "title": "Available Usd"}, "sufficient": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Whether that covers the total. Null while billing is off.", "title": "Sufficient"}}, "required": ["prompts", "engines", "runs", "executions", "max_executions", "identical_prompts", "lines", "total_usd", "pricing_version", "billing_enabled"], "title": "FanoutEstimate", "type": "object"}, "FanoutEstimateLine": {"properties": {"engine": {"title": "Engine", "type": "string"}, "executions": {"title": "Executions", "type": "integer"}, "unit_price_usd": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unit Price Usd", "type": "string"}, "amount_usd": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount Usd", "type": "string"}}, "required": ["engine", "executions", "unit_price_usd", "amount_usd"], "title": "FanoutEstimateLine", "type": "object"}, "FanoutPromptInput": {"properties": {"text": {"maxLength": 4000, "minLength": 1, "title": "Text", "type": "string"}, "source": {"anyOf": [{"$ref": "#/components/schemas/FanoutPromptSource"}, {"type": "null"}]}}, "required": ["text"], "title": "FanoutPromptInput", "type": "object"}, "FanoutPromptSource": {"description": "Where a prompt came from, when it came from another Dromad object.", "properties": {"kind": {"const": "question", "default": "question", "title": "Kind", "type": "string"}, "analysis_id": {"pattern": "^(?:fa|ca)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Analysis Id", "type": "string"}, "question_id": {"title": "Question Id", "type": "string"}}, "required": ["analysis_id", "question_id"], "title": "FanoutPromptSource", "type": "object"}, "FanoutRequest": {"properties": {"name": {"anyOf": [{"maxLength": 200, "type": "string"}, {"type": "null"}], "description": "Defaults to the first prompt.", "title": "Name"}, "prompts": {"description": "Kept exactly as given, in this order. A prompt given twice is run twice.", "items": {"$ref": "#/components/schemas/FanoutPromptInput"}, "maxItems": 50, "minItems": 1, "title": "Prompts", "type": "array"}, "engines": {"items": {"type": "string"}, "minItems": 1, "title": "Engines", "type": "array"}, "runs": {"default": 1, "description": "Independent executions of each prompt on each engine.", "maximum": 5, "minimum": 1, "title": "Runs", "type": "integer"}, "project": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project to file this under (pr_\u2026).", "title": "Project"}}, "required": ["prompts"], "title": "FanoutRequest", "type": "object"}, "Fanout": {"properties": {"id": {"pattern": "^(?:fo)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "status": {"description": "Derived from the runs: queued, running, completed, partial or failed.", "title": "Status", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}, "runs": {"title": "Runs", "type": "integer"}, "prompt_count": {"title": "Prompt Count", "type": "integer"}, "execution_count": {"title": "Execution Count", "type": "integer"}, "counts": {"additionalProperties": {"type": "integer"}, "description": "Executions by run status.", "title": "Counts", "type": "object"}, "query_count": {"description": "Queries observed so far. Nothing is deduplicated.", "title": "Query Count", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "When the last run finished, once all have.", "title": "Completed At"}, "held_usd": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "description": "Null while billing is off.", "title": "Held Usd"}, "charged_usd": {"anyOf": [{"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "type": "string"}, {"type": "null"}], "title": "Charged Usd"}, "prompts": {"items": {"$ref": "#/components/schemas/FanoutPromptObservations"}, "title": "Prompts", "type": "array"}}, "required": ["id", "name", "status", "engines", "runs", "prompt_count", "execution_count", "counts", "query_count", "created_at", "prompts"], "title": "Fanout", "type": "object"}, "FanoutEngineObservations": {"properties": {"engine": {"title": "Engine", "type": "string"}, "query_count": {"description": "Queries observed across this engine's completed runs. Nothing is deduplicated.", "title": "Query Count", "type": "integer"}, "runs": {"items": {"$ref": "#/components/schemas/FanoutRunObservation"}, "title": "Runs", "type": "array"}}, "required": ["engine", "query_count", "runs"], "title": "FanoutEngineObservations", "type": "object"}, "FanoutPromptObservations": {"properties": {"position": {"description": "1-based. How a prompt is addressed within its fanout.", "title": "Position", "type": "integer"}, "text": {"title": "Text", "type": "string"}, "source": {"anyOf": [{"$ref": "#/components/schemas/FanoutPromptSource"}, {"type": "null"}]}, "engines": {"items": {"$ref": "#/components/schemas/FanoutEngineObservations"}, "title": "Engines", "type": "array"}}, "required": ["position", "text", "engines"], "title": "FanoutPromptObservations", "type": "object"}, "FanoutRunObservation": {"description": "One execution: what this engine searched this time.", "properties": {"run_id": {"pattern": "^(?:dr)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Run Id", "type": "string"}, "run_index": {"description": "1-based: which repeat of this prompt on this engine.", "title": "Run Index", "type": "integer"}, "status": {"title": "Status", "type": "string"}, "model": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The model the provider reported using.", "title": "Model"}, "searched": {"anyOf": [{"type": "boolean"}, {"type": "null"}], "description": "Whether the engine searched. Null if not recorded, or not done.", "title": "Searched"}, "search_calls": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Searches it ran. More than the queries' calls if one showed no query text.", "title": "Search Calls"}, "queries": {"default": [], "items": {"$ref": "#/components/schemas/ObservedQuery"}, "title": "Queries", "type": "array"}, "error": {"anyOf": [{"$ref": "#/components/schemas/RunError"}, {"type": "null"}]}, "charge": {"anyOf": [{"$ref": "#/components/schemas/RunCharge"}, {"type": "null"}]}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "started_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Started At"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Completed At"}}, "required": ["run_id", "run_index", "status", "created_at"], "title": "FanoutRunObservation", "type": "object"}, "ObservedQuery": {"properties": {"text": {"title": "Text", "type": "string"}, "position": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "1-based place in the run's envelope. Null if not recorded.", "title": "Position"}, "search_call": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "1-based search call it was part of. Null if not recorded.", "title": "Search Call"}, "provider_search_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Provider Search Id"}}, "required": ["text"], "title": "ObservedQuery", "type": "object"}, "FanoutList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/FanoutSummary"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["items"], "title": "FanoutList", "type": "object"}, "FanoutSummary": {"properties": {"id": {"pattern": "^(?:fo)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "status": {"description": "Derived from the runs: queued, running, completed, partial or failed.", "title": "Status", "type": "string"}, "project_id": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Project Id"}, "created_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Created By"}, "engines": {"items": {"type": "string"}, "title": "Engines", "type": "array"}, "runs": {"title": "Runs", "type": "integer"}, "prompt_count": {"title": "Prompt Count", "type": "integer"}, "execution_count": {"title": "Execution Count", "type": "integer"}, "counts": {"additionalProperties": {"type": "integer"}, "description": "Executions by run status.", "title": "Counts", "type": "object"}, "query_count": {"description": "Queries observed so far. Nothing is deduplicated.", "title": "Query Count", "type": "integer"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "completed_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "When the last run finished, once all have.", "title": "Completed At"}}, "required": ["id", "name", "status", "engines", "runs", "prompt_count", "execution_count", "counts", "query_count", "created_at"], "title": "FanoutSummary", "type": "object"}, "AuditRequest": {"properties": {"url": {"maxLength": 2000, "minLength": 4, "title": "Url", "type": "string"}, "project": {"anyOf": [{"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "The project to file this under (pr_\u2026).", "title": "Project"}}, "required": ["url"], "title": "AuditRequest", "type": "object"}, "ShareState": {"properties": {"id": {"pattern": "^(?:sh)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "url": {"description": "The public page. Anyone with it can read the object.", "title": "Url", "type": "string"}, "target_id": {"title": "Target Id", "type": "string"}, "target_kind": {"description": "run or analysis", "title": "Target Kind", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "revoked_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Revoked At"}, "rotated_from": {"anyOf": [{"pattern": "^(?:sh)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "title": "Rotated From"}}, "required": ["id", "url", "target_id", "target_kind", "created_at"], "title": "ShareState", "type": "object"}, "ShareStatus": {"properties": {"shared": {"title": "Shared", "type": "boolean"}, "share": {"anyOf": [{"$ref": "#/components/schemas/ShareState"}, {"type": "null"}]}}, "required": ["shared"], "title": "ShareStatus", "type": "object"}, "PriceRow": {"properties": {"product": {"description": "prompt, questions, audit or citations.", "title": "Product", "type": "string"}, "engine": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Set where the price depends on the engine.", "title": "Engine"}, "unit": {"description": "What one unit is: prompt, question, url or analysis.", "title": "Unit", "type": "string"}, "unit_price_usd": {"description": "Per unit. 0 means included.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Unit Price Usd", "type": "string"}}, "required": ["product", "unit", "unit_price_usd"], "title": "PriceRow", "type": "object"}, "RateCard": {"description": "The prices in effect. A prompt on several engines costs the sum of its\nengines' prices; there is no separate price for running all of them.", "properties": {"version": {"title": "Version", "type": "string"}, "effective_from": {"format": "date-time", "title": "Effective From", "type": "string"}, "currency": {"default": "usd", "title": "Currency", "type": "string"}, "prices": {"items": {"$ref": "#/components/schemas/PriceRow"}, "title": "Prices", "type": "array"}}, "required": ["version", "effective_from", "prices"], "title": "RateCard", "type": "object"}, "BillingSummary": {"properties": {"workspace_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Whose credit this is.", "title": "Workspace Id"}, "enabled": {"description": "False while this server charges for nothing.", "title": "Enabled", "type": "boolean"}, "balance_usd": {"description": "Purchased plus promotional credit.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Balance Usd", "type": "string"}, "purchased_usd": {"description": "Bought. Does not expire.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Purchased Usd", "type": "string"}, "promotional_usd": {"description": "Given by Dromad. Spent first.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Promotional Usd", "type": "string"}, "held_usd": {"description": "Set aside for work queued or running.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Held Usd", "type": "string"}, "available_usd": {"description": "Balance less what is held: what new work can use.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Available Usd", "type": "string"}, "spend_month_to_date_usd": {"description": "Charged since the 1st, UTC.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Spend Month To Date Usd", "type": "string"}, "add_credit_url": {"title": "Add Credit Url", "type": "string"}}, "required": ["enabled", "balance_usd", "purchased_usd", "promotional_usd", "held_usd", "available_usd", "spend_month_to_date_usd", "add_credit_url"], "title": "BillingSummary", "type": "object"}, "Transaction": {"description": "One change to the balance. Holds are not transactions: only money that\nmoved is.", "properties": {"id": {"pattern": "^(?:le)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "kind": {"description": "promo_grant, purchase, usage, reversal or adjustment.", "title": "Kind", "type": "string"}, "bucket": {"description": "promo or purchased.", "title": "Bucket", "type": "string"}, "amount_usd": {"description": "Signed: above zero adds credit.", "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Amount Usd", "type": "string"}, "description": {"title": "Description", "type": "string"}, "operation_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "For usage: the batch, analysis or run that was charged.", "title": "Operation Id"}, "run_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Run Id"}, "actor": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who spent or bought it, by email. Null for credit Dromad gave.", "title": "Actor"}, "api_key_id": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The API key the charged work was started with, if any.", "title": "Api Key Id"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["id", "kind", "bucket", "amount_usd", "description", "created_at"], "title": "Transaction", "type": "object"}, "TransactionList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/Transaction"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["items"], "title": "TransactionList", "type": "object"}, "UsageReport": {"properties": {"days": {"title": "Days", "type": "integer"}, "total_usd": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Total Usd", "type": "string"}, "rows": {"items": {"$ref": "#/components/schemas/UsageRow"}, "title": "Rows", "type": "array"}}, "required": ["days", "total_usd", "rows"], "title": "UsageReport", "type": "object"}, "UsageRow": {"properties": {"day": {"format": "date", "title": "Day", "type": "string"}, "product": {"title": "Product", "type": "string"}, "engine": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Engine"}, "unit": {"title": "Unit", "type": "string"}, "operations": {"description": "Runs that were charged.", "title": "Operations", "type": "integer"}, "units": {"title": "Units", "type": "integer"}, "charged_usd": {"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Charged Usd", "type": "string"}}, "required": ["day", "product", "unit", "operations", "units", "charged_usd"], "title": "UsageRow", "type": "object"}, "WorkspaceList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/Workspace"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "WorkspaceList", "type": "object"}, "WorkspaceCreateRequest": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}}, "required": ["name"], "title": "WorkspaceCreateRequest", "type": "object"}, "WorkspaceUpdateRequest": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}}, "required": ["name"], "title": "WorkspaceUpdateRequest", "type": "object"}, "Member": {"properties": {"id": {"title": "Id", "type": "integer"}, "email": {"title": "Email", "type": "string"}, "name": {"default": "", "title": "Name", "type": "string"}, "role": {"title": "Role", "type": "string"}, "joined_at": {"format": "date-time", "title": "Joined At", "type": "string"}}, "required": ["id", "email", "role", "joined_at"], "title": "Member", "type": "object"}, "MemberList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/Member"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "MemberList", "type": "object"}, "MemberUpdateRequest": {"properties": {"role": {"description": "admin or member.", "title": "Role", "type": "string"}}, "required": ["role"], "title": "MemberUpdateRequest", "type": "object"}, "Invitation": {"properties": {"id": {"pattern": "^(?:iv)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "email": {"description": "Who the admin meant. The link, not the address, is what admits.", "title": "Email", "type": "string"}, "role": {"title": "Role", "type": "string"}, "status": {"description": "pending, accepted, revoked or expired.", "title": "Status", "type": "string"}, "invited_by": {"title": "Invited By", "type": "string"}, "accepted_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who took it, which may not be the address it was sent to.", "title": "Accepted By"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "expires_at": {"format": "date-time", "title": "Expires At", "type": "string"}}, "required": ["id", "email", "role", "status", "invited_by", "created_at", "expires_at"], "title": "Invitation", "type": "object"}, "InvitationList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/Invitation"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "InvitationList", "type": "object"}, "InvitationCreated": {"description": "Returned once. ``url`` is the only copy of the link: Dromad keeps a hash.", "properties": {"id": {"pattern": "^(?:iv)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "email": {"description": "Who the admin meant. The link, not the address, is what admits.", "title": "Email", "type": "string"}, "role": {"title": "Role", "type": "string"}, "status": {"description": "pending, accepted, revoked or expired.", "title": "Status", "type": "string"}, "invited_by": {"title": "Invited By", "type": "string"}, "accepted_by": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Who took it, which may not be the address it was sent to.", "title": "Accepted By"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "expires_at": {"format": "date-time", "title": "Expires At", "type": "string"}, "url": {"title": "Url", "type": "string"}, "emailed": {"description": "Whether Dromad sent it. If not, send the link yourself.", "title": "Emailed", "type": "boolean"}}, "required": ["id", "email", "role", "status", "invited_by", "created_at", "expires_at", "url", "emailed"], "title": "InvitationCreated", "type": "object"}, "InvitationCreateRequest": {"properties": {"email": {"maxLength": 254, "minLength": 3, "title": "Email", "type": "string"}, "role": {"default": "member", "description": "admin or member.", "title": "Role", "type": "string"}}, "required": ["email"], "title": "InvitationCreateRequest", "type": "object"}, "Project": {"description": "What a workspace is working on. Every member of the workspace sees it\nand everything filed under it; it never moves to another workspace.", "properties": {"id": {"pattern": "^(?:pr)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Id", "type": "string"}, "name": {"title": "Name", "type": "string"}, "slug": {"title": "Slug", "type": "string"}, "workspace_id": {"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "title": "Workspace Id", "type": "string"}, "workspace_name": {"title": "Workspace Name", "type": "string"}, "context": {"allOf": [{"$ref": "#/components/schemas/ProjectContext"}]}, "created_by": {"title": "Created By", "type": "string"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["id", "name", "slug", "workspace_id", "workspace_name", "created_by", "created_at"], "title": "Project", "type": "object"}, "ProjectContext": {"description": "What a project's work is about. Recorded, and shown wherever the project\nis; it changes what a command does only where that command says so.", "properties": {"primary_domain": {"anyOf": [{"maxLength": 253, "type": "string"}, {"type": "null"}], "title": "Primary Domain"}, "domains": {"items": {"type": "string"}, "maxItems": 20, "title": "Domains", "type": "array"}, "brands": {"items": {"type": "string"}, "maxItems": 20, "title": "Brands", "type": "array"}, "competitors": {"items": {"type": "string"}, "maxItems": 20, "title": "Competitors", "type": "array"}}, "title": "ProjectContext", "type": "object"}, "ProjectList": {"properties": {"items": {"items": {"$ref": "#/components/schemas/Project"}, "title": "Items", "type": "array"}}, "required": ["items"], "title": "ProjectList", "type": "object"}, "ProjectCreateRequest": {"properties": {"name": {"maxLength": 100, "minLength": 1, "title": "Name", "type": "string"}, "workspace_id": {"anyOf": [{"pattern": "^(?:ws)_[0-9A-HJKMNP-TV-Z]{26}$", "type": "string"}, {"type": "null"}], "description": "Where to make it. Your own workspace (or the key's) if omitted.", "title": "Workspace Id"}, "context": {"anyOf": [{"$ref": "#/components/schemas/ProjectContext"}, {"type": "null"}]}}, "required": ["name"], "title": "ProjectCreateRequest", "type": "object"}, "ProjectUpdateRequest": {"properties": {"name": {"anyOf": [{"maxLength": 100, "minLength": 1, "type": "string"}, {"type": "null"}], "title": "Name"}, "context": {"anyOf": [{"$ref": "#/components/schemas/ProjectContext"}, {"type": "null"}], "description": "Replaces the project's context whole."}}, "title": "ProjectUpdateRequest", "type": "object"}}, "securitySchemes": {"BearerAuth": {"type": "http", "scheme": "bearer"}}}, "servers": []}