@ellipsis-dev/sdk 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,7 +29,6 @@
29
29
  "$ref": "#/components/schemas/AgentConfigEllipsis",
30
30
  "default": {
31
31
  "enabled": true,
32
- "ide": true,
33
32
  "interactive": true,
34
33
  "metadata": {
35
34
  "annotations": {},
@@ -44,12 +43,6 @@
44
43
  "compute": {},
45
44
  "hooks": {},
46
45
  "image": {},
47
- "ports": [
48
- 3000,
49
- 5173,
50
- 8000,
51
- 8080
52
- ],
53
46
  "repositories": [],
54
47
  "variables": []
55
48
  }
@@ -277,7 +270,7 @@
277
270
  "description": "The `codex:` block \u2014 run this agent on OpenAI's Codex CLI instead of\nClaude Code. Declaring the block at all is what selects the harness\n(`AgentConfig.harness`).\n\nDeliberately a small subset of `AgentConfigClaude`: the fields omitted here\nare ones Codex has no equivalent for (`effort`, `fallback_model`,\n`settings`) or that the platform does not yet wire through for this harness\n(`max_turns`, `skills`, MCP servers). They are omitted rather than\naccepted-and-ignored, because `StrictConfigModel` forbids extra keys \u2014 so a\nconfig that sets one fails loudly at parse time instead of silently not doing\nit. The budget still bounds a run regardless.",
278
271
  "properties": {
279
272
  "model": {
280
- "default": "bedrock-gpt-5.6-terra",
273
+ "default": "gpt-5.6-terra",
281
274
  "title": "Model",
282
275
  "type": "string"
283
276
  },
@@ -425,7 +418,7 @@
425
418
  },
426
419
  "AgentConfigEllipsis": {
427
420
  "additionalProperties": false,
428
- "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, whether the agent is `enabled`, and the two\nhuman-access flags (`interactive`/`ide`). The presence of a top-level\n`ellipsis:` mapping is what marks a YAML file as an Ellipsis agent config (vs\narbitrary YAML that merely lives under a config directory) \u2014 see\n`yaml_is_ellipsis_config`.\n\n`enabled`/`interactive`/`ide` are agent behavior, not freeform metadata, so\nthey stay inside the config `sha` (only `metadata` is sha-excluded).\n`interactive` and `ide` are sibling human-access flags: `interactive` lets a\nhuman `agent session connect` to a live session (CLI relay); `ide` lets a\nhuman open an editor / a port URL into the sandbox. Neither decides whether a\nsession is ephemeral or durable \u2014 that is the trigger's job.",
421
+ "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, whether the agent is `enabled`, and the\nhuman-access flag `interactive`. The presence of a top-level `ellipsis:`\nmapping is what marks a YAML file as an Ellipsis agent config (vs arbitrary\nYAML that merely lives under a config directory) \u2014 see\n`yaml_is_ellipsis_config`.\n\n`enabled`/`interactive` are agent behavior, not freeform metadata, so they\nstay inside the config `sha` (only `metadata` is sha-excluded).\n`interactive` lets a human `agent session connect` to a live session (CLI\nrelay). It does not decide whether a session is ephemeral or durable \u2014 that\nis the trigger's job.",
429
422
  "properties": {
430
423
  "description": {
431
424
  "anyOf": [
@@ -443,11 +436,6 @@
443
436
  "title": "Enabled",
444
437
  "type": "boolean"
445
438
  },
446
- "ide": {
447
- "default": true,
448
- "title": "Ide",
449
- "type": "boolean"
450
- },
451
439
  "interactive": {
452
440
  "default": true,
453
441
  "title": "Interactive",
@@ -527,19 +515,6 @@
527
515
  "$ref": "#/components/schemas/AgentConfigEnvironmentImage",
528
516
  "default": {}
529
517
  },
530
- "ports": {
531
- "default": [
532
- 3000,
533
- 5173,
534
- 8000,
535
- 8080
536
- ],
537
- "items": {
538
- "type": "integer"
539
- },
540
- "title": "Ports",
541
- "type": "array"
542
- },
543
518
  "repositories": {
544
519
  "default": [],
545
520
  "items": {
@@ -622,7 +597,7 @@
622
597
  },
623
598
  "AgentConfigEnvironmentVariable": {
624
599
  "additionalProperties": false,
625
- "description": "One environment variable injected into the agent's sandbox.\n\n`value`, when set, is a literal injected as-is \u2014 use it for non-secret\nconfig (LOG_LEVEL, an API base URL). When `value` is omitted the value is\nresolved at run time from the account's sandbox-secrets store (dashboard\n/ `PUT /secrets`) by `name`, so a secret can be injected without\never putting it in the config file. Either way the variable only reaches\nagents that name it.",
600
+ "description": "One environment variable injected into the agent's sandbox.\n\n`value`, when set, is a literal injected as-is \u2014 use it for non-secret\nconfig (LOG_LEVEL, an API base URL). When `value` is omitted the value is\nresolved at run time from the account's sandbox-secrets store (dashboard\n/ `PUT /v1/secrets`) by `name`, so a secret can be injected without\never putting it in the config file. Either way the variable only reaches\nagents that name it.",
626
601
  "properties": {
627
602
  "name": {
628
603
  "title": "Name",
@@ -688,7 +663,7 @@
688
663
  },
689
664
  "AgentConfigInput": {
690
665
  "additionalProperties": false,
691
- "description": "The typed input contract: what goes INTO a session (the trigger is\nwhen it happens; this is what goes in).\n\n`json_schema` types the payload a caller-started session takes\n(`POST /sessions` `input`, validated at the door; required when\ndeclared). It is illegal on a react-triggered agent \u2014 react payloads are\nplatform-shaped (the published surface field sets), not caller-shaped.\n\n`message` is the initial-message template: exact `{{path}}` substitution\nover the caller payload (or, on a react agent, over the surface's\npublished fields), no conditionals/loops/filters. Refs are validated at\ndeploy time against the governing field set (see AgentConfig's\n`_check_input`).",
666
+ "description": "The typed input contract: what goes INTO a session (the trigger is\nwhen it happens; this is what goes in).\n\n`json_schema` types the payload a caller-started session takes\n(`POST /v1/sessions` `input`, validated at the door; required when\ndeclared). It is illegal on a react-triggered agent \u2014 react payloads are\nplatform-shaped (the published surface field sets), not caller-shaped.\n\n`message` is the initial-message template: exact `{{path}}` substitution\nover the caller payload (or, on a react agent, over the surface's\npublished fields), no conditionals/loops/filters. Refs are validated at\ndeploy time against the governing field set (see AgentConfig's\n`_check_input`).",
692
667
  "properties": {
693
668
  "json_schema": {
694
669
  "anyOf": [
@@ -839,7 +814,7 @@
839
814
  },
840
815
  "AgentConfigOutput": {
841
816
  "additionalProperties": false,
842
- "description": "The typed output contract: the JSON Schema the agent must exit through\n(the StructuredOutput exit tool). Read back via\nGET /sessions/{id}/output.",
817
+ "description": "The typed output contract: the JSON Schema the agent must exit through\n(the StructuredOutput exit tool). Read back via\nGET /v1/sessions/{id}/output.",
843
818
  "properties": {
844
819
  "json_schema": {
845
820
  "additionalProperties": true,
@@ -1083,6 +1058,16 @@
1083
1058
  "file": {
1084
1059
  "title": "File",
1085
1060
  "type": "string"
1061
+ },
1062
+ "repository": {
1063
+ "anyOf": [
1064
+ {
1065
+ "$ref": "#/components/schemas/AgentConfigRepository"
1066
+ },
1067
+ {
1068
+ "type": "null"
1069
+ }
1070
+ ]
1086
1071
  }
1087
1072
  },
1088
1073
  "required": [
@@ -1849,7 +1834,7 @@
1849
1834
  "description": "A device-flow poll from the CLI.",
1850
1835
  "properties": {
1851
1836
  "device_code": {
1852
- "description": "The device code returned by POST /auth/cli/start.",
1837
+ "description": "The device code returned by POST /v1/auth/cli/start.",
1853
1838
  "title": "Device Code",
1854
1839
  "type": "string"
1855
1840
  }
@@ -1974,6 +1959,10 @@
1974
1959
  "description": "The last commit the config was synced from.",
1975
1960
  "title": "Last Synced Commit Sha"
1976
1961
  },
1962
+ "managed_by": {
1963
+ "$ref": "#/components/schemas/ConfigManagedBy",
1964
+ "description": "Which writer owns this agent. \"github\" agents are defined by a file in a repository and are changed by editing that file; \"api\" agents have no file and are changed through this API."
1965
+ },
1977
1966
  "name": {
1978
1967
  "anyOf": [
1979
1968
  {
@@ -2015,11 +2004,21 @@
2015
2004
  "sha",
2016
2005
  "created_at",
2017
2006
  "updated_at",
2007
+ "managed_by",
2018
2008
  "agent_config"
2019
2009
  ],
2020
2010
  "title": "Config",
2021
2011
  "type": "object"
2022
2012
  },
2013
+ "ConfigManagedBy": {
2014
+ "description": "Which writer owns an agent: the repository file it is defined in, or\nthis API. Every agent has exactly one owner, fixed when it is created and\nchanged only by linking or unlinking it.",
2015
+ "enum": [
2016
+ "github",
2017
+ "api"
2018
+ ],
2019
+ "title": "ConfigManagedBy",
2020
+ "type": "string"
2021
+ },
2023
2022
  "ContributorUsage": {
2024
2023
  "description": "An author who merged a pull request in the window. The pull-request and\nline counts cover their merged pull requests; `reviews` counts reviews this\nperson also submitted.",
2025
2024
  "properties": {
@@ -2079,7 +2078,7 @@
2079
2078
  "type": "object"
2080
2079
  },
2081
2080
  "CreateAgentConfigRequest": {
2082
- "description": "Parameters for creating an agent config via a pull request. Exactly\none of config or template_id must be set.",
2081
+ "description": "Parameters for creating an agent config. Exactly one of config or\ntemplate_id must be set.",
2083
2082
  "properties": {
2084
2083
  "config": {
2085
2084
  "anyOf": [
@@ -2101,13 +2100,20 @@
2101
2100
  "type": "null"
2102
2101
  }
2103
2102
  ],
2104
- "description": "File path within the repo. Omit for the default agents/<slug>.yaml; if set it must be a location the config sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).",
2103
+ "description": "File path within the repo, when a repository is named. Omit for the default agents/<slug>.yaml; if set it must be a location the config sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).",
2105
2104
  "title": "Path"
2106
2105
  },
2107
2106
  "repository": {
2108
- "description": "Target repository name within the caller's account; the owner is always the account, so pass a bare name (e.g. \"my-service\"), not \"owner/my-service\".",
2109
- "title": "Repository",
2110
- "type": "string"
2107
+ "anyOf": [
2108
+ {
2109
+ "type": "string"
2110
+ },
2111
+ {
2112
+ "type": "null"
2113
+ }
2114
+ ],
2115
+ "description": "Define the agent as a file in this repository: Ellipsis opens a pull request adding it, and the agent goes live when that merges. Repository name within the caller's account; the owner is always the account, so pass a bare name (e.g. \"my-service\"), not \"owner/my-service\". Omit to create the agent through the API alone, with no file and live immediately.",
2116
+ "title": "Repository"
2111
2117
  },
2112
2118
  "template_id": {
2113
2119
  "anyOf": [
@@ -2118,38 +2124,47 @@
2118
2124
  "type": "null"
2119
2125
  }
2120
2126
  ],
2121
- "description": "A gallery template slug (see GET /agents/templates).",
2127
+ "description": "A gallery template slug (see GET /v1/agents/templates).",
2122
2128
  "title": "Template Id"
2123
2129
  }
2124
2130
  },
2125
- "required": [
2126
- "repository"
2127
- ],
2128
2131
  "title": "CreateAgentConfigRequest",
2129
2132
  "type": "object"
2130
2133
  },
2131
2134
  "CreateAgentConfigResponse": {
2132
- "description": "The created agent config and the pull request that adds its file.",
2135
+ "description": "The created agent config, plus the pull request that adds its file when\none was opened.",
2133
2136
  "properties": {
2134
2137
  "config": {
2135
2138
  "$ref": "#/components/schemas/Config",
2136
2139
  "description": "The created agent config."
2137
2140
  },
2138
2141
  "path": {
2139
- "description": "The file path the config was written to.",
2140
- "title": "Path",
2141
- "type": "string"
2142
+ "anyOf": [
2143
+ {
2144
+ "type": "string"
2145
+ },
2146
+ {
2147
+ "type": "null"
2148
+ }
2149
+ ],
2150
+ "description": "The file path the config was written to, or null when the agent has no file.",
2151
+ "title": "Path"
2142
2152
  },
2143
2153
  "pull_request_url": {
2144
- "description": "The pull request that adds the config file. The agent becomes live once it merges and syncs.",
2145
- "title": "Pull Request Url",
2146
- "type": "string"
2154
+ "anyOf": [
2155
+ {
2156
+ "type": "string"
2157
+ },
2158
+ {
2159
+ "type": "null"
2160
+ }
2161
+ ],
2162
+ "description": "The pull request that adds the config file. The agent becomes live once it merges and syncs. Null when no repository was named: the agent is already live.",
2163
+ "title": "Pull Request Url"
2147
2164
  }
2148
2165
  },
2149
2166
  "required": [
2150
- "config",
2151
- "path",
2152
- "pull_request_url"
2167
+ "config"
2153
2168
  ],
2154
2169
  "title": "CreateAgentConfigResponse",
2155
2170
  "type": "object"
@@ -2795,21 +2810,6 @@
2795
2810
  "title": "GetIntegrationsResponse",
2796
2811
  "type": "object"
2797
2812
  },
2798
- "GetSessionIdeResponse": {
2799
- "description": "The IDE link for a session's live sandbox.",
2800
- "properties": {
2801
- "url": {
2802
- "description": "The membership-gated dashboard page for the session's sandbox. The page performs the proxy handoff itself, so the URL carries no credential \u2014 safe to share with any org member, in a transcript, or in a Slack message.",
2803
- "title": "Url",
2804
- "type": "string"
2805
- }
2806
- },
2807
- "required": [
2808
- "url"
2809
- ],
2810
- "title": "GetSessionIdeResponse",
2811
- "type": "object"
2812
- },
2813
2813
  "GetSessionLogResponse": {
2814
2814
  "description": "The session log manifest: the complete, ordered, downloadable history\nof the session \u2014 every record (agent output, tool calls, thinking,\nlifecycle events, sandbox output, message events), archived into\nseq-ranged segments. For a running session `latest_feed_seq` may exceed\n`archived_through_feed_seq`; `has_more` tells the client whether the\nmanifest is the whole story yet.",
2815
2815
  "properties": {
@@ -2871,27 +2871,6 @@
2871
2871
  "title": "GetSessionLogResponse",
2872
2872
  "type": "object"
2873
2873
  },
2874
- "GetSessionPortResponse": {
2875
- "description": "A preview link for a port in a session's live sandbox.",
2876
- "properties": {
2877
- "port": {
2878
- "description": "The sandbox port the link previews.",
2879
- "title": "Port",
2880
- "type": "integer"
2881
- },
2882
- "url": {
2883
- "description": "The same membership-gated dashboard page as the IDE URL, deep-linked to a preview port (a dev server the agent or the IDE user started).",
2884
- "title": "Url",
2885
- "type": "string"
2886
- }
2887
- },
2888
- "required": [
2889
- "url",
2890
- "port"
2891
- ],
2892
- "title": "GetSessionPortResponse",
2893
- "type": "object"
2894
- },
2895
2874
  "GetUsageDashboardResponse": {
2896
2875
  "description": "The account's usage over a period: token and cost totals, a per-day\nseries, and a per-model breakdown. Costs are in millicents (1000 = $0.01);\ntoken counts include cache reads and writes \u2014 everything the runs were\ncharged for.",
2897
2876
  "properties": {
@@ -3846,6 +3825,59 @@
3846
3825
  "title": "LinearTeamsListResponse",
3847
3826
  "type": "object"
3848
3827
  },
3828
+ "LinkAgentConfigRequest": {
3829
+ "description": "Where to put the config file of an agent being moved into a repository.",
3830
+ "properties": {
3831
+ "path": {
3832
+ "anyOf": [
3833
+ {
3834
+ "type": "string"
3835
+ },
3836
+ {
3837
+ "type": "null"
3838
+ }
3839
+ ],
3840
+ "description": "File path within the repo. Omit for the default agents/<slug>.yaml; if set it must be a location the config sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).",
3841
+ "title": "Path"
3842
+ },
3843
+ "repository": {
3844
+ "description": "Repository name within the caller's account; the owner is always the account, so pass a bare name (e.g. \"my-service\"), not \"owner/my-service\".",
3845
+ "title": "Repository",
3846
+ "type": "string"
3847
+ }
3848
+ },
3849
+ "required": [
3850
+ "repository"
3851
+ ],
3852
+ "title": "LinkAgentConfigRequest",
3853
+ "type": "object"
3854
+ },
3855
+ "LinkAgentConfigResponse": {
3856
+ "description": "The agent and the pull request that would put it in a repository.",
3857
+ "properties": {
3858
+ "config": {
3859
+ "$ref": "#/components/schemas/Config",
3860
+ "description": "The agent, still managed through the API until the pull request merges."
3861
+ },
3862
+ "path": {
3863
+ "description": "The file path the config will be written to.",
3864
+ "title": "Path",
3865
+ "type": "string"
3866
+ },
3867
+ "pull_request_url": {
3868
+ "description": "The pull request that adds the config file. The agent becomes managed by that file once it merges.",
3869
+ "title": "Pull Request Url",
3870
+ "type": "string"
3871
+ }
3872
+ },
3873
+ "required": [
3874
+ "config",
3875
+ "path",
3876
+ "pull_request_url"
3877
+ ],
3878
+ "title": "LinkAgentConfigResponse",
3879
+ "type": "object"
3880
+ },
3849
3881
  "LinkedGithubIdentity": {
3850
3882
  "description": "The GitHub identity linked to a Slack member.",
3851
3883
  "properties": {
@@ -4119,7 +4151,7 @@
4119
4151
  "type": "object"
4120
4152
  },
4121
4153
  "ModelManufacturer": {
4122
- "description": "Who BUILT a model. Never who serves it.\n\nServing path is irrelevant here. Anthropic built every Claude model, so all of\nthem are ANTHROPIC whether we reach them through the first-party Anthropic API\nor through Bedrock -- a choice made per request by the llm_providers chain, so\nit is not even a fixed property of the model. Likewise the `bedrock-gpt-5.6-*`\nrows are OPENAI (OpenAI's models, served by AWS), and GLM is ZAI (Z.ai's model,\nserved by Concentrate).\n\nSo this is deliberately NOT derived from `EgressRoute.provider`: routing is an\ninfrastructure fact that changes when we move a model between providers, while\nthe manufacturer is a property of the model itself and never changes.\n\nThe frontend renders a vendor logo per model, which is why it needs the maker.\nKeying that UI off the egress provider would put an AWS logo on a GPT model and\nan OpenAI logo on GLM.",
4154
+ "description": "Who BUILT a model. Never who serves it.\n\nServing path is irrelevant here. Anthropic built every Claude model, so all of\nthem are ANTHROPIC whether we reach them through the first-party Anthropic API\nor through Bedrock -- a choice made per request by the llm_providers chain, so\nit is not even a fixed property of the model. Likewise the `gpt-5.6-*` rows\nare OPENAI (OpenAI's models, served by AWS via bedrock-mantle), and GLM is ZAI\n(Z.ai's model, served by Concentrate).\n\nSo this is deliberately NOT derived from `EgressRoute.provider`: routing is an\ninfrastructure fact that changes when we move a model between providers, while\nthe manufacturer is a property of the model itself and never changes.\n\nThe frontend renders a vendor logo per model, which is why it needs the maker.\nKeying that UI off the egress provider would put an AWS logo on a GPT model and\nan OpenAI logo on GLM.",
4123
4155
  "enum": [
4124
4156
  "anthropic",
4125
4157
  "openai",
@@ -6705,7 +6737,7 @@
6705
6737
  "type": "object"
6706
6738
  },
6707
6739
  "Session": {
6708
- "description": "An agent session: one conversation with an agent, from trigger to\nterminal state. Returned by `GET /sessions/{id}` and carried by the\nsession stream's `session`/`snapshot` frames \u2014 REST and stream never\ndisagree about what a session looks like.",
6740
+ "description": "An agent session: one conversation with an agent, from trigger to\nterminal state. Returned by `GET /v1/sessions/{id}` and carried by the\nsession stream's `session`/`snapshot` frames \u2014 REST and stream never\ndisagree about what a session looks like.",
6709
6741
  "properties": {
6710
6742
  "attribution": {
6711
6743
  "$ref": "#/components/schemas/SessionAttribution",
@@ -6715,18 +6747,6 @@
6715
6747
  "$ref": "#/components/schemas/SessionBudget",
6716
6748
  "description": "The spend budget enforced for this session."
6717
6749
  },
6718
- "client_version": {
6719
- "anyOf": [
6720
- {
6721
- "type": "string"
6722
- },
6723
- {
6724
- "type": "null"
6725
- }
6726
- ],
6727
- "description": "Version of the client that started the session, if reported.",
6728
- "title": "Client Version"
6729
- },
6730
6750
  "config_id": {
6731
6751
  "anyOf": [
6732
6752
  {
@@ -6739,19 +6759,6 @@
6739
6759
  "description": "Identifier of the saved agent config the session ran on, if any.",
6740
6760
  "title": "Config Id"
6741
6761
  },
6742
- "config_override": {
6743
- "anyOf": [
6744
- {
6745
- "additionalProperties": true,
6746
- "type": "object"
6747
- },
6748
- {
6749
- "type": "null"
6750
- }
6751
- ],
6752
- "description": "The partial-config diff applied for this run; null when the config was unmodified.",
6753
- "title": "Config Override"
6754
- },
6755
6762
  "context_repository": {
6756
6763
  "anyOf": [
6757
6764
  {
@@ -6887,30 +6894,6 @@
6887
6894
  "$ref": "#/components/schemas/SessionPrompting",
6888
6895
  "description": "Whether a client may send this session a message and, when it may not, the reason to show instead of a composer."
6889
6896
  },
6890
- "sandbox_id": {
6891
- "anyOf": [
6892
- {
6893
- "type": "string"
6894
- },
6895
- {
6896
- "type": "null"
6897
- }
6898
- ],
6899
- "description": "Identifier of the sandbox the session runs in, if any.",
6900
- "title": "Sandbox Id"
6901
- },
6902
- "session_key": {
6903
- "anyOf": [
6904
- {
6905
- "type": "string"
6906
- },
6907
- {
6908
- "type": "null"
6909
- }
6910
- ],
6911
- "description": "Key identifying the durable conversation this session belongs to, or null for single-shot sessions.",
6912
- "title": "Session Key"
6913
- },
6914
6897
  "session_state": {
6915
6898
  "anyOf": [
6916
6899
  {
@@ -6966,29 +6949,6 @@
6966
6949
  "format": "date-time",
6967
6950
  "title": "Updated At",
6968
6951
  "type": "string"
6969
- },
6970
- "webhook_id": {
6971
- "anyOf": [
6972
- {
6973
- "type": "string"
6974
- },
6975
- {
6976
- "type": "null"
6977
- }
6978
- ],
6979
- "description": "Identifier of the webhook event that triggered the session, if any.",
6980
- "title": "Webhook Id"
6981
- },
6982
- "webhook_type": {
6983
- "anyOf": [
6984
- {
6985
- "$ref": "#/components/schemas/WebhookType"
6986
- },
6987
- {
6988
- "type": "null"
6989
- }
6990
- ],
6991
- "description": "Type of the webhook event that triggered the session, if any."
6992
6952
  }
6993
6953
  },
6994
6954
  "required": [
@@ -8059,7 +8019,7 @@
8059
8019
  "title": "Next Cursor"
8060
8020
  },
8061
8021
  "sessions": {
8062
- "description": "Lean wire rows \u2014 the same shape GET /sessions/{id} and the stream's session frames carry. The heavy blobs (config snapshot, input/output) live on the detail endpoints.",
8022
+ "description": "Lean wire rows \u2014 the same shape GET /v1/sessions/{id} and the stream's session frames carry. The heavy blobs (config snapshot, input/output) live on the detail endpoints.",
8063
8023
  "items": {
8064
8024
  "$ref": "#/components/schemas/Session"
8065
8025
  },
@@ -8675,6 +8635,20 @@
8675
8635
  "title": "TranscriptIngestResult",
8676
8636
  "type": "object"
8677
8637
  },
8638
+ "UpdateAgentConfigRequest": {
8639
+ "description": "A replacement definition for an agent managed through the API.",
8640
+ "properties": {
8641
+ "config": {
8642
+ "$ref": "#/components/schemas/AgentConfig",
8643
+ "description": "The agent's new definition. Replaces the previous one wholesale \u2014 this is not a partial update."
8644
+ }
8645
+ },
8646
+ "required": [
8647
+ "config"
8648
+ ],
8649
+ "title": "UpdateAgentConfigRequest",
8650
+ "type": "object"
8651
+ },
8678
8652
  "UsageDailyPoint": {
8679
8653
  "description": "One day's usage: tokens split by type, and cost split into the four\nbilled categories. `tokens` is the sum of the four token types.",
8680
8654
  "properties": {
@@ -8812,27 +8786,6 @@
8812
8786
  "title": "ValidationError",
8813
8787
  "type": "object"
8814
8788
  },
8815
- "WebhookType": {
8816
- "enum": [
8817
- "github.issue",
8818
- "github.issue_comment",
8819
- "github.push",
8820
- "github.pull_request",
8821
- "github.pull_request_comment",
8822
- "github.pull_request_review",
8823
- "github.pull_request_review_comment",
8824
- "slack.app_mention",
8825
- "slack.message",
8826
- "slack.channel_created",
8827
- "linear.issue",
8828
- "linear.issue_comment",
8829
- "sentry.event_alert",
8830
- "sentry.metric_alert",
8831
- "user.message"
8832
- ],
8833
- "title": "WebhookType",
8834
- "type": "string"
8835
- },
8836
8789
  "WhoAmIResponse": {
8837
8790
  "description": "The identity behind the caller's credential.",
8838
8791
  "properties": {
@@ -8920,7 +8873,7 @@
8920
8873
  },
8921
8874
  "openapi": "3.1.0",
8922
8875
  "paths": {
8923
- "/agents/configs": {
8876
+ "/v1/agents/configs": {
8924
8877
  "get": {
8925
8878
  "description": "List saved agent configs.",
8926
8879
  "operationId": "list_agent_configs",
@@ -8996,7 +8949,7 @@
8996
8949
  "x-ellipsis-sdk-method": "agents.configs.list"
8997
8950
  },
8998
8951
  "post": {
8999
- "description": "Create an agent config via pull request.\n\nThe PR adds the config file to agents/ on the target\nrepository; the agent goes live when it merges.\n\nAccepts an inline config or a gallery template slug. 409 when\nanother live agent already holds the name.",
8952
+ "description": "Create an agent config.\n\nName a repository and Ellipsis opens a pull request adding the\nconfig file to agents/ there; the agent goes live when it\nmerges. Omit it and the agent is created here, with no file,\nlive immediately \u2014 and every file reference in it must name the\nrepository it lives in.\n\nAccepts an inline config or a gallery template slug. 409 when\nanother live agent already holds the name.",
9000
8953
  "operationId": "create_agent_config",
9001
8954
  "parameters": [
9002
8955
  {
@@ -9095,7 +9048,7 @@
9095
9048
  }
9096
9049
  }
9097
9050
  },
9098
- "description": "The agent's name contains no usable characters."
9051
+ "description": "The agent's name contains no usable characters, or a file reference names no repository."
9099
9052
  }
9100
9053
  },
9101
9054
  "security": [
@@ -9110,10 +9063,10 @@
9110
9063
  "x-ellipsis-sdk-method": "agents.configs.create"
9111
9064
  }
9112
9065
  },
9113
- "/agents/configs/{config_id}": {
9114
- "get": {
9115
- "description": "Return one saved agent config, by id or by the agent's name.",
9116
- "operationId": "get_agent_config",
9066
+ "/v1/agents/configs/{config_id}": {
9067
+ "delete": {
9068
+ "description": "Delete an agent, by id or by the agent's name.\n\nThe agent stops running and its name is freed immediately; its\npast sessions remain readable. Only for agents managed through\nthis API \u2014 delete the file to remove one defined by a\nrepository.",
9069
+ "operationId": "delete_agent_config",
9117
9070
  "parameters": [
9118
9071
  {
9119
9072
  "in": "path",
@@ -9142,14 +9095,7 @@
9142
9095
  }
9143
9096
  ],
9144
9097
  "responses": {
9145
- "200": {
9146
- "content": {
9147
- "application/json": {
9148
- "schema": {
9149
- "$ref": "#/components/schemas/AgentConfigResponse"
9150
- }
9151
- }
9152
- },
9098
+ "204": {
9153
9099
  "description": "Successful Response"
9154
9100
  },
9155
9101
  "401": {
@@ -9182,6 +9128,16 @@
9182
9128
  },
9183
9129
  "description": "No such config in your account."
9184
9130
  },
9131
+ "409": {
9132
+ "content": {
9133
+ "application/json": {
9134
+ "schema": {
9135
+ "$ref": "#/components/schemas/ErrorResponse"
9136
+ }
9137
+ }
9138
+ },
9139
+ "description": "The agent is defined by a file in a repository; delete that file instead."
9140
+ },
9185
9141
  "422": {
9186
9142
  "content": {
9187
9143
  "application/json": {
@@ -9198,22 +9154,28 @@
9198
9154
  "HTTPBearer": []
9199
9155
  }
9200
9156
  ],
9201
- "summary": "Get Agent Config",
9157
+ "summary": "Delete Agent Config",
9202
9158
  "tags": [
9203
9159
  "v1"
9204
9160
  ],
9205
- "x-ellipsis-sdk-method": "agents.configs.get"
9206
- }
9207
- },
9208
- "/agents/defaults": {
9209
- "delete": {
9210
- "description": "Clear a default agent config.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung.\n\nRefused for sandbox tokens.",
9211
- "operationId": "delete_agent_default",
9161
+ "x-ellipsis-sdk-method": "agents.configs.delete"
9162
+ },
9163
+ "get": {
9164
+ "description": "Return one saved agent config, by id or by the agent's name.",
9165
+ "operationId": "get_agent_config",
9212
9166
  "parameters": [
9213
9167
  {
9214
- "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
9215
- "in": "query",
9216
- "name": "repository",
9168
+ "in": "path",
9169
+ "name": "config_id",
9170
+ "required": true,
9171
+ "schema": {
9172
+ "title": "Config Id",
9173
+ "type": "string"
9174
+ }
9175
+ },
9176
+ {
9177
+ "in": "header",
9178
+ "name": "user-agent",
9217
9179
  "required": false,
9218
9180
  "schema": {
9219
9181
  "anyOf": [
@@ -9224,10 +9186,450 @@
9224
9186
  "type": "null"
9225
9187
  }
9226
9188
  ],
9227
- "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
9228
- "title": "Repository"
9189
+ "title": "User-Agent"
9229
9190
  }
9230
- },
9191
+ }
9192
+ ],
9193
+ "responses": {
9194
+ "200": {
9195
+ "content": {
9196
+ "application/json": {
9197
+ "schema": {
9198
+ "$ref": "#/components/schemas/AgentConfigResponse"
9199
+ }
9200
+ }
9201
+ },
9202
+ "description": "Successful Response"
9203
+ },
9204
+ "401": {
9205
+ "content": {
9206
+ "application/json": {
9207
+ "schema": {
9208
+ "$ref": "#/components/schemas/ErrorResponse"
9209
+ }
9210
+ }
9211
+ },
9212
+ "description": "The bearer token is missing, invalid, or revoked."
9213
+ },
9214
+ "403": {
9215
+ "content": {
9216
+ "application/json": {
9217
+ "schema": {
9218
+ "$ref": "#/components/schemas/ErrorResponse"
9219
+ }
9220
+ }
9221
+ },
9222
+ "description": "The credential may not perform this action, or the account is blocked."
9223
+ },
9224
+ "404": {
9225
+ "content": {
9226
+ "application/json": {
9227
+ "schema": {
9228
+ "$ref": "#/components/schemas/ErrorResponse"
9229
+ }
9230
+ }
9231
+ },
9232
+ "description": "No such config in your account."
9233
+ },
9234
+ "422": {
9235
+ "content": {
9236
+ "application/json": {
9237
+ "schema": {
9238
+ "$ref": "#/components/schemas/HTTPValidationError"
9239
+ }
9240
+ }
9241
+ },
9242
+ "description": "Validation Error"
9243
+ }
9244
+ },
9245
+ "security": [
9246
+ {
9247
+ "HTTPBearer": []
9248
+ }
9249
+ ],
9250
+ "summary": "Get Agent Config",
9251
+ "tags": [
9252
+ "v1"
9253
+ ],
9254
+ "x-ellipsis-sdk-method": "agents.configs.get"
9255
+ },
9256
+ "put": {
9257
+ "description": "Replace an agent's definition, by id or by the agent's name.\n\nThe whole definition is replaced, and the change is live at\nonce. Only for agents managed through this API: one defined by a\nrepository file is a 409, since the next push to that file would\nrevert the change \u2014 unlink it first to take ownership.",
9258
+ "operationId": "update_agent_config",
9259
+ "parameters": [
9260
+ {
9261
+ "in": "path",
9262
+ "name": "config_id",
9263
+ "required": true,
9264
+ "schema": {
9265
+ "title": "Config Id",
9266
+ "type": "string"
9267
+ }
9268
+ },
9269
+ {
9270
+ "in": "header",
9271
+ "name": "user-agent",
9272
+ "required": false,
9273
+ "schema": {
9274
+ "anyOf": [
9275
+ {
9276
+ "type": "string"
9277
+ },
9278
+ {
9279
+ "type": "null"
9280
+ }
9281
+ ],
9282
+ "title": "User-Agent"
9283
+ }
9284
+ }
9285
+ ],
9286
+ "requestBody": {
9287
+ "content": {
9288
+ "application/json": {
9289
+ "schema": {
9290
+ "$ref": "#/components/schemas/UpdateAgentConfigRequest"
9291
+ }
9292
+ }
9293
+ },
9294
+ "required": true
9295
+ },
9296
+ "responses": {
9297
+ "200": {
9298
+ "content": {
9299
+ "application/json": {
9300
+ "schema": {
9301
+ "$ref": "#/components/schemas/AgentConfigResponse"
9302
+ }
9303
+ }
9304
+ },
9305
+ "description": "Successful Response"
9306
+ },
9307
+ "400": {
9308
+ "content": {
9309
+ "application/json": {
9310
+ "schema": {
9311
+ "$ref": "#/components/schemas/ErrorResponse"
9312
+ }
9313
+ }
9314
+ },
9315
+ "description": "The config is invalid (for example an unschedulable cron expression)."
9316
+ },
9317
+ "401": {
9318
+ "content": {
9319
+ "application/json": {
9320
+ "schema": {
9321
+ "$ref": "#/components/schemas/ErrorResponse"
9322
+ }
9323
+ }
9324
+ },
9325
+ "description": "The bearer token is missing, invalid, or revoked."
9326
+ },
9327
+ "403": {
9328
+ "content": {
9329
+ "application/json": {
9330
+ "schema": {
9331
+ "$ref": "#/components/schemas/ErrorResponse"
9332
+ }
9333
+ }
9334
+ },
9335
+ "description": "The credential may not perform this action, or the account is blocked."
9336
+ },
9337
+ "404": {
9338
+ "content": {
9339
+ "application/json": {
9340
+ "schema": {
9341
+ "$ref": "#/components/schemas/ErrorResponse"
9342
+ }
9343
+ }
9344
+ },
9345
+ "description": "No such config in your account."
9346
+ },
9347
+ "409": {
9348
+ "content": {
9349
+ "application/json": {
9350
+ "schema": {
9351
+ "$ref": "#/components/schemas/ErrorResponse"
9352
+ }
9353
+ }
9354
+ },
9355
+ "description": "The agent is defined by a file in a repository, or another live agent already holds the new name."
9356
+ },
9357
+ "422": {
9358
+ "content": {
9359
+ "application/json": {
9360
+ "schema": {
9361
+ "$ref": "#/components/schemas/ErrorResponse"
9362
+ }
9363
+ }
9364
+ },
9365
+ "description": "The agent's name is missing or malformed, or a file reference names no repository."
9366
+ }
9367
+ },
9368
+ "security": [
9369
+ {
9370
+ "HTTPBearer": []
9371
+ }
9372
+ ],
9373
+ "summary": "Update Agent Config",
9374
+ "tags": [
9375
+ "v1"
9376
+ ],
9377
+ "x-ellipsis-sdk-method": "agents.configs.update"
9378
+ }
9379
+ },
9380
+ "/v1/agents/configs/{config_id}/link": {
9381
+ "post": {
9382
+ "description": "Move an agent into a repository, by id or by the agent's name.\n\nOpens a pull request adding the agent's config file. The agent\nkeeps running unchanged meanwhile; merging hands it over to the\nfile, after which the file is what changes it. Nothing happens\nif the pull request is never merged.",
9383
+ "operationId": "link_agent_config",
9384
+ "parameters": [
9385
+ {
9386
+ "in": "path",
9387
+ "name": "config_id",
9388
+ "required": true,
9389
+ "schema": {
9390
+ "title": "Config Id",
9391
+ "type": "string"
9392
+ }
9393
+ },
9394
+ {
9395
+ "in": "header",
9396
+ "name": "user-agent",
9397
+ "required": false,
9398
+ "schema": {
9399
+ "anyOf": [
9400
+ {
9401
+ "type": "string"
9402
+ },
9403
+ {
9404
+ "type": "null"
9405
+ }
9406
+ ],
9407
+ "title": "User-Agent"
9408
+ }
9409
+ }
9410
+ ],
9411
+ "requestBody": {
9412
+ "content": {
9413
+ "application/json": {
9414
+ "schema": {
9415
+ "$ref": "#/components/schemas/LinkAgentConfigRequest"
9416
+ }
9417
+ }
9418
+ },
9419
+ "required": true
9420
+ },
9421
+ "responses": {
9422
+ "200": {
9423
+ "content": {
9424
+ "application/json": {
9425
+ "schema": {
9426
+ "$ref": "#/components/schemas/LinkAgentConfigResponse"
9427
+ }
9428
+ }
9429
+ },
9430
+ "description": "Successful Response"
9431
+ },
9432
+ "400": {
9433
+ "content": {
9434
+ "application/json": {
9435
+ "schema": {
9436
+ "$ref": "#/components/schemas/ErrorResponse"
9437
+ }
9438
+ }
9439
+ },
9440
+ "description": "The path is not a synced config location, or the repository has no commits."
9441
+ },
9442
+ "401": {
9443
+ "content": {
9444
+ "application/json": {
9445
+ "schema": {
9446
+ "$ref": "#/components/schemas/ErrorResponse"
9447
+ }
9448
+ }
9449
+ },
9450
+ "description": "The bearer token is missing, invalid, or revoked."
9451
+ },
9452
+ "403": {
9453
+ "content": {
9454
+ "application/json": {
9455
+ "schema": {
9456
+ "$ref": "#/components/schemas/ErrorResponse"
9457
+ }
9458
+ }
9459
+ },
9460
+ "description": "The credential may not perform this action, or the account is blocked."
9461
+ },
9462
+ "404": {
9463
+ "content": {
9464
+ "application/json": {
9465
+ "schema": {
9466
+ "$ref": "#/components/schemas/ErrorResponse"
9467
+ }
9468
+ }
9469
+ },
9470
+ "description": "The config or repository was not found in your account."
9471
+ },
9472
+ "409": {
9473
+ "content": {
9474
+ "application/json": {
9475
+ "schema": {
9476
+ "$ref": "#/components/schemas/ErrorResponse"
9477
+ }
9478
+ }
9479
+ },
9480
+ "description": "The agent is already defined by a file, a link is already open for it, a file already exists at that path, or another agent syncs from it."
9481
+ },
9482
+ "422": {
9483
+ "content": {
9484
+ "application/json": {
9485
+ "schema": {
9486
+ "$ref": "#/components/schemas/ErrorResponse"
9487
+ }
9488
+ }
9489
+ },
9490
+ "description": "GitHub rejected the pull request."
9491
+ }
9492
+ },
9493
+ "security": [
9494
+ {
9495
+ "HTTPBearer": []
9496
+ }
9497
+ ],
9498
+ "summary": "Link Agent Config",
9499
+ "tags": [
9500
+ "v1"
9501
+ ],
9502
+ "x-ellipsis-sdk-method": "agents.configs.link"
9503
+ }
9504
+ },
9505
+ "/v1/agents/configs/{config_id}/unlink": {
9506
+ "post": {
9507
+ "description": "Take over an agent from its file, by id or by the agent's name.\n\nThe file stops governing the agent immediately and further\nchanges go through this API. The file is left in place, inert \u2014\ndelete it whenever you like.",
9508
+ "operationId": "unlink_agent_config",
9509
+ "parameters": [
9510
+ {
9511
+ "in": "path",
9512
+ "name": "config_id",
9513
+ "required": true,
9514
+ "schema": {
9515
+ "title": "Config Id",
9516
+ "type": "string"
9517
+ }
9518
+ },
9519
+ {
9520
+ "in": "header",
9521
+ "name": "user-agent",
9522
+ "required": false,
9523
+ "schema": {
9524
+ "anyOf": [
9525
+ {
9526
+ "type": "string"
9527
+ },
9528
+ {
9529
+ "type": "null"
9530
+ }
9531
+ ],
9532
+ "title": "User-Agent"
9533
+ }
9534
+ }
9535
+ ],
9536
+ "responses": {
9537
+ "200": {
9538
+ "content": {
9539
+ "application/json": {
9540
+ "schema": {
9541
+ "$ref": "#/components/schemas/AgentConfigResponse"
9542
+ }
9543
+ }
9544
+ },
9545
+ "description": "Successful Response"
9546
+ },
9547
+ "401": {
9548
+ "content": {
9549
+ "application/json": {
9550
+ "schema": {
9551
+ "$ref": "#/components/schemas/ErrorResponse"
9552
+ }
9553
+ }
9554
+ },
9555
+ "description": "The bearer token is missing, invalid, or revoked."
9556
+ },
9557
+ "403": {
9558
+ "content": {
9559
+ "application/json": {
9560
+ "schema": {
9561
+ "$ref": "#/components/schemas/ErrorResponse"
9562
+ }
9563
+ }
9564
+ },
9565
+ "description": "The credential may not perform this action, or the account is blocked."
9566
+ },
9567
+ "404": {
9568
+ "content": {
9569
+ "application/json": {
9570
+ "schema": {
9571
+ "$ref": "#/components/schemas/ErrorResponse"
9572
+ }
9573
+ }
9574
+ },
9575
+ "description": "No such config in your account."
9576
+ },
9577
+ "409": {
9578
+ "content": {
9579
+ "application/json": {
9580
+ "schema": {
9581
+ "$ref": "#/components/schemas/ErrorResponse"
9582
+ }
9583
+ }
9584
+ },
9585
+ "description": "The agent is already managed through the API."
9586
+ },
9587
+ "422": {
9588
+ "content": {
9589
+ "application/json": {
9590
+ "schema": {
9591
+ "$ref": "#/components/schemas/ErrorResponse"
9592
+ }
9593
+ }
9594
+ },
9595
+ "description": "The config has a file reference that names no repository, so it cannot resolve without its source repository."
9596
+ }
9597
+ },
9598
+ "security": [
9599
+ {
9600
+ "HTTPBearer": []
9601
+ }
9602
+ ],
9603
+ "summary": "Unlink Agent Config",
9604
+ "tags": [
9605
+ "v1"
9606
+ ],
9607
+ "x-ellipsis-sdk-method": "agents.configs.unlink"
9608
+ }
9609
+ },
9610
+ "/v1/agents/defaults": {
9611
+ "delete": {
9612
+ "description": "Clear a default agent config.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung.\n\nRefused for sandbox tokens.",
9613
+ "operationId": "delete_agent_default",
9614
+ "parameters": [
9615
+ {
9616
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
9617
+ "in": "query",
9618
+ "name": "repository",
9619
+ "required": false,
9620
+ "schema": {
9621
+ "anyOf": [
9622
+ {
9623
+ "type": "string"
9624
+ },
9625
+ {
9626
+ "type": "null"
9627
+ }
9628
+ ],
9629
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
9630
+ "title": "Repository"
9631
+ }
9632
+ },
9231
9633
  {
9232
9634
  "in": "header",
9233
9635
  "name": "user-agent",
@@ -9480,7 +9882,7 @@
9480
9882
  "x-ellipsis-sdk-method": "agents.defaults.set"
9481
9883
  }
9482
9884
  },
9483
- "/agents/templates": {
9885
+ "/v1/agents/templates": {
9484
9886
  "get": {
9485
9887
  "description": "List the built-in starter agent templates.\n\nBehind auth but not account-scoped \u2014 the data is static\nproduct content shared by the dashboard, landing site, and CLI.",
9486
9888
  "operationId": "list_agent_templates",
@@ -9556,7 +9958,7 @@
9556
9958
  "x-ellipsis-sdk-method": "agents.templates.list"
9557
9959
  }
9558
9960
  },
9559
- "/agents/templates/{template_id}": {
9961
+ "/v1/agents/templates/{template_id}": {
9560
9962
  "get": {
9561
9963
  "description": "Return one built-in agent template by slug.",
9562
9964
  "operationId": "get_agent_template",
@@ -9651,7 +10053,7 @@
9651
10053
  "x-ellipsis-sdk-method": "agents.templates.get"
9652
10054
  }
9653
10055
  },
9654
- "/alerts": {
10056
+ "/v1/alerts": {
9655
10057
  "get": {
9656
10058
  "description": "List budget alerts for the organization, newest first.\n\nOptionally filtered by status and source.\n\nAvailable to all credential types, so an agent can check \"is\nthis org near budget?\" mid-task.",
9657
10059
  "operationId": "list_alerts",
@@ -9787,7 +10189,7 @@
9787
10189
  "x-ellipsis-sdk-method": "alerts.list"
9788
10190
  }
9789
10191
  },
9790
- "/alerts/{alert_id}": {
10192
+ "/v1/alerts/{alert_id}": {
9791
10193
  "get": {
9792
10194
  "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
9793
10195
  "operationId": "get_alert",
@@ -9882,7 +10284,7 @@
9882
10284
  "x-ellipsis-sdk-method": "alerts.get"
9883
10285
  }
9884
10286
  },
9885
- "/alerts/{alert_id}/dismiss": {
10287
+ "/v1/alerts/{alert_id}/dismiss": {
9886
10288
  "post": {
9887
10289
  "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
9888
10290
  "operationId": "dismiss_alert",
@@ -9987,7 +10389,7 @@
9987
10389
  "x-ellipsis-sdk-method": "alerts.dismiss"
9988
10390
  }
9989
10391
  },
9990
- "/analytics/metrics": {
10392
+ "/v1/analytics/metrics": {
9991
10393
  "get": {
9992
10394
  "description": "Return PR and review analytics metrics.\n\nThe same data as the analytics dashboard.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days). account_type in all|user|bot scopes the authors (bot =\nthe apps/agents). Available to all credential types: the\nresponses expose the organization's own GitHub PR/review activity,\nno secrets.",
9993
10395
  "operationId": "get_analytics_metrics",
@@ -10196,7 +10598,7 @@
10196
10598
  "x-ellipsis-sdk-method": "analytics.metrics"
10197
10599
  }
10198
10600
  },
10199
- "/analytics/pull-requests": {
10601
+ "/v1/analytics/pull-requests": {
10200
10602
  "get": {
10201
10603
  "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days).",
10202
10604
  "operationId": "get_analytics_pull_requests",
@@ -10408,7 +10810,7 @@
10408
10810
  "x-ellipsis-sdk-method": "analytics.pull_requests"
10409
10811
  }
10410
10812
  },
10411
- "/analytics/reviews": {
10813
+ "/v1/analytics/reviews": {
10412
10814
  "get": {
10413
10815
  "description": "Return code-review analytics.\n\naccount_type scopes reviewers (bot|user|all) \u2014 e.g. \"what apps\nreview the most PRs?\" is the reviewer facets here with\naccount_type=bot. Windowing: pass explicit start/end, or days\n(default: the last 30 days).",
10414
10816
  "operationId": "get_analytics_reviews",
@@ -10613,7 +11015,7 @@
10613
11015
  "x-ellipsis-sdk-method": "analytics.reviews"
10614
11016
  }
10615
11017
  },
10616
- "/auth/cli/poll": {
11018
+ "/v1/auth/cli/poll": {
10617
11019
  "post": {
10618
11020
  "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
10619
11021
  "operationId": "cli_auth_poll",
@@ -10686,7 +11088,7 @@
10686
11088
  "x-ellipsis-sdk-method": "auth.cli.poll"
10687
11089
  }
10688
11090
  },
10689
- "/auth/cli/start": {
11091
+ "/v1/auth/cli/start": {
10690
11092
  "post": {
10691
11093
  "description": "Start a device-code auth flow for the CLI.\n\nUnauthenticated: the CLI has no credential yet \u2014 that's what\nit's obtaining. The human authorizes out-of-band in the\ndashboard.",
10692
11094
  "operationId": "cli_auth_start",
@@ -10729,7 +11131,7 @@
10729
11131
  "x-ellipsis-sdk-method": "auth.cli.start"
10730
11132
  }
10731
11133
  },
10732
- "/budget": {
11134
+ "/v1/budget": {
10733
11135
  "get": {
10734
11136
  "description": "Return the caller's current budget summary.",
10735
11137
  "operationId": "get_budget",
@@ -10805,7 +11207,7 @@
10805
11207
  "x-ellipsis-sdk-method": "budget"
10806
11208
  }
10807
11209
  },
10808
- "/files": {
11210
+ "/v1/files": {
10809
11211
  "get": {
10810
11212
  "description": "List uploaded files, newest first.\n\nMetadata only \u2014 download URLs are minted per explicit GET, not\nper row. session_id scopes the list to one run's uploads.",
10811
11213
  "operationId": "list_files",
@@ -11029,7 +11431,7 @@
11029
11431
  "x-ellipsis-sdk-method": "files.create"
11030
11432
  }
11031
11433
  },
11032
- "/files/{file_id}": {
11434
+ "/v1/files/{file_id}": {
11033
11435
  "delete": {
11034
11436
  "description": "Delete a file.\n\nA foreign, missing, or already-deleted id is an\nindistinguishable 404, so ids can't be enumerated. Sandbox\ntokens get a 403 (a sandbox token sits next to\npotentially-untrusted code and must not be able to destroy the\naccount's files \u2014 uploading is fine, destruction is not); API\nkeys and user tokens may delete.",
11035
11437
  "operationId": "delete_file",
@@ -11210,7 +11612,7 @@
11210
11612
  "x-ellipsis-sdk-method": "files.get"
11211
11613
  }
11212
11614
  },
11213
- "/integrations": {
11615
+ "/v1/integrations": {
11214
11616
  "get": {
11215
11617
  "description": "List connected integrations.\n\nA read-only view, so an agent authoring another agent's\nconfig can learn which repositories, channels, teams, and\norganizations it may name before POST /agents/configs.\n\nAvailable to all credential types including sandbox tokens: the\nresponses never include OAuth tokens or any other secret.",
11216
11618
  "operationId": "get_integrations",
@@ -11286,7 +11688,7 @@
11286
11688
  "x-ellipsis-sdk-method": "integrations.list"
11287
11689
  }
11288
11690
  },
11289
- "/integrations/github/members": {
11691
+ "/v1/integrations/github/members": {
11290
11692
  "get": {
11291
11693
  "description": "List the GitHub organization roster.\n\n(Or the account itself for a personal workspace) \u2014 the universe of author_id values for\n/sessions and /sessions/search.\n\nMembers carry their linked Slack identity when a Slack-GitHub\nlink exists, and /slack/members carries the reverse link.",
11292
11694
  "operationId": "list_github_members",
@@ -11362,7 +11764,7 @@
11362
11764
  "x-ellipsis-sdk-method": "integrations.github.members"
11363
11765
  }
11364
11766
  },
11365
- "/integrations/github/repos": {
11767
+ "/v1/integrations/github/repos": {
11366
11768
  "get": {
11367
11769
  "description": "List GitHub repositories connected to the installation.",
11368
11770
  "operationId": "list_github_repositories",
@@ -11438,7 +11840,7 @@
11438
11840
  "x-ellipsis-sdk-method": "integrations.github.repos"
11439
11841
  }
11440
11842
  },
11441
- "/integrations/linear/teams": {
11843
+ "/v1/integrations/linear/teams": {
11442
11844
  "get": {
11443
11845
  "description": "List the teams of the connected Linear workspace.",
11444
11846
  "operationId": "list_linear_teams",
@@ -11524,7 +11926,7 @@
11524
11926
  "x-ellipsis-sdk-method": "integrations.linear.teams"
11525
11927
  }
11526
11928
  },
11527
- "/integrations/sentry/organizations": {
11929
+ "/v1/integrations/sentry/organizations": {
11528
11930
  "get": {
11529
11931
  "description": "List the connected Sentry organizations.",
11530
11932
  "operationId": "list_sentry_organizations",
@@ -11600,7 +12002,7 @@
11600
12002
  "x-ellipsis-sdk-method": "integrations.sentry.organizations"
11601
12003
  }
11602
12004
  },
11603
- "/integrations/slack/channels": {
12005
+ "/v1/integrations/slack/channels": {
11604
12006
  "get": {
11605
12007
  "description": "List the channels of the connected Slack workspace, fetched\nlive from the Slack API.",
11606
12008
  "operationId": "list_slack_channels",
@@ -11686,7 +12088,7 @@
11686
12088
  "x-ellipsis-sdk-method": "integrations.slack.channels"
11687
12089
  }
11688
12090
  },
11689
- "/integrations/slack/members": {
12091
+ "/v1/integrations/slack/members": {
11690
12092
  "get": {
11691
12093
  "description": "List the members of the connected Slack workspace, fetched\nlive from the Slack API.",
11692
12094
  "operationId": "list_slack_members",
@@ -11772,7 +12174,7 @@
11772
12174
  "x-ellipsis-sdk-method": "integrations.slack.members"
11773
12175
  }
11774
12176
  },
11775
- "/me": {
12177
+ "/v1/me": {
11776
12178
  "get": {
11777
12179
  "description": "Return the identity behind the caller's credential.",
11778
12180
  "operationId": "whoami",
@@ -11848,7 +12250,7 @@
11848
12250
  "x-ellipsis-sdk-method": "me"
11849
12251
  }
11850
12252
  },
11851
- "/memories": {
12253
+ "/v1/memories": {
11852
12254
  "get": {
11853
12255
  "description": "List the organization's memories as a readable index.\n\nReturns the memories rendered as a markdown index (one line per\nmemory, carrying its id, path, and description) plus the same\nentries structured, each with every field except `content`. Read\nthe index, then fetch the ids whose content you want.",
11854
12256
  "operationId": "list_memories",
@@ -12036,7 +12438,7 @@
12036
12438
  "x-ellipsis-sdk-method": "memories.create"
12037
12439
  }
12038
12440
  },
12039
- "/memories/{memory_id}": {
12441
+ "/v1/memories/{memory_id}": {
12040
12442
  "delete": {
12041
12443
  "description": "Delete a memory that is no longer true.\n\nAvailable to every credential type, agents included \u2014 a wrong\nmemory is worse than a missing one. The deleted content is kept in\nthe memory's history for forensics, not for an undo API.",
12042
12444
  "operationId": "delete_memory",
@@ -12358,7 +12760,7 @@
12358
12760
  "x-ellipsis-sdk-method": "memories.edit"
12359
12761
  }
12360
12762
  },
12361
- "/models": {
12763
+ "/v1/models": {
12362
12764
  "get": {
12363
12765
  "description": "List selectable agent models.\n\nMost expensive first, with the platform default flagged.\n\nReads the same registry as the dashboard's rate table, so a\nclient's model picker can never drift from what's offered.\nBehind auth but not account-scoped \u2014 the selectable set is\nglobal.",
12364
12766
  "operationId": "list_supported_models",
@@ -12434,7 +12836,7 @@
12434
12836
  "x-ellipsis-sdk-method": "models.list"
12435
12837
  }
12436
12838
  },
12437
- "/reviews": {
12839
+ "/v1/reviews": {
12438
12840
  "get": {
12439
12841
  "description": "List code reviews, newest first.\n\n`findings` is omitted (counters only).\n\nWebhook-created reviews appear here too, so this answers \"show\nme every review on this PR\".",
12440
12842
  "operationId": "list_reviews",
@@ -12736,7 +13138,7 @@
12736
13138
  "x-ellipsis-sdk-method": "reviews.create"
12737
13139
  }
12738
13140
  },
12739
- "/reviews/{review_id}": {
13141
+ "/v1/reviews/{review_id}": {
12740
13142
  "get": {
12741
13143
  "description": "Return one review with findings and outcome.\n\nIncludes its scope, the per-stage sessions, the parsed findings,\nthe finding counters, and the posting outcome.\n\nFindings only exist after a stage session finalizes \u2014 a running\nreview honestly reports [] / null, which is why a client\nstreams a stage session and then re-fetches the review.",
12742
13144
  "operationId": "get_review",
@@ -12831,7 +13233,7 @@
12831
13233
  "x-ellipsis-sdk-method": "reviews.get"
12832
13234
  }
12833
13235
  },
12834
- "/secrets": {
13236
+ "/v1/secrets": {
12835
13237
  "get": {
12836
13238
  "description": "List secrets.\n\nValues are write-only: the response carries only names and\ntimestamps, never the stored value.",
12837
13239
  "operationId": "list_secrets",
@@ -13001,7 +13403,7 @@
13001
13403
  "x-ellipsis-sdk-method": "secrets.set"
13002
13404
  }
13003
13405
  },
13004
- "/secrets/{name}": {
13406
+ "/v1/secrets/{name}": {
13005
13407
  "delete": {
13006
13408
  "description": "Delete a secret by name.\n\nRefused for sandbox tokens; mutations require an API key or\nuser token.",
13007
13409
  "operationId": "delete_secret",
@@ -13079,7 +13481,7 @@
13079
13481
  "x-ellipsis-sdk-method": "secrets.delete"
13080
13482
  }
13081
13483
  },
13082
- "/sessions": {
13484
+ "/v1/sessions": {
13083
13485
  "get": {
13084
13486
  "description": "List cloud agent sessions, newest first.\n\nOptionally filtered by config (id or `ellipsis.name`), source, time\nwindow, attributed author, repository, and whether the session is\nstill going.",
13085
13487
  "operationId": "list_agent_sessions",
@@ -13432,7 +13834,7 @@
13432
13834
  "x-ellipsis-sdk-method": "sessions.start"
13433
13835
  }
13434
13836
  },
13435
- "/sessions/search": {
13837
+ "/v1/sessions/search": {
13436
13838
  "get": {
13437
13839
  "description": "Search sessions over steps, recaps, and pull requests.\n\nGrouped by session, over everything a session left behind: step text, recap text, created\nPRs, and recap-embedding similarity.\n\nThis is how an agent answers \"did Tony look into X?\": resolve\nthe author via /github/members, search, then read the winning\nsession via /sessions/{id} (recap) and /sessions/{id}/records\n(transcript).",
13438
13840
  "operationId": "search_sessions",
@@ -13699,7 +14101,7 @@
13699
14101
  "x-ellipsis-sdk-method": "sessions.search"
13700
14102
  }
13701
14103
  },
13702
- "/sessions/sync": {
14104
+ "/v1/sessions/sync": {
13703
14105
  "post": {
13704
14106
  "description": "Sync a local Claude Code session to Ellipsis.\n\nRequires a user token (device-flow `agent login`): the user is\npart of the sync's idempotency key, so API keys and sandbox\ntokens are rejected with a 403 rather than silently attributed.",
13705
14107
  "operationId": "sync_agent_session",
@@ -13805,7 +14207,7 @@
13805
14207
  "x-ellipsis-sdk-method": "sessions.sync"
13806
14208
  }
13807
14209
  },
13808
- "/sessions/{session_id}": {
14210
+ "/v1/sessions/{session_id}": {
13809
14211
  "get": {
13810
14212
  "description": "Return one session.\n\nThe public wire shape \u2014 the same shape the stream's session\nframes carry, with attributed_user and stopped_by_user resolved\nat read time.\n\nThe heavy near-static blobs (config snapshot, input/output)\nlive on the detail endpoints, not here.",
13811
14213
  "operationId": "get_agent_session",
@@ -13900,7 +14302,7 @@
13900
14302
  "x-ellipsis-sdk-method": "sessions.get"
13901
14303
  }
13902
14304
  },
13903
- "/sessions/{session_id}/executions": {
14305
+ "/v1/sessions/{session_id}/executions": {
13904
14306
  "get": {
13905
14307
  "description": "Return the session's executions and launch context.\n\nMost notably system_prompt_append, the text Ellipsis appends to\nClaude Code's default system prompt (platform section + response\ninstructions + the config's own instructions).\n\nPer execution because each cold wake persists its own launch\nconfig (a config edit or replay override between wakes changes\nit).",
13906
14308
  "operationId": "get_agent_session_executions",
@@ -13995,7 +14397,7 @@
13995
14397
  "x-ellipsis-sdk-method": "sessions.executions"
13996
14398
  }
13997
14399
  },
13998
- "/sessions/{session_id}/export": {
14400
+ "/v1/sessions/{session_id}/export": {
13999
14401
  "get": {
14000
14402
  "description": "Export the complete session history.\n\nThe complete, ordered history of the session (agent output, tool calls, thinking,\nlifecycle events, sandbox output, message events) as an ordered\nmanifest of presigned segment URLs.\n\nSegments are gzip members: download in order and concatenate\nfor one file. The JSON API never carries the bytes (same\ntwo-step as files). /records is the paged live view of the\nsame data.",
14001
14403
  "operationId": "export_agent_session",
@@ -14090,112 +14492,7 @@
14090
14492
  "x-ellipsis-sdk-method": "sessions.export"
14091
14493
  }
14092
14494
  },
14093
- "/sessions/{session_id}/ide": {
14094
- "get": {
14095
- "description": "Return the IDE link for the session's sandbox.\n\nThe membership-gated dashboard page, which performs the sandbox\nproxy handoff itself.\n\nNo credential is minted here \u2014 the URL grants nothing by\npossession. 409 when the sandbox isn't running (send the\nsession a message to wake it first). Backs the `agent session\nide` CLI verb.",
14096
- "operationId": "get_agent_session_ide",
14097
- "parameters": [
14098
- {
14099
- "in": "path",
14100
- "name": "session_id",
14101
- "required": true,
14102
- "schema": {
14103
- "title": "Session Id",
14104
- "type": "string"
14105
- }
14106
- },
14107
- {
14108
- "in": "header",
14109
- "name": "user-agent",
14110
- "required": false,
14111
- "schema": {
14112
- "anyOf": [
14113
- {
14114
- "type": "string"
14115
- },
14116
- {
14117
- "type": "null"
14118
- }
14119
- ],
14120
- "title": "User-Agent"
14121
- }
14122
- }
14123
- ],
14124
- "responses": {
14125
- "200": {
14126
- "content": {
14127
- "application/json": {
14128
- "schema": {
14129
- "$ref": "#/components/schemas/GetSessionIdeResponse"
14130
- }
14131
- }
14132
- },
14133
- "description": "Successful Response"
14134
- },
14135
- "401": {
14136
- "content": {
14137
- "application/json": {
14138
- "schema": {
14139
- "$ref": "#/components/schemas/ErrorResponse"
14140
- }
14141
- }
14142
- },
14143
- "description": "The bearer token is missing, invalid, or revoked."
14144
- },
14145
- "403": {
14146
- "content": {
14147
- "application/json": {
14148
- "schema": {
14149
- "$ref": "#/components/schemas/ErrorResponse"
14150
- }
14151
- }
14152
- },
14153
- "description": "The credential may not perform this action, or the account is blocked."
14154
- },
14155
- "404": {
14156
- "content": {
14157
- "application/json": {
14158
- "schema": {
14159
- "$ref": "#/components/schemas/ErrorResponse"
14160
- }
14161
- }
14162
- },
14163
- "description": "No such session in your account."
14164
- },
14165
- "409": {
14166
- "content": {
14167
- "application/json": {
14168
- "schema": {
14169
- "$ref": "#/components/schemas/ErrorResponse"
14170
- }
14171
- }
14172
- },
14173
- "description": "The session's sandbox is not running; send it a message to wake it first."
14174
- },
14175
- "422": {
14176
- "content": {
14177
- "application/json": {
14178
- "schema": {
14179
- "$ref": "#/components/schemas/HTTPValidationError"
14180
- }
14181
- }
14182
- },
14183
- "description": "Validation Error"
14184
- }
14185
- },
14186
- "security": [
14187
- {
14188
- "HTTPBearer": []
14189
- }
14190
- ],
14191
- "summary": "Get Agent Session Ide",
14192
- "tags": [
14193
- "v1"
14194
- ],
14195
- "x-ellipsis-sdk-method": "sessions.ide"
14196
- }
14197
- },
14198
- "/sessions/{session_id}/messages": {
14495
+ "/v1/sessions/{session_id}/messages": {
14199
14496
  "post": {
14200
14497
  "description": "Send a message to a session.\n\n409 for react/cron, non-interactive, and closed sessions.\nReturns the created message so the caller can track it by id; a\nretried send with the same idempotency_key returns the original\nmessage.",
14201
14498
  "operationId": "send_agent_session_message",
@@ -14320,9 +14617,9 @@
14320
14617
  "x-ellipsis-sdk-method": "sessions.send_message"
14321
14618
  }
14322
14619
  },
14323
- "/sessions/{session_id}/output": {
14620
+ "/v1/sessions/{session_id}/output": {
14324
14621
  "get": {
14325
- "description": "Return the session's typed output.\n\nThe payload the agent submitted through its config-declared\noutput.json_schema, as the raw JSON body with no envelope. 404\nwhile the session is still running (poll GET /sessions/{id}),\nwhen the agent declares no output block, or when no execution\nproduced output.",
14622
+ "description": "Return the session's typed output.\n\nThe payload the agent submitted through its config-declared\noutput.json_schema, as the raw JSON body with no envelope. 404\nwhile the session is still running (poll GET /v1/sessions/{id}),\nwhen the agent declares no output block, or when no execution\nproduced output.",
14326
14623
  "operationId": "get_agent_session_output",
14327
14624
  "parameters": [
14328
14625
  {
@@ -14415,121 +14712,7 @@
14415
14712
  "x-ellipsis-sdk-method": "sessions.output"
14416
14713
  }
14417
14714
  },
14418
- "/sessions/{session_id}/ports/{port}": {
14419
- "get": {
14420
- "description": "Return a preview link for a sandbox port.\n\nFor a dev server running in the session's live sandbox: the\nsame dashboard page as the IDE, deep-linked to the port.\n\nBacks `agent session port`.",
14421
- "operationId": "get_agent_session_port",
14422
- "parameters": [
14423
- {
14424
- "in": "path",
14425
- "name": "session_id",
14426
- "required": true,
14427
- "schema": {
14428
- "title": "Session Id",
14429
- "type": "string"
14430
- }
14431
- },
14432
- {
14433
- "in": "path",
14434
- "name": "port",
14435
- "required": true,
14436
- "schema": {
14437
- "title": "Port",
14438
- "type": "integer"
14439
- }
14440
- },
14441
- {
14442
- "in": "header",
14443
- "name": "user-agent",
14444
- "required": false,
14445
- "schema": {
14446
- "anyOf": [
14447
- {
14448
- "type": "string"
14449
- },
14450
- {
14451
- "type": "null"
14452
- }
14453
- ],
14454
- "title": "User-Agent"
14455
- }
14456
- }
14457
- ],
14458
- "responses": {
14459
- "200": {
14460
- "content": {
14461
- "application/json": {
14462
- "schema": {
14463
- "$ref": "#/components/schemas/GetSessionPortResponse"
14464
- }
14465
- }
14466
- },
14467
- "description": "Successful Response"
14468
- },
14469
- "401": {
14470
- "content": {
14471
- "application/json": {
14472
- "schema": {
14473
- "$ref": "#/components/schemas/ErrorResponse"
14474
- }
14475
- }
14476
- },
14477
- "description": "The bearer token is missing, invalid, or revoked."
14478
- },
14479
- "403": {
14480
- "content": {
14481
- "application/json": {
14482
- "schema": {
14483
- "$ref": "#/components/schemas/ErrorResponse"
14484
- }
14485
- }
14486
- },
14487
- "description": "The credential may not perform this action, or the account is blocked."
14488
- },
14489
- "404": {
14490
- "content": {
14491
- "application/json": {
14492
- "schema": {
14493
- "$ref": "#/components/schemas/ErrorResponse"
14494
- }
14495
- }
14496
- },
14497
- "description": "No such session in your account, or the port is not a valid TCP port."
14498
- },
14499
- "409": {
14500
- "content": {
14501
- "application/json": {
14502
- "schema": {
14503
- "$ref": "#/components/schemas/ErrorResponse"
14504
- }
14505
- }
14506
- },
14507
- "description": "The session's sandbox is not running; send it a message to wake it first."
14508
- },
14509
- "422": {
14510
- "content": {
14511
- "application/json": {
14512
- "schema": {
14513
- "$ref": "#/components/schemas/HTTPValidationError"
14514
- }
14515
- }
14516
- },
14517
- "description": "Validation Error"
14518
- }
14519
- },
14520
- "security": [
14521
- {
14522
- "HTTPBearer": []
14523
- }
14524
- ],
14525
- "summary": "Get Agent Session Port",
14526
- "tags": [
14527
- "v1"
14528
- ],
14529
- "x-ellipsis-sdk-method": "sessions.port"
14530
- }
14531
- },
14532
- "/sessions/{session_id}/records": {
14715
+ "/v1/sessions/{session_id}/records": {
14533
14716
  "get": {
14534
14717
  "description": "Return the session's stored transcript records, oldest first.\n\nPagination is opt-in (cursor/limit); a bare call returns the\nfull retained transcript. Available to sandbox tokens too: an\nagent answering \"did X look into Y?\" needs to read the session\nit found via /sessions/search, and any org member sees the same\ntranscript in the dashboard (laptop transcripts are redacted\nclient-side before they are ever uploaded).",
14535
14718
  "operationId": "get_agent_session_records",
@@ -14658,7 +14841,7 @@
14658
14841
  "x-ellipsis-sdk-method": "sessions.records"
14659
14842
  }
14660
14843
  },
14661
- "/sessions/{session_id}/replay": {
14844
+ "/v1/sessions/{session_id}/replay": {
14662
14845
  "post": {
14663
14846
  "description": "Replay a session as a new session.\n\nReuses the original config snapshot unless config_id is given,\nand accepts the same config_override as session start \u2014 e.g.\n{\"claude\": {\"model\": ...}} to replay the same input on a\ndifferent model.",
14664
14847
  "operationId": "replay_agent_session",
@@ -14773,7 +14956,7 @@
14773
14956
  "x-ellipsis-sdk-method": "sessions.replay"
14774
14957
  }
14775
14958
  },
14776
- "/sessions/{session_id}/stop": {
14959
+ "/v1/sessions/{session_id}/stop": {
14777
14960
  "post": {
14778
14961
  "description": "Stop an in-flight session and return it.\n\nstopped_by is recorded only when the caller's credential maps\nto a GitHub account.",
14779
14962
  "operationId": "stop_agent_session",
@@ -14888,7 +15071,7 @@
14888
15071
  "x-ellipsis-sdk-method": "sessions.stop"
14889
15072
  }
14890
15073
  },
14891
- "/sessions/{session_id}/transcript": {
15074
+ "/v1/sessions/{session_id}/transcript": {
14892
15075
  "post": {
14893
15076
  "description": "Append transcript lines to a session's record.\n\nThe in-sandbox tailer for interactive sessions.\n\nA sandbox token may only push its own session's transcript.\nIdempotent by transcript line uuid; tolerant of malformed lines.",
14894
15077
  "operationId": "ingest_agent_session_transcript",
@@ -15003,7 +15186,7 @@
15003
15186
  "x-ellipsis-sdk-method": "sessions.ingest_transcript"
15004
15187
  }
15005
15188
  },
15006
- "/usage": {
15189
+ "/v1/usage": {
15007
15190
  "get": {
15008
15191
  "description": "Return the caller's usage dashboard data.",
15009
15192
  "operationId": "get_usage_endpoint",