GitHub Raw JSON API

rivet-dev / rivet

5,823 Rust

Rivet Actors are the primitive for stateful workloads. Built for AI agents, collaborative apps, and durable execution.

rivet-api-public Specification

Located in engine/artifacts/openapi.json on branch HEAD

3.1.0 JSON 17 Endpoints 56.7 KB

Operations & Route Endpoints (21)

GET /actors
## Datacenter Round Trips
PUT /actors
## Datacenter Round Trips
POST /actors
## Datacenter Round Trips
GET /actors/names
## Datacenter Round Trips
DELETE /actors/{actor_id}
## Datacenter Round Trips
GET /actors/{actor_id}/kv/keys/{key}
actors_kv_get
POST /actors/{actor_id}/reschedule
actors_reschedule
POST /actors/{actor_id}/sleep
actors_sleep
GET /datacenters
datacenters_list
GET /envoys
envoys_list
GET /health/fanout
health_fanout
GET /metadata
Returns metadata about the API including runtime and version
GET /namespaces
namespaces_list
POST /namespaces
namespaces_create
GET /runner-configs
runner_configs_list
POST /runner-configs/serverless-health-check
runner_configs_serverless_health_check
PUT /runner-configs/{runner_name}
runner_configs_upsert
DELETE /runner-configs/{runner_name}
runner_configs_delete
POST /runner-configs/{runner_name}/refresh-metadata
runner_configs_refresh_metadata
GET /runners
runners_list
GET /runners/names
## Datacenter Round Trips
Raw JSON Specification
{
  "openapi": "3.1.0",
  "info": {
    "title": "rivet-api-public",
    "description": "",
    "contact": {
      "name": "Rivet Gaming, LLC",
      "email": "[email protected]"
    },
    "license": {
      "name": "Apache-2.0",
      "identifier": "Apache-2.0"
    },
    "version": "2.3.7"
  },
  "paths": {
    "/actors": {
      "get": {
        "tags": [
          "actors::list"
        ],
        "summary": " ## Datacenter Round Trips",
        "description": " **If key is some & `include_destroyed` is false**\n\n 2 round trips:\n - namespace::ops::resolve_for_name_global\n - GET /actors (multiple DCs based on actor IDs)\n\n\tThis path is optimized because we can read the actor IDs fro the key directly from Epoxy with\n\tstale consistency to determine which datacenter the actor lives in. Under most circumstances,\n\tthis means we don't need to fan out to all datacenters (like normal list does).\n\n\tThe reason `include_destroyed` has to be false is Epoxy only stores currently active actors. If\n\t`include_destroyed` is true, we show all previous iterations of actors with the same key.\n\n **Otherwise**\n\n 2 round trips:\n - namespace::ops::resolve_for_name_global\n - GET /actors (fanout)\n\n ## Optimized Alternative Routes",
        "operationId": "actors_list",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_ids",
            "in": "query",
            "description": "Deprecated.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "actor_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RivetId"
              }
            }
          },
          {
            "name": "include_destroyed",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsListResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "actors::get_or_create"
        ],
        "summary": "## Datacenter Round Trips",
        "description": "**If actor exists**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- GET /actors/{}\n\n**If actor does not exist and is created in the current datacenter:**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\n**If actor does not exist and is created in a different datacenter:**\n\n3 round trips:\n- namespace::ops::resolve_for_name_global\n- POST /actors to remote datacenter\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\nactor::get will always be in the same datacenter.\n\n## Optimized Alternative Routes",
        "operationId": "actors_get_or_create",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActorsGetOrCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsGetOrCreateResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "actors::create"
        ],
        "summary": "## Datacenter Round Trips",
        "description": "**If actor is created in the current datacenter:**\n\n2 round trips:\n- namespace::ops::resolve_for_name_global\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\n**If actor is created in a different datacenter:**\n\n3 round trips:\n- namespace::ops::resolve_for_name_global\n- POST /actors to remote datacenter\n- [pegboard::workflows::actor] Create actor workflow (includes Epoxy key allocation)\n\nactor::get will always be in the same datacenter.",
        "operationId": "actors_create",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActorsCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsCreateResponse"
                }
              }
            }
          }
        }
      }
    },
    "/actors/names": {
      "get": {
        "tags": [
          "actors::list_names"
        ],
        "summary": "## Datacenter Round Trips",
        "description": "2 round trips:\n- GET /actors/names (fanout)\n- [api-peer] namespace::ops::resolve_for_name_global",
        "operationId": "actors_list_names",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsListNamesResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/actors/{actor_id}": {
      "delete": {
        "tags": [
          "actors::delete"
        ],
        "summary": "## Datacenter Round Trips",
        "description": "2 round trip:\n- DELETE /actors/{}\n- [api-peer] namespace::ops::resolve_for_name_global",
        "operationId": "actors_delete",
        "parameters": [
          {
            "name": "actor_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RivetId"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsDeleteResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/actors/{actor_id}/kv/keys/{key}": {
      "get": {
        "tags": [
          "actors::kv_get"
        ],
        "operationId": "actors_kv_get",
        "parameters": [
          {
            "name": "actor_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RivetId"
            }
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsKvGetResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/actors/{actor_id}/reschedule": {
      "post": {
        "tags": [
          "actors::reschedule"
        ],
        "operationId": "actors_reschedule",
        "parameters": [
          {
            "name": "actor_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RivetId"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActorsRescheduleRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsRescheduleResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/actors/{actor_id}/sleep": {
      "post": {
        "tags": [
          "actors::sleep"
        ],
        "operationId": "actors_sleep",
        "parameters": [
          {
            "name": "actor_id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/RivetId"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActorsSleepRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActorsSleepResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/datacenters": {
      "get": {
        "tags": [
          "datacenters"
        ],
        "operationId": "datacenters_list",
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DatacentersListResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/envoys": {
      "get": {
        "tags": [
          "envoys"
        ],
        "operationId": "envoys_list",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "envoy_key",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EnvoysListResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/health/fanout": {
      "get": {
        "tags": [
          "health"
        ],
        "operationId": "health_fanout",
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthFanoutResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/metadata": {
      "get": {
        "tags": [
          "metadata"
        ],
        "summary": "Returns metadata about the API including runtime and version",
        "operationId": "metadata_get",
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MetadataGetResponse"
                }
              }
            }
          }
        }
      }
    },
    "/namespaces": {
      "get": {
        "tags": [
          "namespaces"
        ],
        "operationId": "namespaces_list",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace_ids",
            "in": "query",
            "description": "Deprecated.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RivetId"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NamespaceListResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "post": {
        "tags": [
          "namespaces"
        ],
        "operationId": "namespaces_create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NamespacesCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NamespacesCreateResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runner-configs": {
      "get": {
        "tags": [
          "runner_configs::list"
        ],
        "operationId": "runner_configs_list",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "variant",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/RunnerConfigVariant"
            }
          },
          {
            "name": "runner_names",
            "in": "query",
            "description": "Deprecated.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "runner_name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnerConfigsListResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runner-configs/serverless-health-check": {
      "post": {
        "tags": [
          "runner_configs::serverless_health_check"
        ],
        "operationId": "runner_configs_serverless_health_check",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunnerConfigsServerlessHealthCheckRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnerConfigsServerlessHealthCheckResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runner-configs/{runner_name}": {
      "put": {
        "tags": [
          "runner_configs::upsert"
        ],
        "operationId": "runner_configs_upsert",
        "parameters": [
          {
            "name": "runner_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunnerConfigsUpsertRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnerConfigsUpsertResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      },
      "delete": {
        "tags": [
          "runner_configs::delete"
        ],
        "operationId": "runner_configs_delete",
        "parameters": [
          {
            "name": "runner_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnerConfigsDeleteResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runner-configs/{runner_name}/refresh-metadata": {
      "post": {
        "tags": [
          "runner_configs::refresh_metadata"
        ],
        "operationId": "runner_configs_refresh_metadata",
        "parameters": [
          {
            "name": "runner_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RunnerConfigsRefreshMetadataRequestBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnerConfigsRefreshMetadataResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runners": {
      "get": {
        "tags": [
          "runners"
        ],
        "operationId": "runners_list",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "runner_ids",
            "in": "query",
            "description": "Deprecated.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "runner_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RivetId"
              }
            }
          },
          {
            "name": "include_stopped",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnersListResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    },
    "/runners/names": {
      "get": {
        "tags": [
          "runners"
        ],
        "summary": "## Datacenter Round Trips",
        "description": "2 round trips:\n- GET /runners/names (fanout)\n- [api-peer] namespace::ops::resolve_for_name_global",
        "operationId": "runners_list_names",
        "parameters": [
          {
            "name": "namespace",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunnersListNamesResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearer_auth": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Actor": {
        "type": "object",
        "required": [
          "actor_id",
          "name",
          "namespace_id",
          "datacenter",
          "runner_name_selector",
          "crash_policy",
          "create_ts"
        ],
        "properties": {
          "actor_id": {
            "$ref": "#/components/schemas/RivetId"
          },
          "connectable_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor was last connectable. Null if actor is not running."
          },
          "crash_policy": {
            "$ref": "#/components/schemas/CrashPolicy"
          },
          "create_ts": {
            "type": "integer",
            "format": "int64",
            "description": "Denotes when the actor was first created."
          },
          "datacenter": {
            "type": "string"
          },
          "destroy_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor was destroyed."
          },
          "error": {
            "type": [
              "object",
              "null"
            ],
            "description": "Error details if the actor failed to start."
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "namespace_id": {
            "$ref": "#/components/schemas/RivetId"
          },
          "pending_allocation_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor started waiting for an allocation."
          },
          "reschedule_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor will try to allocate again. If this is set, the actor will not attempt to\nallocate until the given timestamp."
          },
          "runner_name_selector": {
            "type": "string"
          },
          "sleep_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor entered a sleeping state."
          },
          "start_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64",
            "description": "Denotes when the actor was first made connectable. Null if never."
          }
        }
      },
      "ActorName": {
        "type": "object",
        "required": [
          "metadata"
        ],
        "properties": {
          "metadata": {
            "type": "object",
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "ActorsCreateRequest": {
        "type": "object",
        "required": [
          "name",
          "runner_name_selector",
          "crash_policy"
        ],
        "properties": {
          "crash_policy": {
            "$ref": "#/components/schemas/CrashPolicy"
          },
          "datacenter": {
            "type": [
              "string",
              "null"
            ]
          },
          "input": {
            "type": [
              "string",
              "null"
            ],
            "description": "Arbitrary base64 encoded binary data."
          },
          "key": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "runner_name_selector": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ActorsCreateResponse": {
        "type": "object",
        "required": [
          "actor"
        ],
        "properties": {
          "actor": {
            "$ref": "#/components/schemas/Actor"
          }
        },
        "additionalProperties": false
      },
      "ActorsDeleteResponse": {
        "type": "object"
      },
      "ActorsGetOrCreateRequest": {
        "type": "object",
        "required": [
          "name",
          "key",
          "runner_name_selector",
          "crash_policy"
        ],
        "properties": {
          "crash_policy": {
            "$ref": "#/components/schemas/CrashPolicy"
          },
          "datacenter": {
            "type": [
              "string",
              "null"
            ]
          },
          "input": {
            "type": [
              "string",
              "null"
            ]
          },
          "key": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "runner_name_selector": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ActorsGetOrCreateResponse": {
        "type": "object",
        "required": [
          "actor",
          "created"
        ],
        "properties": {
          "actor": {
            "$ref": "#/components/schemas/Actor"
          },
          "created": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ActorsKvGetResponse": {
        "type": "object",
        "required": [
          "value",
          "update_ts"
        ],
        "properties": {
          "update_ts": {
            "type": "integer",
            "format": "int64"
          },
          "value": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ActorsListNamesResponse": {
        "type": "object",
        "required": [
          "names",
          "pagination"
        ],
        "properties": {
          "names": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ActorName"
            },
            "propertyNames": {
              "type": "string"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "ActorsListResponse": {
        "type": "object",
        "required": [
          "actors",
          "pagination"
        ],
        "properties": {
          "actors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Actor"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "ActorsRescheduleRequestBody": {
        "type": "object",
        "additionalProperties": false
      },
      "ActorsRescheduleResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "ActorsSleepRequestBody": {
        "type": "object",
        "additionalProperties": false
      },
      "ActorsSleepResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "CrashPolicy": {
        "type": "string",
        "enum": [
          "restart",
          "sleep",
          "destroy"
        ]
      },
      "Datacenter": {
        "type": "object",
        "required": [
          "label",
          "name",
          "url"
        ],
        "properties": {
          "label": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "DatacenterHealth": {
        "type": "object",
        "required": [
          "datacenter_label",
          "datacenter_name",
          "status"
        ],
        "properties": {
          "datacenter_label": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "datacenter_name": {
            "type": "string"
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "response": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/HealthResponse"
              }
            ]
          },
          "rtt_ms": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "status": {
            "$ref": "#/components/schemas/HealthStatus"
          }
        }
      },
      "DatacentersListResponse": {
        "type": "object",
        "required": [
          "datacenters",
          "pagination"
        ],
        "properties": {
          "datacenters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Datacenter"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "Envoy": {
        "type": "object",
        "required": [
          "envoy_key",
          "namespace_id",
          "datacenter",
          "pool_name",
          "version",
          "slots",
          "create_ts",
          "last_ping_ts",
          "last_rtt"
        ],
        "properties": {
          "create_ts": {
            "type": "integer",
            "format": "int64"
          },
          "datacenter": {
            "type": "string"
          },
          "envoy_key": {
            "type": "string"
          },
          "last_connected_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "last_ping_ts": {
            "type": "integer",
            "format": "int64"
          },
          "last_rtt": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            }
          },
          "namespace_id": {
            "$ref": "#/components/schemas/RivetId"
          },
          "pool_name": {
            "type": "string"
          },
          "slots": {
            "type": "integer",
            "format": "int64",
            "minimum": 0
          },
          "stop_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "EnvoysListResponse": {
        "type": "object",
        "required": [
          "envoys",
          "pagination"
        ],
        "properties": {
          "envoys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Envoy"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "HealthFanoutResponse": {
        "type": "object",
        "required": [
          "datacenters"
        ],
        "properties": {
          "datacenters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DatacenterHealth"
            }
          }
        }
      },
      "HealthResponse": {
        "type": "object",
        "required": [
          "runtime",
          "status",
          "version"
        ],
        "properties": {
          "runtime": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        }
      },
      "HealthStatus": {
        "type": "string",
        "enum": [
          "ok",
          "error"
        ]
      },
      "MetadataGetResponse": {
        "type": "object",
        "required": [
          "runtime",
          "version",
          "git_sha",
          "build_timestamp",
          "rustc_version",
          "rustc_host",
          "cargo_target",
          "cargo_profile",
          "epoxy_protocol_version",
          "envoy_protocol_version"
        ],
        "properties": {
          "build_timestamp": {
            "type": "string"
          },
          "cargo_profile": {
            "type": "string"
          },
          "cargo_target": {
            "type": "string"
          },
          "envoy_protocol_version": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "epoxy_protocol_version": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "git_sha": {
            "type": "string"
          },
          "runtime": {
            "type": "string"
          },
          "rustc_host": {
            "type": "string"
          },
          "rustc_version": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        }
      },
      "Namespace": {
        "type": "object",
        "required": [
          "namespace_id",
          "name",
          "display_name",
          "create_ts"
        ],
        "properties": {
          "create_ts": {
            "type": "integer",
            "format": "int64"
          },
          "display_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "namespace_id": {
            "$ref": "#/components/schemas/RivetId"
          }
        }
      },
      "NamespaceListResponse": {
        "type": "object",
        "required": [
          "namespaces",
          "pagination"
        ],
        "properties": {
          "namespaces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Namespace"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "NamespacesCreateRequest": {
        "type": "object",
        "required": [
          "name",
          "display_name"
        ],
        "properties": {
          "display_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "NamespacesCreateResponse": {
        "type": "object",
        "required": [
          "namespace"
        ],
        "properties": {
          "namespace": {
            "$ref": "#/components/schemas/Namespace"
          }
        },
        "additionalProperties": false
      },
      "Pagination": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": false
      },
      "RivetId": {
        "type": "string"
      },
      "Runner": {
        "type": "object",
        "required": [
          "runner_id",
          "namespace_id",
          "datacenter",
          "name",
          "key",
          "version",
          "total_slots",
          "remaining_slots",
          "create_ts",
          "last_ping_ts",
          "last_rtt"
        ],
        "properties": {
          "create_ts": {
            "type": "integer",
            "format": "int64"
          },
          "datacenter": {
            "type": "string"
          },
          "drain_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "key": {
            "type": "string"
          },
          "last_connected_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "last_ping_ts": {
            "type": "integer",
            "format": "int64"
          },
          "last_rtt": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {},
            "propertyNames": {
              "type": "string"
            }
          },
          "name": {
            "type": "string"
          },
          "namespace_id": {
            "$ref": "#/components/schemas/RivetId"
          },
          "remaining_slots": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "runner_id": {
            "$ref": "#/components/schemas/RivetId"
          },
          "stop_ts": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "total_slots": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          },
          "version": {
            "type": "integer",
            "format": "int32",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "RunnerConfig": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RunnerConfigKind"
          },
          {
            "type": "object",
            "properties": {
              "drain_on_version_upgrade": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Deprecated."
              },
              "metadata": {}
            }
          }
        ]
      },
      "RunnerConfigKind": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "normal"
            ],
            "properties": {
              "normal": {
                "type": "object",
                "properties": {
                  "actor_eviction_delay": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "actor_eviction_period": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "actor_eviction_rate": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "float",
                    "description": "Actors per second."
                  },
                  "drain_on_version_upgrade": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "serverless"
            ],
            "properties": {
              "serverless": {
                "type": "object",
                "required": [
                  "url",
                  "request_lifespan"
                ],
                "properties": {
                  "actor_eviction_delay": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "actor_eviction_period": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "actor_eviction_rate": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "float",
                    "description": "Actors per second."
                  },
                  "drain_grace_period": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "drain_on_version_upgrade": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "headers": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "additionalProperties": {
                      "type": "string"
                    },
                    "propertyNames": {
                      "type": "string"
                    }
                  },
                  "max_concurrent_actors": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int64",
                    "minimum": 0
                  },
                  "max_runners": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Deprecated.",
                    "minimum": 0
                  },
                  "metadata_poll_interval": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int64",
                    "description": "Milliseconds between metadata polling. If not set, uses the global default.",
                    "minimum": 0
                  },
                  "min_runners": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Deprecated.",
                    "minimum": 0
                  },
                  "request_lifespan": {
                    "type": "integer",
                    "format": "int32",
                    "description": "Seconds.",
                    "minimum": 0
                  },
                  "runners_margin": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Deprecated.",
                    "minimum": 0
                  },
                  "slots_per_runner": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "format": "int32",
                    "description": "Deprecated.",
                    "minimum": 0
                  },
                  "url": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "RunnerConfigResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RunnerConfig"
          },
          {
            "type": "object",
            "properties": {
              "protocol_version": {
                "type": [
                  "integer",
                  "null"
                ],
                "format": "int32",
                "minimum": 0
              },
              "runner_pool_error": {
                "type": [
                  "object",
                  "null"
                ]
              }
            }
          }
        ]
      },
      "RunnerConfigVariant": {
        "type": "string",
        "enum": [
          "serverless",
          "normal"
        ]
      },
      "RunnerConfigsDeleteResponse": {
        "type": "object"
      },
      "RunnerConfigsListResponse": {
        "type": "object",
        "required": [
          "runner_configs",
          "pagination"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "runner_configs": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/RunnerConfigsListResponseRunnerConfigsValue"
            },
            "propertyNames": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "RunnerConfigsListResponseRunnerConfigsValue": {
        "type": "object",
        "required": [
          "datacenters"
        ],
        "properties": {
          "datacenters": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/RunnerConfigResponse"
            },
            "propertyNames": {
              "type": "string"
            }
          }
        }
      },
      "RunnerConfigsRefreshMetadataRequestBody": {
        "type": "object",
        "additionalProperties": false
      },
      "RunnerConfigsRefreshMetadataResponse": {
        "type": "object",
        "additionalProperties": false
      },
      "RunnerConfigsServerlessHealthCheckRequest": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "propertyNames": {
              "type": "string"
            }
          },
          "url": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "RunnerConfigsServerlessHealthCheckResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "success"
            ],
            "properties": {
              "success": {
                "type": "object",
                "required": [
                  "version"
                ],
                "properties": {
                  "version": {
                    "type": "string"
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "failure"
            ],
            "properties": {
              "failure": {
                "type": "object",
                "required": [
                  "error"
                ],
                "properties": {
                  "error": {
                    "$ref": "#/components/schemas/RunnerConfigsServerlessMetadataError"
                  }
                }
              }
            }
          }
        ]
      },
      "RunnerConfigsServerlessMetadataError": {
        "type": "object",
        "description": "Wire-format envelope for serverless metadata errors.\n\nSurfaced to API clients with a stable `{message, details, metadata}` shape\nregardless of which internal `ServerlessMetadataError` variant produced it.\n`metadata.kind` discriminates the variant; per-variant fields live alongside\n`kind`.",
        "required": [
          "message"
        ],
        "properties": {
          "details": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string"
          },
          "metadata": {}
        }
      },
      "RunnerConfigsUpsertRequestBody": {
        "type": "object",
        "required": [
          "datacenters"
        ],
        "properties": {
          "datacenters": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/RunnerConfig"
            },
            "propertyNames": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "RunnerConfigsUpsertResponse": {
        "type": "object",
        "required": [
          "endpoint_config_changed"
        ],
        "properties": {
          "endpoint_config_changed": {
            "type": "boolean"
          }
        }
      },
      "RunnersListNamesResponse": {
        "type": "object",
        "required": [
          "names",
          "pagination"
        ],
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "additionalProperties": false
      },
      "RunnersListResponse": {
        "type": "object",
        "required": [
          "runners",
          "pagination"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "runners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Runner"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "bearer_auth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "security": [
    {
      "bearer_auth": []
    }
  ]
}