Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
ab1191d
feat(api): expose device count endpoint
stainless-app[bot] Jan 13, 2026
c6668af
feat(client): add support for binary request streaming
stainless-app[bot] Jan 14, 2026
416142e
feat(api): api update
stainless-app[bot] Jan 14, 2026
866c20e
feat(api): api update
stainless-app[bot] Jan 14, 2026
e42aa53
feat(api): api update
stainless-app[bot] Jan 15, 2026
099c289
codegen metadata
stainless-app[bot] Jan 16, 2026
75af377
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 17, 2026
bb822b0
codegen metadata
stainless-app[bot] Jan 17, 2026
678264c
feat(api): api update
stainless-app[bot] Jan 19, 2026
00033ad
chore(ci): upgrade `actions/github-script`
stainless-app[bot] Jan 24, 2026
8d53e63
feat(api): api update
stainless-app[bot] Jan 27, 2026
a1864da
codegen metadata
stainless-app[bot] Jan 27, 2026
4c2d97d
feat(api): api update
stainless-app[bot] Jan 28, 2026
a06f4b2
fix(docs): fix mcp installation instructions for remote servers
stainless-app[bot] Jan 29, 2026
9471952
feat(client): add custom JSON encoder for extended type support
stainless-app[bot] Jan 30, 2026
2dc1d4c
codegen metadata
stainless-app[bot] Jan 30, 2026
91ab063
chore(internal): bump dependencies
stainless-app[bot] Feb 10, 2026
f5920bc
chore(internal): fix lint error on Python 3.14
stainless-app[bot] Feb 12, 2026
2910e43
chore: format all `api.md` files
stainless-app[bot] Feb 13, 2026
9049554
feat(api): api update
stainless-app[bot] Feb 16, 2026
543bbd8
feat(api): api update
stainless-app[bot] Feb 16, 2026
70b11fa
release: 2.1.0
stainless-app[bot] Feb 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/droidrun-cloud-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -44,7 +44,7 @@ jobs:
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/droidrun-cloud-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -63,7 +63,7 @@ jobs:
- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/droidrun-cloud-python'
id: github-oidc
uses: actions/github-script@v6
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

Expand All @@ -81,7 +81,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/droidrun-cloud-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'droidrun/mobilerun-sdk-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Check release environment
run: |
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.0.0"
".": "2.1.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 49
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun%2Fdroidrun-cloud-f80ecf1ef8ff0bf85d545b660eeef8677c62d571dc692b47fc044fc82378d330.yml
openapi_spec_hash: 51d80499a2291f8d223276f759392574
config_hash: 12fc3bd7f141a7f09f5ad38cfa42ba3d
configured_endpoints: 47
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun%2Fdroidrun-cloud-825adf3ea9bf2a0f6fca08379e9976d62c50dfc38fa57e6da7710bbf5183a89e.yml
openapi_spec_hash: a1bf4abae9edb6f6739bce4a1d8c90a4
config_hash: 97b79867ce1dca69c6872bcea77574fb
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,37 @@
# Changelog

## 2.1.0 (2026-02-16)

