---
title: Endpoints | Runware Docs
url: https://runware.ai/docs/serverless/api-endpoints
description: Read the callable paths an application exposes on its active version.
relatedDocuments:
  - https://runware.ai/docs/serverless/api
  - https://runware.ai/docs/serverless/invoking
  - https://runware.ai/docs/serverless/writing-a-model
---
## Introduction

Endpoints are **read-only here, because they come from your source rather than from an API call**. A code app derives them from the methods you decorated, and a container app declares them in its `container.yaml`.

A path is **one or more lowercase segments joined by slashes, with no leading slash**, such as `generate` or `v1/chat/completions`. Each segment is up to 64 characters, the whole path up to 255, and an app serves at most 20 of them. What this page reports is the set on the app's **active version**, which is what a request can actually reach today.

`default: true` marks **the endpoint a root invocation reaches**: the one the app marks as its default, or its only endpoint when it has exactly one. The field is omitted on every other endpoint.

## List endpoints

GETapi.serverless.runware.ai/v1/apps/{appId}/endpoints

Lists the endpoints of the app's active version. The set is written by the source itself, a code build's introspection, or a container's config document, and is replaced atomically whenever a version activates, so a deploy of a newer version or a rollback to an older one is immediately reflected here. Empty while the app is `initializing`: nothing is routable until its first build is ready and deployed. Each row may include `runtime` (status, req/min, p95, p99) from the latest 5-minute Insights window. Those fields are omitted when metrics cannot be read or the endpoint has no samples. Identity always comes from Postgres.

### [Request](#list-endpoints-request)

Path

### [appId](#list-endpoints-path-appid)

- **Type**: `string`
- **Required**: true
- **Min**: `6`
- **Max**: `30`

Immutable app identifier, unique among the authenticated organization's live apps.

Query

### [limit](#list-endpoints-query-limit)

- **Type**: `integer`
- **Format**: `int32`
- **Min**: `1`
- **Max**: `100`
- **Default**: `20`

Maximum number of items to return.

### [cursor](#list-endpoints-query-cursor)

- **Type**: `string`

Opaque pagination cursor returned by a previous call, as `nextCursor` or, on the operations that offer one, `prevCursor`.

### [Response](#list-endpoints-response)

### [nextCursor](#list-endpoints-response-nextcursor)

- **Type**: `string (nullable)`

Cursor for the next page. Null when there are no more items.

### [data](#list-endpoints-response-data)

- **Type**: `object[] (11 properties)`

#### [id](#list-endpoints-response-data-id)

- **Type**: `string (uuid)`
- **Required**: true
- **Format**: `UUID v4`

#### [appId](#list-endpoints-response-data-appid)

- **Type**: `string`
- **Required**: true
- **Min**: `6`
- **Max**: `30`

Immutable app identifier. Unique among the authenticated organization's live apps: it cannot be changed after creation, and it becomes available again once the app it named reaches `deleted`.

#### [path](#list-endpoints-response-data-path)

- **Type**: `string`
- **Required**: true

The endpoint's identity within the app: one or more bare lowercase segments joined by slashes, such as `generate` or `v1/chat/completions`, with no leading or trailing slash. Unique within the app, so it identifies the endpoint on its own.

#### [default](#list-endpoints-response-data-default)

- **Type**: `boolean`

True when this endpoint is the one a root invocation addresses. Omitted when it is not. An app marks one endpoint at most.

#### [createdAt](#list-endpoints-response-data-createdat)

- **Type**: `string (date-time)`
- **Format**: `date-time`

#### [updatedAt](#list-endpoints-response-data-updatedat)

- **Type**: `string (date-time)`
- **Format**: `date-time`

#### [runtime](#list-endpoints-response-data-runtime)

- **Type**: `object (4 properties)`

Latest-window traffic for one endpoint. Identity stays on the parent `Endpoint`. These fields come from Insights and are omitted independently when their backing series has no samples. The whole object is omitted when Insights is unset, times out, or the endpoint had no request samples. Zero is a reading, not an absence.

##### [status](#list-endpoints-response-data-runtime-status)

- **Type**: `string`

Badge derived from the latest-window error ratio (4xx + 5xx over requests). Not stored: there is no endpoint status column. Omitted when metrics cannot be read or the endpoint had no requests in the window. `healthy` is a zero ratio, `degraded` is below 0.05, `unhealthy` is 0.05 and above.

**Possible values**: `healthy` `degraded` `unhealthy`

##### [requestsPerMinute](#list-endpoints-response-data-runtime-requestsperminute)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

5-minute request rate (`rate(rw_requests_total[5m]) * 60`), in req/min. Not derived from the 24h sparkline counts.

##### [p95RequestDuration](#list-endpoints-response-data-runtime-p95requestduration)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

Latest-window p95 request duration in seconds (all requests, the duration histogram has no status class).

##### [p99RequestDuration](#list-endpoints-response-data-runtime-p99requestduration)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

Latest-window p99 request duration in seconds (all requests, the duration histogram has no status class).

### [Errors](#list-endpoints-errors)

