chore: 🐝 Update SDK - Generate (spec change merged) 0.11.2 (#388)

Co-authored-by: speakeasybot <bot@speakeasyapi.dev>
Co-authored-by: speakeasy-github[bot] <128539517+speakeasy-github[bot]@users.noreply.github.com>
This commit is contained in:
github-actions[bot]
2026-07-03 15:09:37 +00:00
committed by GitHub
co-authored by speakeasybot speakeasy-github[bot] <128539517+speakeasy-github[bot]@users.noreply.github.com>
parent f6c5471023
commit c2ae7dfde4
18 changed files with 898 additions and 30 deletions
+61 -19
View File
@@ -1,19 +1,19 @@
lockVersion: 2.0.0 lockVersion: 2.0.0
id: c48cf606-fb42-4a45-9c23-8f0555307828 id: c48cf606-fb42-4a45-9c23-8f0555307828
management: management:
docChecksum: 31a453ec8245c65098405a9010d2ff54 docChecksum: 22dd2a8c52c82b2e6d45813b3a136d8e
docVersion: 1.0.0 docVersion: 1.0.0
speakeasyVersion: 1.787.0 speakeasyVersion: 1.787.0
generationVersion: 2.914.0 generationVersion: 2.914.0
releaseVersion: 0.11.1 releaseVersion: 0.11.2
configChecksum: 85e803126e799123b660fa86fbd0594f configChecksum: d99c6e3ad8d65139a1705b2482f5b0f6
repoURL: https://github.com/OpenRouterTeam/python-sdk.git repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true published: true
persistentEdits: persistentEdits:
generation_id: 2fd172e4-2ed7-47d2-959b-76faccc0db40 generation_id: 17428005-f3ed-41ee-832f-a08e2ee4b2c9
pristine_commit_hash: 770c36dfd9d9611977f1d4f1b874b911010e7f2b pristine_commit_hash: c52584d3b29fe1ab0cd11c36fc0519e7988910d6
pristine_tree_hash: 752195cbe1fa7f997c727815c9f9ea4da62ac759 pristine_tree_hash: 35802e82c88cd41747250883f8acad806745fe0e
features: features:
python: python:
acceptHeaders: 3.0.0 acceptHeaders: 3.0.0
@@ -2508,6 +2508,10 @@ trackedFiles:
id: be60b3aa222d id: be60b3aa222d
last_write_checksum: sha1:5e5e015f7957686bce403d8f176e4f7f9eba9b47 last_write_checksum: sha1:5e5e015f7957686bce403d8f176e4f7f9eba9b47
pristine_git_object: 27bb746a556432a1d423634c0d2f55e384de7859 pristine_git_object: 27bb746a556432a1d423634c0d2f55e384de7859
docs/components/listworkspacemembersresponse.mdx:
id: 1b8dff85b565
last_write_checksum: sha1:3577f9efc0094f785f0413e6eacc729267e204fc
pristine_git_object: 90edcaf6b5451904212adc4202422f5808d2194f
docs/components/listworkspacesresponse.mdx: docs/components/listworkspacesresponse.mdx:
id: cddf2b6dd8bf id: cddf2b6dd8bf
last_write_checksum: sha1:e5f4cc01853d9fa8feb77140d976d64ebe5b1d45 last_write_checksum: sha1:e5f4cc01853d9fa8feb77140d976d64ebe5b1d45
@@ -6016,6 +6020,18 @@ trackedFiles:
id: fbaf80b58271 id: fbaf80b58271
last_write_checksum: sha1:b9166455ca5f9dfbb1d692547ef54158685ece80 last_write_checksum: sha1:b9166455ca5f9dfbb1d692547ef54158685ece80
pristine_git_object: f6101881f6a54e2b999a60c6c607b2e7bcf103dc pristine_git_object: f6101881f6a54e2b999a60c6c607b2e7bcf103dc
docs/operations/listworkspacemembersglobals.mdx:
id: 0b0ec6b14941
last_write_checksum: sha1:ed137f5daaa24ffda73b29d91830b62782c75f46
pristine_git_object: c8f845c5520b7d515548724e90034eec4e2989f5
docs/operations/listworkspacemembersrequest.mdx:
id: 094a5435a3a6
last_write_checksum: sha1:655363c94d19fee214f5ca0283f5f8e4c2c10ddd
pristine_git_object: fe553b32e8a2e665d7f60820017710b9d1d1e759
docs/operations/listworkspacemembersresponse.mdx:
id: 1ea6e450f1db
last_write_checksum: sha1:69a0763e6d3816274d51b825514ec38b637a0312
pristine_git_object: 94558019b67d816d9deb6acc7508d3f9ab4419aa
docs/operations/listworkspacesglobals.mdx: docs/operations/listworkspacesglobals.mdx:
id: 796f26dced99 id: 796f26dced99
last_write_checksum: sha1:900a20b914fa6bf043585f1e0de3692510bab04e last_write_checksum: sha1:900a20b914fa6bf043585f1e0de3692510bab04e
@@ -6346,16 +6362,16 @@ trackedFiles:
pristine_git_object: 429ca7dad6a66516aec6bb1e674af1e09dc42dd5 pristine_git_object: 429ca7dad6a66516aec6bb1e674af1e09dc42dd5
docs/sdks/workspaces/README.mdx: docs/sdks/workspaces/README.mdx:
id: 0c75d023ef6b id: 0c75d023ef6b
last_write_checksum: sha1:b3552fadeab957d102333c3ba7d69f7c6bae267e last_write_checksum: sha1:29a4f4699004ed16b9c980463a649576b30fe035
pristine_git_object: cf4cc041104ab0bffd6a0c8276068616e104819c pristine_git_object: 37f2346cb81f6c7712df90b676b5084808b609b5
py.typed: py.typed:
id: 258c3ed47ae4 id: 258c3ed47ae4
last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60 last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml: pyproject.toml:
id: 5d07e7d72637 id: 5d07e7d72637
last_write_checksum: sha1:315748f12aad769a99d497d7f7b72b1bfd6d79ab last_write_checksum: sha1:e2bc1b3fccb2ccdf85aa79e5886a52f91340150a
pristine_git_object: 60601548fd081896f4b477f701e887facde0de63 pristine_git_object: e0deb3eae39559a8ab667ff46b01c4a505abd7db
scripts/prepare_readme.py: scripts/prepare_readme.py:
id: e0c5957a6035 id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54 last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -6382,8 +6398,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137 pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py: src/openrouter/_version.py:
id: d8d15ad6c586 id: d8d15ad6c586
last_write_checksum: sha1:c775f28ffba30ec6110b067674d42628dfe28b1e last_write_checksum: sha1:0d2f123171a2b90c45806c351b029f722c836270
pristine_git_object: 30f0645017b376be4851dddedda35fdbcd70fb48 pristine_git_object: 065e7c6105281025b6c465f401c6bf6c03966342
src/openrouter/analytics.py: src/openrouter/analytics.py:
id: cb406b5aaabb id: cb406b5aaabb
last_write_checksum: sha1:9e709b71dd0611056dc0cec6150b578defe32841 last_write_checksum: sha1:9e709b71dd0611056dc0cec6150b578defe32841
@@ -6422,8 +6438,8 @@ trackedFiles:
pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1 pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1
src/openrouter/components/__init__.py: src/openrouter/components/__init__.py:
id: 81754e97b3f4 id: 81754e97b3f4
last_write_checksum: sha1:f1a79345c2156a1e659b55a506babccbdd392463 last_write_checksum: sha1:3d56cadcea54efec319a1d282eeae4c5b387d1e5
pristine_git_object: c0bbbca94f36baba1ca34b27a0827a97cf47ed00 pristine_git_object: 19c69fe69c979eccea5ec82ed501dda6fc391d3a
src/openrouter/components/aabenchmarkentry.py: src/openrouter/components/aabenchmarkentry.py:
id: e2e0f0b48c82 id: e2e0f0b48c82
last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c
@@ -7524,6 +7540,10 @@ trackedFiles:
id: 64fa8723acb0 id: 64fa8723acb0
last_write_checksum: sha1:2546a0136f06ab451e7df5d1af7d32029e5f4719 last_write_checksum: sha1:2546a0136f06ab451e7df5d1af7d32029e5f4719
pristine_git_object: df7bc125a2e1135e8e83f6032810d879d06934f7 pristine_git_object: df7bc125a2e1135e8e83f6032810d879d06934f7
src/openrouter/components/listworkspacemembersresponse.py:
id: cfe46d91c277
last_write_checksum: sha1:f5d86b2ad810be375324b6cd281c4f41f6864419
pristine_git_object: 911823770e39cfeb2d632eaa0796a4de58c26147
src/openrouter/components/listworkspacesresponse.py: src/openrouter/components/listworkspacesresponse.py:
id: 0c5f98eddbf5 id: 0c5f98eddbf5
last_write_checksum: sha1:53b10630a44ccc43fa86a34e9a3f5a64f08488c4 last_write_checksum: sha1:53b10630a44ccc43fa86a34e9a3f5a64f08488c4
@@ -8694,8 +8714,8 @@ trackedFiles:
pristine_git_object: a1dea9b45650cc42a6f60447c032fa46b102839a pristine_git_object: a1dea9b45650cc42a6f60447c032fa46b102839a
src/openrouter/operations/__init__.py: src/openrouter/operations/__init__.py:
id: 9afcea1e7161 id: 9afcea1e7161
last_write_checksum: sha1:a652e6a05b4685dff3a016965467f2b90b862c05 last_write_checksum: sha1:58c06e81675a137ec84b13517f78cf1020874f2d
pristine_git_object: a79839770301dc301204149ff14f7f8945122b0c pristine_git_object: fc51690a99a6041a78762af05e43da30f15875da
src/openrouter/operations/bulkaddworkspacemembers.py: src/openrouter/operations/bulkaddworkspacemembers.py:
id: e0ed56117619 id: e0ed56117619
last_write_checksum: sha1:5c44eb0d40fdece3ac084615f6c6082be4cf1d5a last_write_checksum: sha1:5c44eb0d40fdece3ac084615f6c6082be4cf1d5a
@@ -8996,6 +9016,10 @@ trackedFiles:
id: 1310fb7e01a9 id: 1310fb7e01a9
last_write_checksum: sha1:83b3e498943e3c5a239e2c50e9d417b1f5d227fb last_write_checksum: sha1:83b3e498943e3c5a239e2c50e9d417b1f5d227fb
pristine_git_object: a65454da5ec6727d99312d56c64324edd8615685 pristine_git_object: a65454da5ec6727d99312d56c64324edd8615685
src/openrouter/operations/listworkspacemembers.py:
id: 9886d508d283
last_write_checksum: sha1:c83463410e0899b9f5b686e2155f69340c7acff7
pristine_git_object: 9a8706fcb1a1761c4e636dba74866e239e8d51a3
src/openrouter/operations/listworkspaces.py: src/openrouter/operations/listworkspaces.py:
id: fe94c6f61835 id: fe94c6f61835
last_write_checksum: sha1:2458a0c8d4834fa046496a68620b66c5ba55d927 last_write_checksum: sha1:2458a0c8d4834fa046496a68620b66c5ba55d927
@@ -9170,8 +9194,8 @@ trackedFiles:
pristine_git_object: 4a82cde858211c0f5a01b08980cee0e9e3d0f52c pristine_git_object: 4a82cde858211c0f5a01b08980cee0e9e3d0f52c
src/openrouter/workspaces.py: src/openrouter/workspaces.py:
id: cd6c533b1802 id: cd6c533b1802
last_write_checksum: sha1:545a54d7d445ecb42e24c9b137362747e9d90651 last_write_checksum: sha1:cde38a8140d790751ffd6bb013a4c702c112aa6f
pristine_git_object: d22a8e667cb3f29570234bc057261a9082d69ee5 pristine_git_object: f3cf390c8f027710aaf32e794fa5229f0447b991
examples: examples:
createResponses: createResponses:
speakeasy-default-create-responses: speakeasy-default-create-responses:
@@ -10599,5 +10623,23 @@ examples:
application/json: {"error": {"code": 404, "message": "Resource not found"}} application/json: {"error": {"code": 404, "message": "Resource not found"}}
"500": "500":
application/json: {"error": {"code": 500, "message": "Internal Server Error"}} application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
listWorkspaceMembers:
speakeasy-default-list-workspace-members:
parameters:
path:
id: "production"
responses:
"200":
application/json: {"data": [{"created_at": "2025-08-24T10:30:00Z", "id": "660e8400-e29b-41d4-a716-446655440000", "role": "member", "user_id": "user_abc123", "workspace_id": "550e8400-e29b-41d4-a716-446655440000"}], "total_count": 1}
"401":
application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
"403":
application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}}
"404":
application/json: {"error": {"code": 404, "message": "Resource not found"}}
"500":
application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
examplesVersion: 1.0.2 examplesVersion: 1.0.2
releaseNotes: "## Python SDK Changes:\n* `open_router.beta.responses.send()`: \n * `request.tools[].union(openrouter:files)` **Added**\n* `open_router.chat.send()`: \n * `request.tools[].union(FilesServerTool)` **Added**\n* `open_router.presets.create_presets_chat_completions()`: \n * `request.tools[].union(FilesServerTool)` **Added**\n* `open_router.presets.create_presets_responses()`: \n * `request.tools[].union(openrouter:files)` **Added**\n" releaseNotes: |
## Python SDK Changes:
* `open_router.workspaces.list_members()`: **Added**
+1 -1
View File
@@ -36,7 +36,7 @@ generation:
documentation: mintlify documentation: mintlify
preApplyUnionDiscriminators: true preApplyUnionDiscriminators: true
python: python:
version: 0.11.1 version: 0.11.2
additionalDependencies: additionalDependencies:
dev: {} dev: {}
main: {} main: {}
+132
View File
@@ -10872,6 +10872,29 @@ components:
required: required:
- data - data
type: object type: object
ListWorkspaceMembersResponse:
example:
data:
- created_at: '2025-08-24T10:30:00Z'
id: 660e8400-e29b-41d4-a716-446655440000
role: member
user_id: user_abc123
workspace_id: 550e8400-e29b-41d4-a716-446655440000
total_count: 1
properties:
data:
description: List of workspace members
items:
$ref: '#/components/schemas/WorkspaceMember'
type: array
total_count:
description: Total number of members in the workspace
example: 5
type: integer
required:
- data
- total_count
type: object
ListWorkspacesResponse: ListWorkspacesResponse:
example: example:
data: data:
@@ -33907,6 +33930,115 @@ paths:
- $ref: "#/components/parameters/AppIdentifier" - $ref: "#/components/parameters/AppIdentifier"
- $ref: "#/components/parameters/AppDisplayName" - $ref: "#/components/parameters/AppDisplayName"
- $ref: "#/components/parameters/AppCategories" - $ref: "#/components/parameters/AppCategories"
/workspaces/{id}/members:
get:
description: >-
List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
operationId: listWorkspaceMembers
parameters:
- description: The workspace ID (UUID) or slug
in: path
name: id
required: true
schema:
description: The workspace ID (UUID) or slug
example: production
minLength: 1
type: string
- description: Number of records to skip for pagination
in: query
name: offset
required: false
schema:
description: Number of records to skip for pagination
example: 0
minimum: 0
nullable: false
type: integer
- description: Maximum number of records to return (max 100)
in: query
name: limit
required: false
schema:
description: Maximum number of records to return (max 100)
example: 50
maximum: 100
minimum: 1
type: integer
responses:
'200':
content:
application/json:
example:
data:
- created_at: '2025-08-24T10:30:00Z'
id: 660e8400-e29b-41d4-a716-446655440000
role: member
user_id: user_abc123
workspace_id: 550e8400-e29b-41d4-a716-446655440000
total_count: 1
schema:
$ref: '#/components/schemas/ListWorkspaceMembersResponse'
description: List of workspace members
'401':
content:
application/json:
example:
error:
code: 401
message: Missing Authentication header
schema:
$ref: '#/components/schemas/UnauthorizedResponse'
description: Unauthorized - Authentication required or invalid credentials
'403':
content:
application/json:
example:
error:
code: 403
message: Only management keys can perform this operation
schema:
$ref: '#/components/schemas/ForbiddenResponse'
description: Forbidden - Authentication successful but insufficient permissions
'404':
content:
application/json:
example:
error:
code: 404
message: Resource not found
schema:
$ref: '#/components/schemas/NotFoundResponse'
description: Not Found - Resource does not exist
'500':
content:
application/json:
example:
error:
code: 500
message: Internal Server Error
schema:
$ref: '#/components/schemas/InternalServerResponse'
description: Internal Server Error - Unexpected server error
summary: List workspace members
tags:
- Workspaces
x-speakeasy-name-override: listMembers
x-speakeasy-pagination:
inputs:
- in: parameters
name: offset
type: offset
- in: parameters
name: limit
type: limit
outputs:
results: $.data
type: offsetLimit
parameters:
- $ref: "#/components/parameters/AppIdentifier"
- $ref: "#/components/parameters/AppDisplayName"
- $ref: "#/components/parameters/AppCategories"
/workspaces/{id}/members/add: /workspaces/{id}/members/add:
post: post:
description: >- description: >-
+5 -5
View File
@@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0
sources: sources:
OpenRouter API: OpenRouter API:
sourceNamespace: open-router-chat-completions-api sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:f55ad0f499156d20c6b57efb38c3ae9ed94c860e434405e7d52338e61eb6f79c sourceRevisionDigest: sha256:5f1370b2087005edf5335d559553a8e78a7f68548feeb5007ffd159eb331d4b8
sourceBlobDigest: sha256:90e75fce2c45d81d02e9eaeb0a1be6e2d4a214ac796334b5680996b911d4e9c5 sourceBlobDigest: sha256:ccab13156b379a7393d475a3dffeede1ab1e849f77860609a73af1ce7a3839e4
tags: tags:
- latest - latest
- 1.0.0 - 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router: open-router:
source: OpenRouter API source: OpenRouter API
sourceNamespace: open-router-chat-completions-api sourceNamespace: open-router-chat-completions-api
sourceRevisionDigest: sha256:f55ad0f499156d20c6b57efb38c3ae9ed94c860e434405e7d52338e61eb6f79c sourceRevisionDigest: sha256:5f1370b2087005edf5335d559553a8e78a7f68548feeb5007ffd159eb331d4b8
sourceBlobDigest: sha256:90e75fce2c45d81d02e9eaeb0a1be6e2d4a214ac796334b5680996b911d4e9c5 sourceBlobDigest: sha256:ccab13156b379a7393d475a3dffeede1ab1e849f77860609a73af1ce7a3839e4
codeSamplesNamespace: open-router-python-code-samples codeSamplesNamespace: open-router-python-code-samples
codeSamplesRevisionDigest: sha256:32b3050b10d3e0f8cbe39300fb98b5c0e1ee9b07ff7c1c4bcef85045d844b33c codeSamplesRevisionDigest: sha256:68f0535d2a29eafd4da54cc0f2ebb260b678afae6f4a752f76cad957fb319df2
workflow: workflow:
workflowVersion: 1.0.0 workflowVersion: 1.0.0
speakeasyVersion: 1.787.0 speakeasyVersion: 1.787.0
+11 -1
View File
@@ -118,4 +118,14 @@ Based on:
### Generated ### Generated
- [python v0.11.1] . - [python v0.11.1] .
### Releases ### Releases
- [PyPI v0.11.1] https://pypi.org/project/openrouter/0.11.1 - . - [PyPI v0.11.1] https://pypi.org/project/openrouter/0.11.1 - .
## 2026-07-03 15:05:16
### Changes
Based on:
- OpenAPI Doc
- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
### Generated
- [python v0.11.2] .
### Releases
- [PyPI v0.11.2] https://pypi.org/project/openrouter/0.11.2 - .
@@ -0,0 +1,10 @@
---
title: "ListWorkspaceMembersResponse"
---
## Fields
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
| `data` | List[[components.WorkspaceMember](../components/workspacemember.mdx)] | :heavy_check_mark: | List of workspace members | |
| `total_count` | *int* | :heavy_check_mark: | Total number of members in the workspace | 5 |
@@ -0,0 +1,11 @@
---
title: "ListWorkspaceMembersGlobals"
---
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> |
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> |
@@ -0,0 +1,14 @@
---
title: "ListWorkspaceMembersRequest"
---
## Fields
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
@@ -0,0 +1,9 @@
---
title: "ListWorkspaceMembersResponse"
---
## Fields
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `result` | [components.ListWorkspaceMembersResponse](../components/listworkspacemembersresponse.mdx) | :heavy_check_mark: | N/A | \{<br/>"data": [<br/>\{<br/>"created_at": "2025-08-24T10:30:00Z",<br/>"id": "660e8400-e29b-41d4-a716-446655440000",<br/>"role": "member",<br/>"user_id": "user_abc123",<br/>"workspace_id": "550e8400-e29b-41d4-a716-446655440000"<br/>}<br/>],<br/>"total_count": 1<br/>} |
+54
View File
@@ -17,6 +17,7 @@ Workspaces endpoints
* [list_budgets](#list_budgets) - List workspace budgets * [list_budgets](#list_budgets) - List workspace budgets
* [delete_budget](#delete_budget) - Delete a workspace budget * [delete_budget](#delete_budget) - Delete a workspace budget
* [set_budget](#set_budget) - Create or update a workspace budget * [set_budget](#set_budget) - Create or update a workspace budget
* [list_members](#list_members) - List workspace members
* [bulk_add_members](#bulk_add_members) - Bulk add members to a workspace * [bulk_add_members](#bulk_add_members) - Bulk add members to a workspace
* [bulk_remove_members](#bulk_remove_members) - Bulk remove members from a workspace * [bulk_remove_members](#bulk_remove_members) - Bulk remove members from a workspace
@@ -436,6 +437,59 @@ with OpenRouter(
| errors.InternalServerResponseError | 500 | application/json | | errors.InternalServerResponseError | 500 | application/json |
| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* | | errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
## list_members
List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
### Example Usage
```python
from openrouter import OpenRouter
import os
with OpenRouter(
http_referer="<value>",
x_open_router_title="<value>",
x_open_router_categories="<value>",
api_key=os.getenv("OPENROUTER_API_KEY", ""),
) as open_router:
res = open_router.workspaces.list_members(id="production")
while res is not None:
# Handle items
res = res.next()
```
### Parameters
| Parameter | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.<br/>This is used to track API usage per application.<br/> | |
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.<br/> | |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.<br/> | |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
**[operations.ListWorkspaceMembersResponse](../../operations/listworkspacemembersresponse.mdx)**
### Errors
| Error Type | Status Code | Content Type |
| ---------------------------------- | ---------------------------------- | ---------------------------------- |
| errors.UnauthorizedResponseError | 401 | application/json |
| errors.ForbiddenResponseError | 403 | application/json |
| errors.NotFoundResponseError | 404 | application/json |
| errors.InternalServerResponseError | 500 | application/json |
| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
## bulk_add_members ## bulk_add_members
Add multiple organization members to a workspace. Members are assigned the same role they hold in the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required. Add multiple organization members to a workspace. Members are assigned the same role they hold in the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "openrouter" name = "openrouter"
version = "0.11.1" version = "0.11.2"
description = "Official Python Client SDK for OpenRouter." description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },] authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md" readme = "README-PYPI.md"
+2 -2
View File
@@ -3,10 +3,10 @@
import importlib.metadata import importlib.metadata
__title__: str = "openrouter" __title__: str = "openrouter"
__version__: str = "0.11.1" __version__: str = "0.11.2"
__openapi_doc_version__: str = "1.0.0" __openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.914.0" __gen_version__: str = "2.914.0"
__user_agent__: str = "speakeasy-sdk/python 0.11.1 2.914.0 1.0.0 openrouter" __user_agent__: str = "speakeasy-sdk/python 0.11.2 2.914.0 1.0.0 openrouter"
try: try:
if __package__ is not None: if __package__ is not None:
+8
View File
@@ -1330,6 +1330,10 @@ if TYPE_CHECKING:
ListWorkspaceBudgetsResponse, ListWorkspaceBudgetsResponse,
ListWorkspaceBudgetsResponseTypedDict, ListWorkspaceBudgetsResponseTypedDict,
) )
from .listworkspacemembersresponse import (
ListWorkspaceMembersResponse,
ListWorkspaceMembersResponseTypedDict,
)
from .listworkspacesresponse import ( from .listworkspacesresponse import (
ListWorkspacesResponse, ListWorkspacesResponse,
ListWorkspacesResponseTypedDict, ListWorkspacesResponseTypedDict,
@@ -3686,6 +3690,8 @@ __all__ = [
"ListPresetsResponseTypedDict", "ListPresetsResponseTypedDict",
"ListWorkspaceBudgetsResponse", "ListWorkspaceBudgetsResponse",
"ListWorkspaceBudgetsResponseTypedDict", "ListWorkspaceBudgetsResponseTypedDict",
"ListWorkspaceMembersResponse",
"ListWorkspaceMembersResponseTypedDict",
"ListWorkspacesResponse", "ListWorkspacesResponse",
"ListWorkspacesResponseTypedDict", "ListWorkspacesResponseTypedDict",
"LocalShellCallItem", "LocalShellCallItem",
@@ -5651,6 +5657,8 @@ _dynamic_imports: dict[str, str] = {
"ListPresetVersionsResponseTypedDict": ".listpresetversionsresponse", "ListPresetVersionsResponseTypedDict": ".listpresetversionsresponse",
"ListWorkspaceBudgetsResponse": ".listworkspacebudgetsresponse", "ListWorkspaceBudgetsResponse": ".listworkspacebudgetsresponse",
"ListWorkspaceBudgetsResponseTypedDict": ".listworkspacebudgetsresponse", "ListWorkspaceBudgetsResponseTypedDict": ".listworkspacebudgetsresponse",
"ListWorkspaceMembersResponse": ".listworkspacemembersresponse",
"ListWorkspaceMembersResponseTypedDict": ".listworkspacemembersresponse",
"ListWorkspacesResponse": ".listworkspacesresponse", "ListWorkspacesResponse": ".listworkspacesresponse",
"ListWorkspacesResponseTypedDict": ".listworkspacesresponse", "ListWorkspacesResponseTypedDict": ".listworkspacesresponse",
"LocalShellCallItem": ".localshellcallitem", "LocalShellCallItem": ".localshellcallitem",
@@ -0,0 +1,22 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from .workspacemember import WorkspaceMember, WorkspaceMemberTypedDict
from openrouter.types import BaseModel
from typing import List
from typing_extensions import TypedDict
class ListWorkspaceMembersResponseTypedDict(TypedDict):
data: List[WorkspaceMemberTypedDict]
r"""List of workspace members"""
total_count: int
r"""Total number of members in the workspace"""
class ListWorkspaceMembersResponse(BaseModel):
data: List[WorkspaceMember]
r"""List of workspace members"""
total_count: int
r"""Total number of members in the workspace"""
+20
View File
@@ -618,6 +618,14 @@ if TYPE_CHECKING:
ListWorkspaceBudgetsRequest, ListWorkspaceBudgetsRequest,
ListWorkspaceBudgetsRequestTypedDict, ListWorkspaceBudgetsRequestTypedDict,
) )
from .listworkspacemembers import (
ListWorkspaceMembersGlobals,
ListWorkspaceMembersGlobalsTypedDict,
ListWorkspaceMembersRequest,
ListWorkspaceMembersRequestTypedDict,
ListWorkspaceMembersResponse,
ListWorkspaceMembersResponseTypedDict,
)
from .listworkspaces import ( from .listworkspaces import (
ListWorkspacesGlobals, ListWorkspacesGlobals,
ListWorkspacesGlobalsTypedDict, ListWorkspacesGlobalsTypedDict,
@@ -1159,6 +1167,12 @@ __all__ = [
"ListWorkspaceBudgetsGlobalsTypedDict", "ListWorkspaceBudgetsGlobalsTypedDict",
"ListWorkspaceBudgetsRequest", "ListWorkspaceBudgetsRequest",
"ListWorkspaceBudgetsRequestTypedDict", "ListWorkspaceBudgetsRequestTypedDict",
"ListWorkspaceMembersGlobals",
"ListWorkspaceMembersGlobalsTypedDict",
"ListWorkspaceMembersRequest",
"ListWorkspaceMembersRequestTypedDict",
"ListWorkspaceMembersResponse",
"ListWorkspaceMembersResponseTypedDict",
"ListWorkspacesGlobals", "ListWorkspacesGlobals",
"ListWorkspacesGlobalsTypedDict", "ListWorkspacesGlobalsTypedDict",
"ListWorkspacesRequest", "ListWorkspacesRequest",
@@ -1721,6 +1735,12 @@ _dynamic_imports: dict[str, str] = {
"ListWorkspaceBudgetsGlobalsTypedDict": ".listworkspacebudgets", "ListWorkspaceBudgetsGlobalsTypedDict": ".listworkspacebudgets",
"ListWorkspaceBudgetsRequest": ".listworkspacebudgets", "ListWorkspaceBudgetsRequest": ".listworkspacebudgets",
"ListWorkspaceBudgetsRequestTypedDict": ".listworkspacebudgets", "ListWorkspaceBudgetsRequestTypedDict": ".listworkspacebudgets",
"ListWorkspaceMembersGlobals": ".listworkspacemembers",
"ListWorkspaceMembersGlobalsTypedDict": ".listworkspacemembers",
"ListWorkspaceMembersRequest": ".listworkspacemembers",
"ListWorkspaceMembersRequestTypedDict": ".listworkspacemembers",
"ListWorkspaceMembersResponse": ".listworkspacemembers",
"ListWorkspaceMembersResponseTypedDict": ".listworkspacemembers",
"ListWorkspacesGlobals": ".listworkspaces", "ListWorkspacesGlobals": ".listworkspaces",
"ListWorkspacesGlobalsTypedDict": ".listworkspaces", "ListWorkspacesGlobalsTypedDict": ".listworkspaces",
"ListWorkspacesRequest": ".listworkspaces", "ListWorkspacesRequest": ".listworkspaces",
@@ -0,0 +1,189 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
from openrouter.components import (
listworkspacemembersresponse as components_listworkspacemembersresponse,
)
from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
PathParamMetadata,
QueryParamMetadata,
)
import pydantic
from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
class ListWorkspaceMembersGlobalsTypedDict(TypedDict):
http_referer: NotRequired[str]
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_open_router_title: NotRequired[str]
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
x_open_router_categories: NotRequired[str]
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
class ListWorkspaceMembersGlobals(BaseModel):
http_referer: Annotated[
Optional[str],
pydantic.Field(alias="HTTP-Referer"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_open_router_title: Annotated[
Optional[str],
pydantic.Field(alias="X-OpenRouter-Title"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
x_open_router_categories: Annotated[
Optional[str],
pydantic.Field(alias="X-OpenRouter-Categories"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(
["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
)
serialized = handler(self)
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k, serialized.get(n))
if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val
return m
class ListWorkspaceMembersRequestTypedDict(TypedDict):
id: str
r"""The workspace ID (UUID) or slug"""
http_referer: NotRequired[str]
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_open_router_title: NotRequired[str]
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
x_open_router_categories: NotRequired[str]
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
offset: NotRequired[int]
r"""Number of records to skip for pagination"""
limit: NotRequired[int]
r"""Maximum number of records to return (max 100)"""
class ListWorkspaceMembersRequest(BaseModel):
id: Annotated[
str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
]
r"""The workspace ID (UUID) or slug"""
http_referer: Annotated[
Optional[str],
pydantic.Field(alias="HTTP-Referer"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
"""
x_open_router_title: Annotated[
Optional[str],
pydantic.Field(alias="X-OpenRouter-Title"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
"""
x_open_router_categories: Annotated[
Optional[str],
pydantic.Field(alias="X-OpenRouter-Categories"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
offset: Annotated[
Optional[int],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Number of records to skip for pagination"""
limit: Annotated[
Optional[int],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Maximum number of records to return (max 100)"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
optional_fields = set(
[
"HTTP-Referer",
"X-OpenRouter-Title",
"X-OpenRouter-Categories",
"offset",
"limit",
]
)
serialized = handler(self)
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
val = serialized.get(k, serialized.get(n))
if val != UNSET_SENTINEL:
if val is not None or k not in optional_fields:
m[k] = val
return m
class ListWorkspaceMembersResponseTypedDict(TypedDict):
result: (
components_listworkspacemembersresponse.ListWorkspaceMembersResponseTypedDict
)
class ListWorkspaceMembersResponse(BaseModel):
next: Union[
Callable[[], Optional[ListWorkspaceMembersResponse]],
Callable[[], Awaitable[Optional[ListWorkspaceMembersResponse]]],
]
result: components_listworkspacemembersresponse.ListWorkspaceMembersResponse
+347
View File
@@ -2402,6 +2402,353 @@ class Workspaces(BaseSDK):
raise errors.OpenRouterDefaultError("Unexpected response received", http_res) raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
def list_members(
self,
*,
id: str,
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
offset: Optional[int] = None,
limit: Optional[int] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> Optional[operations.ListWorkspaceMembersResponse]:
r"""List workspace members
List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
:param id: The workspace ID (UUID) or slug
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
:param offset: Number of records to skip for pagination
:param limit: Maximum number of records to return (max 100)
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
url_variables = None
if timeout_ms is None:
timeout_ms = self.sdk_configuration.timeout_ms
if server_url is not None:
base_url = server_url
else:
base_url = self._get_url(base_url, url_variables)
request = operations.ListWorkspaceMembersRequest(
http_referer=http_referer,
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
id=id,
offset=offset,
limit=limit,
)
req = self._build_request(
method="GET",
path="/workspaces/{id}/members",
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_has_path_params=True,
request_has_query_params=True,
user_agent_header="user-agent",
accept_header_value="application/json",
http_headers=http_headers,
_globals=operations.ListWorkspaceMembersGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
),
security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms,
)
if retries == UNSET:
if self.sdk_configuration.retry_config is not UNSET:
retries = self.sdk_configuration.retry_config
else:
retries = utils.RetryConfig(
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
)
retry_config = None
if isinstance(retries, utils.RetryConfig):
retry_config = (retries, ["5XX"])
http_res = self.do_request(
hook_ctx=HookContext(
config=self.sdk_configuration,
base_url=base_url or "",
operation_id="listWorkspaceMembers",
oauth2_scopes=None,
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
tags=["Workspaces"],
extensions=None,
),
request=req,
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListWorkspaceMembersResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
limit_ = request.limit if isinstance(request.limit, int) else 0
if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
return self.list_members(
id=id,
http_referer=http_referer,
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
offset=next_offset,
limit=limit,
retries=retries,
server_url=server_url,
timeout_ms=timeout_ms,
http_headers=http_headers,
)
response_data: Any = None
if utils.match_response(http_res, "200", "application/json"):
return operations.ListWorkspaceMembersResponse(
result=unmarshal_json_response(
components.ListWorkspaceMembersResponse, http_res
),
next=next_func,
)
if utils.match_response(http_res, "401", "application/json"):
response_data = unmarshal_json_response(
errors.UnauthorizedResponseErrorData, http_res
)
raise errors.UnauthorizedResponseError(response_data, http_res)
if utils.match_response(http_res, "403", "application/json"):
response_data = unmarshal_json_response(
errors.ForbiddenResponseErrorData, http_res
)
raise errors.ForbiddenResponseError(response_data, http_res)
if utils.match_response(http_res, "404", "application/json"):
response_data = unmarshal_json_response(
errors.NotFoundResponseErrorData, http_res
)
raise errors.NotFoundResponseError(response_data, http_res)
if utils.match_response(http_res, "500", "application/json"):
response_data = unmarshal_json_response(
errors.InternalServerResponseErrorData, http_res
)
raise errors.InternalServerResponseError(response_data, http_res)
if utils.match_response(http_res, "4XX", "*"):
http_res_text = utils.stream_to_text(http_res)
raise errors.OpenRouterDefaultError(
"API error occurred", http_res, http_res_text
)
if utils.match_response(http_res, "5XX", "*"):
http_res_text = utils.stream_to_text(http_res)
raise errors.OpenRouterDefaultError(
"API error occurred", http_res, http_res_text
)
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
async def list_members_async(
self,
*,
id: str,
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
offset: Optional[int] = None,
limit: Optional[int] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> Optional[operations.ListWorkspaceMembersResponse]:
r"""List workspace members
List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
:param id: The workspace ID (UUID) or slug
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
:param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
:param offset: Number of records to skip for pagination
:param limit: Maximum number of records to return (max 100)
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
url_variables = None
if timeout_ms is None:
timeout_ms = self.sdk_configuration.timeout_ms
if server_url is not None:
base_url = server_url
else:
base_url = self._get_url(base_url, url_variables)
request = operations.ListWorkspaceMembersRequest(
http_referer=http_referer,
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
id=id,
offset=offset,
limit=limit,
)
req = self._build_request_async(
method="GET",
path="/workspaces/{id}/members",
base_url=base_url,
url_variables=url_variables,
request=request,
request_body_required=False,
request_has_path_params=True,
request_has_query_params=True,
user_agent_header="user-agent",
accept_header_value="application/json",
http_headers=http_headers,
_globals=operations.ListWorkspaceMembersGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
),
security=self.sdk_configuration.security,
allow_empty_value=None,
timeout_ms=timeout_ms,
)
if retries == UNSET:
if self.sdk_configuration.retry_config is not UNSET:
retries = self.sdk_configuration.retry_config
else:
retries = utils.RetryConfig(
"backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
)
retry_config = None
if isinstance(retries, utils.RetryConfig):
retry_config = (retries, ["5XX"])
http_res = await self.do_request_async(
hook_ctx=HookContext(
config=self.sdk_configuration,
base_url=base_url or "",
operation_id="listWorkspaceMembers",
oauth2_scopes=None,
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
tags=["Workspaces"],
extensions=None,
),
request=req,
is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Awaitable[Optional[operations.ListWorkspaceMembersResponse]]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
async def empty_result():
return None
offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
limit_ = request.limit if isinstance(request.limit, int) else 0
if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
return self.list_members_async(
id=id,
http_referer=http_referer,
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
offset=next_offset,
limit=limit,
retries=retries,
server_url=server_url,
timeout_ms=timeout_ms,
http_headers=http_headers,
)
response_data: Any = None
if utils.match_response(http_res, "200", "application/json"):
return operations.ListWorkspaceMembersResponse(
result=unmarshal_json_response(
components.ListWorkspaceMembersResponse, http_res
),
next=next_func,
)
if utils.match_response(http_res, "401", "application/json"):
response_data = unmarshal_json_response(
errors.UnauthorizedResponseErrorData, http_res
)
raise errors.UnauthorizedResponseError(response_data, http_res)
if utils.match_response(http_res, "403", "application/json"):
response_data = unmarshal_json_response(
errors.ForbiddenResponseErrorData, http_res
)
raise errors.ForbiddenResponseError(response_data, http_res)
if utils.match_response(http_res, "404", "application/json"):
response_data = unmarshal_json_response(
errors.NotFoundResponseErrorData, http_res
)
raise errors.NotFoundResponseError(response_data, http_res)
if utils.match_response(http_res, "500", "application/json"):
response_data = unmarshal_json_response(
errors.InternalServerResponseErrorData, http_res
)
raise errors.InternalServerResponseError(response_data, http_res)
if utils.match_response(http_res, "4XX", "*"):
http_res_text = await utils.stream_to_text_async(http_res)
raise errors.OpenRouterDefaultError(
"API error occurred", http_res, http_res_text
)
if utils.match_response(http_res, "5XX", "*"):
http_res_text = await utils.stream_to_text_async(http_res)
raise errors.OpenRouterDefaultError(
"API error occurred", http_res, http_res_text
)
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
def bulk_add_members( def bulk_add_members(
self, self,
*, *,
Generated
+1 -1
View File
@@ -213,7 +213,7 @@ wheels = [
[[package]] [[package]]
name = "openrouter" name = "openrouter"
version = "0.11.1" version = "0.11.2"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "httpcore" }, { name = "httpcore" },