Full Changelog: [v2.0.0...v2.1.0](https://github.com/droidrun/mobilerun-sdk-python/compare/v2.0.0...v2.1.0)

### Features

* **api:** api update ([543bbd8](https://github.com/droidrun/mobilerun-sdk-python/commit/543bbd877819b2dc23ecfe5b3d4722996b54e92b))
* **api:** api update ([9049554](https://github.com/droidrun/mobilerun-sdk-python/commit/9049554b1ab39ca164a3351861ec41c9ea78d489))
* **api:** api update ([4c2d97d](https://github.com/droidrun/mobilerun-sdk-python/commit/4c2d97de0a1ae482871912fe677ed64e0919825e))
* **api:** api update ([8d53e63](https://github.com/droidrun/mobilerun-sdk-python/commit/8d53e63fd8ccebbe5a77af740cd5e6bdf85c2a85))
* **api:** api update ([678264c](https://github.com/droidrun/mobilerun-sdk-python/commit/678264c95364ad4fff7c70b61bd4794819f28292))
* **api:** api update ([e42aa53](https://github.com/droidrun/mobilerun-sdk-python/commit/e42aa5309759f931ceab3eee40792e559f21d3a3))
* **api:** api update ([866c20e](https://github.com/droidrun/mobilerun-sdk-python/commit/866c20ec6ebd177c861777fee900259186347ef0))
* **api:** api update ([416142e](https://github.com/droidrun/mobilerun-sdk-python/commit/416142eb345a07aefea8404a97231ed0acd74678))
* **api:** expose device count endpoint ([ab1191d](https://github.com/droidrun/mobilerun-sdk-python/commit/ab1191d28943441844e81c6c1189aebc34f54980))
* **client:** add custom JSON encoder for extended type support ([9471952](https://github.com/droidrun/mobilerun-sdk-python/commit/947195285cae03d555b21716015384cc2e1f3fa0))
* **client:** add support for binary request streaming ([c6668af](https://github.com/droidrun/mobilerun-sdk-python/commit/c6668af5dbd83d7ab1dd1fe4f68253422e055e73))


### Bug Fixes

* **docs:** fix mcp installation instructions for remote servers ([a06f4b2](https://github.com/droidrun/mobilerun-sdk-python/commit/a06f4b2146dafd2c9435fecb603a6217b085fcc5))


### Chores

* **ci:** upgrade `actions/github-script` ([00033ad](https://github.com/droidrun/mobilerun-sdk-python/commit/00033ad7ffac1d3d650a05e841bbdecca964192e))
* format all `api.md` files ([2910e43](https://github.com/droidrun/mobilerun-sdk-python/commit/2910e4312fa6360f754de4d6937d677cd04acc68))
* **internal:** bump dependencies ([91ab063](https://github.com/droidrun/mobilerun-sdk-python/commit/91ab0631121c4ca096133953344ea83e96cc32ae))
* **internal:** fix lint error on Python 3.14 ([f5920bc](https://github.com/droidrun/mobilerun-sdk-python/commit/f5920bc46fb52360860c02ca941926e939f3e316))
* **internal:** update `actions/checkout` version ([75af377](https://github.com/droidrun/mobilerun-sdk-python/commit/75af377b29fca57b52843186af3e9775bfc78c13))

## 2.0.0 (2026-01-12)

Full Changelog: [v0.1.0...v2.0.0](https://github.com/droidrun/mobilerun-sdk-python/compare/v0.1.0...v2.0.0)
Expand Down
58 changes: 33 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ It is generated with [Stainless](https://www.stainless.com/).

Use the Mobilerun MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=mobilerun-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1vYmlsZXJ1bi1tY3AiXX0)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22mobilerun-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mobilerun-mcp%22%5D%7D)
[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=mobilerun-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1vYmlsZXJ1bi1tY3AiXSwiZW52Ijp7Ik1PQklMRVJVTl9DTE9VRF9BUElfS0VZIjoiTXkgQVBJIEtleSJ9fQ)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22mobilerun-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mobilerun-mcp%22%5D%2C%22env%22%3A%7B%22MOBILERUN_CLOUD_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)

> Note: You may need to set environment variables in your MCP client.

Expand All @@ -34,15 +34,14 @@ pip install mobilerun-sdk
The full API of this library can be found in [api.md](api.md).

```python
import os
from mobilerun import Mobilerun

client = Mobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
)
client = Mobilerun()

tasks = client.tasks.list()
print(tasks.items)
task = client.tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(task.task)
```

While you can provide a `api_key` keyword argument,
Expand All @@ -55,18 +54,17 @@ so that your API Key is not stored in source control.
Simply import `AsyncMobilerun` instead of `Mobilerun` and use `await` with each API call:

```python
import os
import asyncio
from mobilerun import AsyncMobilerun

client = AsyncMobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
)
client = AsyncMobilerun()


async def main() -> None:
tasks = await client.tasks.list()
print(tasks.items)
task = await client.tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(task.task)


asyncio.run(main())
Expand All @@ -88,19 +86,19 @@ pip install mobilerun-sdk[aiohttp]
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:

```python
import os
import asyncio
from mobilerun import DefaultAioHttpClient
from mobilerun import AsyncMobilerun


async def main() -> None:
async with AsyncMobilerun(
api_key=os.environ.get("MOBILERUN_CLOUD_API_KEY"), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
tasks = await client.tasks.list()
print(tasks.items)
task = await client.tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(task.task)


asyncio.run(main())
Expand Down Expand Up @@ -151,7 +149,9 @@ from mobilerun import Mobilerun
client = Mobilerun()

try:
client.tasks.list()
client.tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
except mobilerun.APIConnectionError as e:
print("The server could not be reached")
print(e.__cause__) # an underlying Exception, likely raised within httpx.
Expand Down Expand Up @@ -194,7 +194,9 @@ client = Mobilerun(
)

# Or, configure per-request:
client.with_options(max_retries=5).tasks.list()
client.with_options(max_retries=5).tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
```

### Timeouts
Expand All @@ -217,7 +219,9 @@ client = Mobilerun(
)

# Override per-request:
client.with_options(timeout=5.0).tasks.list()
client.with_options(timeout=5.0).tasks.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
```

On timeout, an `APITimeoutError` is thrown.
Expand Down Expand Up @@ -258,11 +262,13 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
from mobilerun import Mobilerun

client = Mobilerun()
response = client.tasks.with_raw_response.list()
response = client.tasks.with_raw_response.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
print(response.headers.get('X-My-Header'))

task = response.parse() # get the object that `tasks.list()` would have returned
print(task.items)
task = response.parse() # get the object that `tasks.retrieve()` would have returned
print(task.task)
```

These methods return an [`APIResponse`](https://github.com/droidrun/mobilerun-sdk-python/tree/main/src/mobilerun/_response.py) object.
Expand All @@ -276,7 +282,9 @@ The above interface eagerly reads the full response body when you make the reque
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.

```python
with client.tasks.with_streaming_response.list() as response:
with client.tasks.with_streaming_response.retrieve(
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
) as response:
print(response.headers.get("X-My-Header"))

for line in response.iter_lines():
Expand Down
16 changes: 5 additions & 11 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,21 @@ Types:
from mobilerun.types import (
LlmModel,
Task,
TaskCreate,
TaskStatus,
TaskRetrieveResponse,
TaskListResponse,
TaskGetStatusResponse,
TaskGetTrajectoryResponse,
TaskRunResponse,
TaskStopResponse,
)
```

Methods:

- <code title="get /tasks/{task_id}">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">retrieve</a>(task_id) -> <a href="./src/mobilerun/types/task_retrieve_response.py">TaskRetrieveResponse</a></code>
- <code title="get /tasks/">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">list</a>(\*\*<a href="src/mobilerun/types/task_list_params.py">params</a>) -> <a href="./src/mobilerun/types/task_list_response.py">TaskListResponse</a></code>
- <code title="get /tasks/{task_id}/attach">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">attach</a>(task_id) -> None</code>
- <code title="get /tasks/{task_id}/status">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">get_status</a>(task_id) -> <a href="./src/mobilerun/types/task_get_status_response.py">TaskGetStatusResponse</a></code>
- <code title="get /tasks/{task_id}/trajectory">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">get_trajectory</a>(task_id) -> <a href="./src/mobilerun/types/task_get_trajectory_response.py">TaskGetTrajectoryResponse</a></code>
- <code title="post /tasks/">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">run</a>(\*\*<a href="src/mobilerun/types/task_run_params.py">params</a>) -> <a href="./src/mobilerun/types/task_run_response.py">TaskRunResponse</a></code>
- <code title="post /tasks/stream">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">run_streamed</a>(\*\*<a href="src/mobilerun/types/task_run_streamed_params.py">params</a>) -> None</code>
- <code title="post /tasks/stream">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">run_streamed</a>() -> None</code>
- <code title="post /tasks/{task_id}/cancel">client.tasks.<a href="./src/mobilerun/resources/tasks/tasks.py">stop</a>(task_id) -> <a href="./src/mobilerun/types/task_stop_response.py">TaskStopResponse</a></code>

## Screenshots
Expand Down Expand Up @@ -59,15 +54,16 @@ Methods:
Types:

```python
from mobilerun.types import Device, DeviceListResponse
from mobilerun.types import Device, DeviceListResponse, DeviceCountResponse
```

Methods:

- <code title="post /devices">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">create</a>(\*\*<a href="src/mobilerun/types/device_create_params.py">params</a>) -> <a href="./src/mobilerun/types/device.py">Device</a></code>
- <code title="get /devices/{deviceId}">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">retrieve</a>(device_id) -> <a href="./src/mobilerun/types/device.py">Device</a></code>
- <code title="get /devices">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">list</a>(\*\*<a href="src/mobilerun/types/device_list_params.py">params</a>) -> <a href="./src/mobilerun/types/device_list_response.py">DeviceListResponse</a></code>
- <code title="delete /devices/{deviceId}">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">terminate</a>(device_id) -> None</code>
- <code title="get /devices/count">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">count</a>() -> <a href="./src/mobilerun/types/device_count_response.py">DeviceCountResponse</a></code>
- <code title="delete /devices/{deviceId}">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">terminate</a>(device_id, \*\*<a href="src/mobilerun/types/device_terminate_params.py">params</a>) -> None</code>
- <code title="get /devices/{deviceId}/wait">client.devices.<a href="./src/mobilerun/resources/devices/devices.py">wait_ready</a>(device_id) -> <a href="./src/mobilerun/types/device.py">Device</a></code>

## Actions
Expand Down Expand Up @@ -161,7 +157,7 @@ from mobilerun.types import CredentialListResponse

Methods:

- <code title="get /credentials">client.credentials.<a href="./src/mobilerun/resources/credentials/credentials.py">list</a>() -> <a href="./src/mobilerun/types/credential_list_response.py">CredentialListResponse</a></code>
- <code title="get /credentials">client.credentials.<a href="./src/mobilerun/resources/credentials/credentials.py">list</a>(\*\*<a href="src/mobilerun/types/credential_list_params.py">params</a>) -> <a href="./src/mobilerun/types/credential_list_response.py">CredentialListResponse</a></code>

## Packages

Expand Down Expand Up @@ -221,7 +217,6 @@ Types:
from mobilerun.types import (
HookRetrieveResponse,
HookUpdateResponse,
HookListResponse,
HookGetSampleDataResponse,
HookPerformResponse,
HookSubscribeResponse,
Expand All @@ -233,7 +228,6 @@ Methods:

- <code title="get /hooks/{hook_id}">client.hooks.<a href="./src/mobilerun/resources/hooks.py">retrieve</a>(hook_id) -> <a href="./src/mobilerun/types/hook_retrieve_response.py">HookRetrieveResponse</a></code>
- <code title="post /hooks/{hook_id}/edit">client.hooks.<a href="./src/mobilerun/resources/hooks.py">update</a>(hook_id, \*\*<a href="src/mobilerun/types/hook_update_params.py">params</a>) -> <a href="./src/mobilerun/types/hook_update_response.py">HookUpdateResponse</a></code>
- <code title="get /hooks/">client.hooks.<a href="./src/mobilerun/resources/hooks.py">list</a>(\*\*<a href="src/mobilerun/types/hook_list_params.py">params</a>) -> <a href="./src/mobilerun/types/hook_list_response.py">HookListResponse</a></code>
- <code title="get /hooks/sample">client.hooks.<a href="./src/mobilerun/resources/hooks.py">get_sample_data</a>() -> <a href="./src/mobilerun/types/hook_get_sample_data_response.py">HookGetSampleDataResponse</a></code>
- <code title="post /hooks/perform">client.hooks.<a href="./src/mobilerun/resources/hooks.py">perform</a>() -> <a href="./src/mobilerun/types/hook_perform_response.py">HookPerformResponse</a></code>
- <code title="post /hooks/subscribe">client.hooks.<a href="./src/mobilerun/resources/hooks.py">subscribe</a>(\*\*<a href="src/mobilerun/types/hook_subscribe_params.py">params</a>) -> <a href="./src/mobilerun/types/hook_subscribe_response.py">HookSubscribeResponse</a></code>
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "mobilerun-sdk"
version = "2.0.0"
version = "2.1.0"
description = "The official Python library for the mobilerun API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down Expand Up @@ -69,7 +69,7 @@ format = { chain = [
# run formatting again to fix any inconsistencies when imports are stripped
"format:ruff",
]}
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
"format:ruff" = "ruff format"

"lint" = { chain = [
Expand Down
Loading