<table><tbody><tr><td data-rw-cid-pz7tphoj="true">Status</td><td data-rw-cid-pz7tphoj="true">When</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">400</code></td><td data-rw-cid-pz7tphoj="true">The request was malformed and could not be parsed (e.g. invalid JSON). A well-formed request that fails validation returns <code class="component-Code">422</code> instead.</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">401</code></td><td data-rw-cid-pz7tphoj="true">Missing or invalid credentials</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">404</code></td><td data-rw-cid-pz7tphoj="true">Resource not found</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">422</code></td><td data-rw-cid-pz7tphoj="true">The request was well-formed but semantically invalid (e.g. a missing or out-of-range field). A request that could not be parsed returns <code class="component-Code">400</code>. The <code class="component-Code">errors</code> array carries one entry per offending field.</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">500</code></td><td data-rw-cid-pz7tphoj="true">Unexpected server error</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">503</code></td><td data-rw-cid-pz7tphoj="true">A required service is temporarily unavailable</td></tr></tbody></table>

## Get an endpoint

GETapi.serverless.runware.ai/v1/apps/{appId}/endpoints/{endpointId}

Returns one live endpoint on the app. `runtime` is the same optional latest-window traffic as `listEndpoints` and is omitted when metrics cannot be read or the endpoint has no samples.

### [Request](#get-endpoint-request)

Path

### [appId](#get-endpoint-path-appid)

- **Type**: `string`
- **Required**: true
- **Min**: `6`
- **Max**: `30`

Immutable app identifier, unique among the authenticated organization's live apps.

### [endpointId](#get-endpoint-path-endpointid)

- **Type**: `string (uuid)`
- **Required**: true
- **Format**: `UUID v4`

### [Response](#get-endpoint-response)

### [id](#get-endpoint-response-id)

- **Type**: `string (uuid)`
- **Required**: true
- **Format**: `UUID v4`

### [appId](#get-endpoint-response-appid)

- **Type**: `string`
- **Required**: true
- **Min**: `6`
- **Max**: `30`

Immutable app identifier. Unique among the authenticated organization's live apps: it cannot be changed after creation, and it becomes available again once the app it named reaches `deleted`.

### [path](#get-endpoint-response-path)

- **Type**: `string`
- **Required**: true

The endpoint's identity within the app: one or more bare lowercase segments joined by slashes, such as `generate` or `v1/chat/completions`, with no leading or trailing slash. Unique within the app, so it identifies the endpoint on its own.

### [default](#get-endpoint-response-default)

- **Type**: `boolean`

True when this endpoint is the one a root invocation addresses. Omitted when it is not. An app marks one endpoint at most.

### [createdAt](#get-endpoint-response-createdat)

- **Type**: `string (date-time)`
- **Format**: `date-time`

### [updatedAt](#get-endpoint-response-updatedat)

- **Type**: `string (date-time)`
- **Format**: `date-time`

### [runtime](#get-endpoint-response-runtime)

- **Type**: `object (4 properties)`

Latest-window traffic for one endpoint. Identity stays on the parent `Endpoint`. These fields come from Insights and are omitted independently when their backing series has no samples. The whole object is omitted when Insights is unset, times out, or the endpoint had no request samples. Zero is a reading, not an absence.

#### [status](#get-endpoint-response-runtime-status)

- **Type**: `string`

Badge derived from the latest-window error ratio (4xx + 5xx over requests). Not stored: there is no endpoint status column. Omitted when metrics cannot be read or the endpoint had no requests in the window. `healthy` is a zero ratio, `degraded` is below 0.05, `unhealthy` is 0.05 and above.

**Possible values**: `healthy` `degraded` `unhealthy`

#### [requestsPerMinute](#get-endpoint-response-runtime-requestsperminute)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

5-minute request rate (`rate(rw_requests_total[5m]) * 60`), in req/min. Not derived from the 24h sparkline counts.

#### [p95RequestDuration](#get-endpoint-response-runtime-p95requestduration)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

Latest-window p95 request duration in seconds (all requests, the duration histogram has no status class).

#### [p99RequestDuration](#get-endpoint-response-runtime-p99requestduration)

- **Type**: `number`
- **Format**: `double`
- **Min**: `0`

Latest-window p99 request duration in seconds (all requests, the duration histogram has no status class).

### [Errors](#get-endpoint-errors)

<table><tbody><tr><td data-rw-cid-pz7tphoj="true">Status</td><td data-rw-cid-pz7tphoj="true">When</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">400</code></td><td data-rw-cid-pz7tphoj="true">The request was malformed and could not be parsed (e.g. invalid JSON). A well-formed request that fails validation returns <code class="component-Code">422</code> instead.</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">401</code></td><td data-rw-cid-pz7tphoj="true">Missing or invalid credentials</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">404</code></td><td data-rw-cid-pz7tphoj="true">Resource not found</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">422</code></td><td data-rw-cid-pz7tphoj="true">The request was well-formed but semantically invalid (e.g. a missing or out-of-range field). A request that could not be parsed returns <code class="component-Code">400</code>. The <code class="component-Code">errors</code> array carries one entry per offending field.</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">500</code></td><td data-rw-cid-pz7tphoj="true">Unexpected server error</td></tr><tr><td data-rw-cid-pz7tphoj="true"><code data-rw-cid-pz7tphoj="">503</code></td><td data-rw-cid-pz7tphoj="true">A required service is temporarily unavailable</td></tr></tbody></table>