@@ -91,12 +91,14 @@ POST /v1/provider-credentials/test # not yet wrapped
9191PATCH /v1/provider-credentials/{instance} # not yet wrapped
9292DELETE /v1/provider-credentials/{instance} # not yet wrapped
9393POST /v1/provider-credentials/{instance}/test # not yet wrapped
94- # Providers catalogue
94+ # Providers catalog
9595GET /v1/providers # not yet wrapped
9696GET /v1/providers/catalog # not yet wrapped
9797# Runtime settings
9898GET /v1/settings # not yet wrapped
9999PATCH /v1/settings # not yet wrapped
100+ GET /v1/settings/mail # not yet wrapped
101+ POST /v1/settings/mail/test # not yet wrapped
100102# Model discovery / metadata
101103GET /v1/models/discoverable # not yet wrapped
102104GET /v1/models/metadata # not yet wrapped
@@ -108,22 +110,46 @@ GET /v1/budgets/{budget_id}/reset-logs # not yet wrapped
108110# --- Second wave of gateway endpoints (added after the initial manifest) ---
109111# Dashboard session auth: browser cookie flow for the admin UI, not an SDK surface.
110112POST /v1/auth/session # dashboard-only
113+ # Deployment bootstrap: tells the dashboard shell which deployment served it, so
114+ # it exists for a browser deciding what to render. An SDK already knows.
115+ GET /v1/bootstrap # dashboard-only
111116DELETE /v1/auth/session # dashboard-only
117+ # Setting the dashboard sign-in password: the other half of the same browser
118+ # flow. An SDK authenticates with the master key or an API key and never holds
119+ # a password, so there is nothing here for one to wrap.
120+ PUT /v1/auth/password # dashboard-only
121+ # Signup, email verification, and password reset (otari#650): claiming a
122+ # roster identity's dashboard login and recovering it, the same browser-only
123+ # credential flow PUT /v1/auth/password is. No SDK caller holds a password.
124+ POST /v1/auth/signup # dashboard-only
125+ POST /v1/auth/verify-email # dashboard-only
126+ POST /v1/auth/resend-verification # dashboard-only
127+ POST /v1/auth/password/reset # dashboard-only
128+ POST /v1/auth/password/reset/confirm # dashboard-only
112129# OTLP ingest: OpenTelemetry collector receivers, not an SDK surface.
113130POST /v1/logs # otel ingest
114131POST /v1/traces # otel ingest
132+ POST /v1/metrics # otel ingest
115133# Usage analytics and maintenance
116134GET /v1/usage/summary # not yet wrapped
117135GET /v1/usage/summary.csv # not yet wrapped
118136GET /v1/usage/series # not yet wrapped
119137DELETE /v1/usage # not yet wrapped
120138POST /v1/usage/external-events # not yet wrapped
121139POST /v1/usage/set-price # not yet wrapped
140+ GET /v1/usage/in-flight # dashboard-only, per-worker live view
141+ # Agent telemetry read and purge
142+ GET /v1/agent-telemetry/summary # not yet wrapped
143+ GET /v1/agent-telemetry/count # not yet wrapped
144+ GET /v1/agent-telemetry/series # not yet wrapped
145+ DELETE /v1/agent-telemetry # not yet wrapped
122146# Routing policies
123147GET /v1/routing/policies # not yet wrapped
124148POST /v1/routing/policies # not yet wrapped
125149DELETE /v1/routing/policies/{name} # not yet wrapped
126150POST /v1/routing/policies/explain # not yet wrapped
151+ POST /v1/routing/preferences/rank # not yet wrapped
152+ GET /v1/routing/status # not yet wrapped
127153# Pricing refresh workflow
128154POST /v1/pricing/refresh # not yet wrapped
129155POST /v1/pricing/refresh/confirm # not yet wrapped
@@ -139,5 +165,86 @@ PATCH /v1/tool-settings # not yet wrapped
139165POST /v1/tool-settings/{service}/test # not yet wrapped
140166POST /v1/search # not yet wrapped
141167POST /v1/search/{search_tool_name} # not yet wrapped
168+ # Search tools (runtime search-tool management)
169+ GET /v1/search-tools # not yet wrapped
170+ GET /v1/search-tools/providers # not yet wrapped
171+ POST /v1/search-tools # not yet wrapped
172+ PATCH /v1/search-tools/{name} # not yet wrapped
173+ DELETE /v1/search-tools/{name} # not yet wrapped
174+ POST /v1/search-tools/reencrypt # not yet wrapped
142175# Settings
143176POST /v1/settings/master-key/rotate # not yet wrapped
177+ # Tenancy-scoped budgets: an operator surface with no dashboard page yet either,
178+ # so it is unwrapped rather than dashboard-only. The per-user /v1/budgets family
179+ # is [covered]; move these across with it when an SDK grows an admin client.
180+ GET /v1/scoped-budgets # not yet wrapped
181+ POST /v1/scoped-budgets # not yet wrapped
182+ GET /v1/scoped-budgets/{budget_id} # not yet wrapped
183+ PATCH /v1/scoped-budgets/{budget_id} # not yet wrapped
184+ DELETE /v1/scoped-budgets/{budget_id} # not yet wrapped
185+ # Tenancy: organizations, workspaces, and their memberships. The dashboard's
186+ # tenancy pages are the consumer; an SDK caller acts inside one workspace with a
187+ # key that already names it, so none of these is an SDK surface yet. Move to
188+ # [covered] if a shell grows an admin client.
189+ GET /v1/organizations/me # dashboard-only
190+ PATCH /v1/organizations/me # dashboard-only
191+ GET /v1/organizations/me/members # dashboard-only
192+ POST /v1/organizations/me/members # dashboard-only
193+ PATCH /v1/organizations/me/members/{organization_member_id} # dashboard-only
194+ DELETE /v1/organizations/me/members/{organization_member_id} # dashboard-only
195+ POST /v1/workspaces # dashboard-only
196+ GET /v1/workspaces # dashboard-only
197+ GET /v1/workspaces/{workspace_id} # dashboard-only
198+ PATCH /v1/workspaces/{workspace_id} # dashboard-only
199+ DELETE /v1/workspaces/{workspace_id} # dashboard-only
200+ GET /v1/workspaces/{workspace_id}/members # dashboard-only
201+ POST /v1/workspaces/{workspace_id}/members/{user_id} # dashboard-only
202+ PATCH /v1/workspaces/{workspace_id}/members/{user_id} # dashboard-only
203+ DELETE /v1/workspaces/{workspace_id}/members/{user_id} # dashboard-only
204+ GET /v1/organizations/me/pricing # dashboard-only
205+ POST /v1/organizations/me/pricing # dashboard-only
206+ PUT /v1/organizations/me/pricing/{pricing_id} # dashboard-only
207+ DELETE /v1/organizations/me/pricing/{pricing_id} # dashboard-only
208+ POST /v1/organizations/me/member-invitations # dashboard-only
209+ DELETE /v1/organizations/me/member-invitations/{invitation_id} # dashboard-only
210+ # The invitation accept flow is reached by a browser following an emailed
211+ # link, not by an SDK caller acting as a key-holder inside a workspace.
212+ POST /v1/invitations/validate # accept-flow, not an SDK surface
213+ POST /v1/invitations/accept # accept-flow, not an SDK surface
214+ GET /v1/workspaces/{workspace_id}/member-budget-policies # dashboard-only
215+ POST /v1/workspaces/{workspace_id}/member-budget-policies # dashboard-only
216+ PATCH /v1/workspaces/{workspace_id}/member-budget-policies/{default_id} # dashboard-only
217+ DELETE /v1/workspaces/{workspace_id}/member-budget-policies/{default_id} # dashboard-only
218+ # The dashboard's first-request setup guide (otari#660). It exists to walk a
219+ # browser from an empty workspace to a working call, and the credential it
220+ # issues is the thing an SDK caller already holds, so there is nothing here for
221+ # a shell to wrap.
222+ GET /v1/workspaces/{workspace_id}/activation # dashboard-only
223+ POST /v1/workspaces/{workspace_id}/activation/key # dashboard-only
224+ POST /v1/workspaces/{workspace_id}/activation/dismiss # dashboard-only
225+ # Organization-scoped provider keys (otari-ai#1748, otari#643): the same
226+ # tenancy-admin surface as the organization/workspace rows just above, and
227+ # excluded for the same reason. An SDK caller acts inside one workspace with a
228+ # key that already carries its resolved credentials; managing which
229+ # organization-scoped BYO key a workspace defaults to is a dashboard concern.
230+ GET /v1/organizations/me/provider-keys # dashboard-only
231+ POST /v1/organizations/me/provider-keys # dashboard-only
232+ PATCH /v1/organizations/me/provider-keys/{key_id} # dashboard-only
233+ DELETE /v1/organizations/me/provider-keys/{key_id} # dashboard-only
234+ POST /v1/organizations/me/provider-keys/{key_id}/archive # dashboard-only
235+ POST /v1/organizations/me/provider-keys/{key_id}/restore # dashboard-only
236+ POST /v1/organizations/me/provider-keys/{key_id}/default # dashboard-only
237+ GET /v1/workspaces/{workspace_id}/provider-keys # dashboard-only
238+ PATCH /v1/workspaces/{workspace_id}/provider-keys/{key_id} # dashboard-only
239+ DELETE /v1/workspaces/{workspace_id}/provider-keys/{key_id} # dashboard-only
240+ GET /v1/workspaces/{workspace_id}/provider-keys/{key_id}/models # dashboard-only
241+ POST /v1/workspaces/{workspace_id}/provider-keys/{key_id}/models # dashboard-only
242+ DELETE /v1/workspaces/{workspace_id}/provider-keys/{key_id}/models/{model} # dashboard-only
243+ # Workspace-scoped MCP servers (otari#658): a master-key operator surface for
244+ # registering the endpoints a workspace's requests may reach, alongside the
245+ # tenancy admin rows above. An SDK caller does not manage these; it names them
246+ # by id in `mcp_server_ids` on a completion request, which is already covered.
247+ GET /v1/workspaces/{workspace_id}/mcp-servers # operator surface
248+ POST /v1/workspaces/{workspace_id}/mcp-servers # operator surface
249+ PATCH /v1/workspaces/{workspace_id}/mcp-servers/{server_id} # operator surface
250+ DELETE /v1/workspaces/{workspace_id}/mcp-servers/{server_id} # operator surface
0 commit comments