Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.12.0"
".": "1.12.1"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 118
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-132ed160716591bdcd9231c00da8c506d9451a5486b165fc27b2a01d93202082.yml
openapi_spec_hash: c2b44d9e9cda56e32141a7ea3794bbba
config_hash: 3bd89c812b96708c461fb98286ebf0b5
configured_endpoints: 117
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-0568973e19e8af9fa953b2ded109ab2b69e76e90e2b74f33617dbf7092e26274.yml
openapi_spec_hash: 10ba804ce69510d7985e05c77d0ffcf6
config_hash: de99cfce88e2d1f02246dc6c2f43bc6c
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 1.12.1 (2026-03-19)

Full Changelog: [v1.12.0...v1.12.1](https://github.com/runloopai/api-client-python/compare/v1.12.0...v1.12.1)

### Chores

* remove create_tunnel endpoint ([627c994](https://github.com/runloopai/api-client-python/commit/627c9945cdaf3b2d0ca46a2832092dd4fa011863))

## 1.12.0 (2026-03-18)

Full Changelog: [v1.11.0...v1.12.0](https://github.com/runloopai/api-client-python/compare/v1.11.0...v1.12.0)
Expand Down
9 changes: 0 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,6 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://

It is generated with [Stainless](https://www.stainless.com/).

## MCP Server

Use the Runloop 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=%40runloop%2Fapi-client-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBydW5sb29wL2FwaS1jbGllbnQtbWNwIl0sImVudiI6eyJSVU5MT09QX0FQSV9LRVkiOiJNeSBCZWFyZXIgVG9rZW4ifX0)
[![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%22%40runloop%2Fapi-client-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40runloop%2Fapi-client-mcp%22%5D%2C%22env%22%3A%7B%22RUNLOOP_API_KEY%22%3A%22My%20Bearer%20Token%22%7D%7D)

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

## Documentation

The REST API documentation can be found on
Expand Down
2 changes: 0 additions & 2 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ from runloop_api_client.types import (
DevboxSendStdInResult,
DevboxSnapshotListView,
DevboxSnapshotView,
DevboxTunnelView,
DevboxView,
TunnelView,
DevboxCreateSSHKeyResponse,
Expand All @@ -147,7 +146,6 @@ Methods:
- <code title="post /v1/devboxes/{id}">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">update</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_update_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">DevboxView</a></code>
- <code title="get /v1/devboxes">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">list</a>(\*\*<a href="src/runloop_api_client/types/devbox_list_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_view.py">SyncDevboxesCursorIDPage[DevboxView]</a></code>
- <code title="post /v1/devboxes/{id}/create_ssh_key">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_ssh_key</a>(id) -> <a href="./src/runloop_api_client/types/devbox_create_ssh_key_response.py">DevboxCreateSSHKeyResponse</a></code>
- <code title="post /v1/devboxes/{id}/create_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">create_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_create_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/devbox_tunnel_view.py">DevboxTunnelView</a></code>
- <code title="post /v1/devboxes/disk_snapshots/{id}/delete">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">delete_disk_snapshot</a>(id) -> object</code>
- <code title="post /v1/devboxes/{id}/download_file">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">download_file</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_download_file_params.py">params</a>) -> BinaryAPIResponse</code>
- <code title="post /v1/devboxes/{id}/enable_tunnel">client.devboxes.<a href="./src/runloop_api_client/resources/devboxes/devboxes.py">enable_tunnel</a>(id, \*\*<a href="src/runloop_api_client/types/devbox_enable_tunnel_params.py">params</a>) -> <a href="./src/runloop_api_client/types/tunnel_view.py">TunnelView</a></code>
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "runloop_api_client"
version = "1.12.0"
version = "1.12.1"
description = "The official Python library for the runloop API"
dynamic = ["readme"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion src/runloop_api_client/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "runloop_api_client"
__version__ = "1.12.0" # x-release-please-version
__version__ = "1.12.1" # x-release-please-version
14 changes: 10 additions & 4 deletions src/runloop_api_client/resources/benchmark_runs.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,11 @@ def cancel(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
idempotency_key: str | None = None,
) -> BenchmarkRunView:
"""
Cancel a currently running Benchmark run.
"""Cancel a Benchmark run.

This will do the following: 1. Cancel all running
scenarios and shutdown the underlying Devbox resources 2. Update the benchmark
state to CANCELED 3. Calculate final score from completed scenarios

Args:
extra_headers: Send extra headers
Expand Down Expand Up @@ -388,8 +391,11 @@ async def cancel(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
idempotency_key: str | None = None,
) -> BenchmarkRunView:
"""
Cancel a currently running Benchmark run.
"""Cancel a Benchmark run.

This will do the following: 1. Cancel all running
scenarios and shutdown the underlying Devbox resources 2. Update the benchmark
state to CANCELED 3. Calculate final score from completed scenarios

Args:
extra_headers: Send extra headers
Expand Down
122 changes: 0 additions & 122 deletions src/runloop_api_client/resources/devboxes/devboxes.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
devbox_shutdown_params,
devbox_upload_file_params,
devbox_execute_sync_params,
devbox_create_tunnel_params,
devbox_download_file_params,
devbox_enable_tunnel_params,
devbox_execute_async_params,
Expand Down Expand Up @@ -102,7 +101,6 @@
from ...lib.polling_async import async_poll_until
from ...types.devbox_view import DevboxView
from ...types.tunnel_view import TunnelView
from ...types.devbox_tunnel_view import DevboxTunnelView
from ...types.shared_params.mount import Mount
from ...types.devbox_snapshot_view import DevboxSnapshotView
from ...types.shared.launch_parameters import LaunchParameters as SharedLaunchParameters
Expand Down Expand Up @@ -664,56 +662,6 @@ def create_ssh_key(
cast_to=DevboxCreateSSHKeyResponse,
)

@typing_extensions.deprecated(
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
)
def create_tunnel(
self,
id: str,
*,
port: int,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
idempotency_key: str | None = None,
) -> DevboxTunnelView:
"""[Deprecated] Use enable_tunnel or configure a tunnel at devbox creation instead.

This endpoint
creates a legacy tunnel. The new enable_tunnel endpoint provides improved tunnel
functionality with authentication options.

Args:
port: Devbox port that tunnel will expose.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds

idempotency_key: Specify a custom idempotency key for this request
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
return self._post(
f"/v1/devboxes/{id}/create_tunnel",
body=maybe_transform({"port": port}, devbox_create_tunnel_params.DevboxCreateTunnelParams),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
idempotency_key=idempotency_key,
),
cast_to=DevboxTunnelView,
)

def delete_disk_snapshot(
self,
id: str,
Expand Down Expand Up @@ -2345,56 +2293,6 @@ async def create_ssh_key(
cast_to=DevboxCreateSSHKeyResponse,
)

@typing_extensions.deprecated(
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
)
async def create_tunnel(
self,
id: str,
*,
port: int,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
idempotency_key: str | None = None,
) -> DevboxTunnelView:
"""[Deprecated] Use enable_tunnel or configure a tunnel at devbox creation instead.

This endpoint
creates a legacy tunnel. The new enable_tunnel endpoint provides improved tunnel
functionality with authentication options.

Args:
port: Devbox port that tunnel will expose.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds

idempotency_key: Specify a custom idempotency key for this request
"""
if not id:
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
return await self._post(
f"/v1/devboxes/{id}/create_tunnel",
body=await async_maybe_transform({"port": port}, devbox_create_tunnel_params.DevboxCreateTunnelParams),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
idempotency_key=idempotency_key,
),
cast_to=DevboxTunnelView,
)

async def delete_disk_snapshot(
self,
id: str,
Expand Down Expand Up @@ -3525,11 +3423,6 @@ def __init__(self, devboxes: DevboxesResource) -> None:
self.create_ssh_key = to_raw_response_wrapper(
devboxes.create_ssh_key,
)
self.create_tunnel = ( # pyright: ignore[reportDeprecated]
to_raw_response_wrapper(
devboxes.create_tunnel, # pyright: ignore[reportDeprecated],
)
)
self.delete_disk_snapshot = to_raw_response_wrapper(
devboxes.delete_disk_snapshot,
)
Expand Down Expand Up @@ -3633,11 +3526,6 @@ def __init__(self, devboxes: AsyncDevboxesResource) -> None:
self.create_ssh_key = async_to_raw_response_wrapper(
devboxes.create_ssh_key,
)
self.create_tunnel = ( # pyright: ignore[reportDeprecated]
async_to_raw_response_wrapper(
devboxes.create_tunnel, # pyright: ignore[reportDeprecated],
)
)
self.delete_disk_snapshot = async_to_raw_response_wrapper(
devboxes.delete_disk_snapshot,
)
Expand Down Expand Up @@ -3741,11 +3629,6 @@ def __init__(self, devboxes: DevboxesResource) -> None:
self.create_ssh_key = to_streamed_response_wrapper(
devboxes.create_ssh_key,
)
self.create_tunnel = ( # pyright: ignore[reportDeprecated]
to_streamed_response_wrapper(
devboxes.create_tunnel, # pyright: ignore[reportDeprecated],
)
)
self.delete_disk_snapshot = to_streamed_response_wrapper(
devboxes.delete_disk_snapshot,
)
Expand Down Expand Up @@ -3849,11 +3732,6 @@ def __init__(self, devboxes: AsyncDevboxesResource) -> None:
self.create_ssh_key = async_to_streamed_response_wrapper(
devboxes.create_ssh_key,
)
self.create_tunnel = ( # pyright: ignore[reportDeprecated]
async_to_streamed_response_wrapper(
devboxes.create_tunnel, # pyright: ignore[reportDeprecated],
)
)
self.delete_disk_snapshot = async_to_streamed_response_wrapper(
devboxes.delete_disk_snapshot,
)
Expand Down
5 changes: 0 additions & 5 deletions src/runloop_api_client/sdk/_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
DevboxUploadFileParams,
GatewayConfigListParams,
NetworkPolicyListParams,
DevboxCreateTunnelParams,
DevboxDownloadFileParams,
DevboxEnableTunnelParams,
DevboxRemoveTunnelParams,
Expand Down Expand Up @@ -124,10 +123,6 @@ class SDKDevboxUploadFileParams(DevboxUploadFileParams, LongRequestOptions):
pass


class SDKDevboxCreateTunnelParams(DevboxCreateTunnelParams, LongRequestOptions):
pass


class SDKDevboxEnableTunnelParams(DevboxEnableTunnelParams, LongRequestOptions):
pass

Expand Down
30 changes: 0 additions & 30 deletions src/runloop_api_client/sdk/async_devbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from ..types import (
DevboxView,
TunnelView,
DevboxTunnelView,
DevboxExecutionDetailView,
DevboxCreateSSHKeyResponse,
)
Expand All @@ -23,7 +22,6 @@
SDKDevboxExecuteParams,
ExecuteStreamingCallbacks,
SDKDevboxUploadFileParams,
SDKDevboxCreateTunnelParams,
SDKDevboxDownloadFileParams,
SDKDevboxEnableTunnelParams,
SDKDevboxExecuteAsyncParams,
Expand Down Expand Up @@ -807,34 +805,6 @@ async def create_ssh_key(
**options,
)

async def create_tunnel(
self,
**params: Unpack[SDKDevboxCreateTunnelParams],
) -> DevboxTunnelView:
"""[Deprecated] Create a legacy tunnel to expose a devbox port publicly.

Use :meth:`enable_tunnel` or configure a tunnel during devbox creation instead.

:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateTunnelParams` for available parameters
:return: Details about the public endpoint
:rtype: DevboxTunnelView

Example:
>>> tunnel = await devbox.net.create_tunnel(port=8080)
>>> print(f"Public URL: {tunnel.url}")
"""
warnings.warn(
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation.",
DeprecationWarning,
stacklevel=2,
)
with warnings.catch_warnings():
warnings.simplefilter("ignore", DeprecationWarning)
return await self._devbox._client.devboxes.create_tunnel( # type: ignore[deprecated]
self._devbox.id,
**params,
)

async def enable_tunnel(
self,
**params: Unpack[SDKDevboxEnableTunnelParams],
Expand Down
Loading
Loading