> This is the Markdown version of the page. For the complete Lattice Developers documentation index, fetch https://developer.anduril.com/llms.txt. Append .md to any page URL for its clean Markdown.

# Create ingress stream

POST https://example.developer.anduril.com/api/v1/video/ingress_streams
Content-Type: application/json

Creates a video ingress stream, returning metadata that you can use to stream live video to
 Lattice. Exactly one of `rtsp` or `srt` must be set on the request.

Reference: https://developer.anduril.com/reference/rest/video/create-ingress-stream

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a CreateIngressStreamRequest.

- `ingressId` (string, optional) — Caller-supplied identifier for the new stream. If omitted, the service generates a GUID. If supplied, a consistent and recognizable pattern is recommended. A common convention is a group prefix (organization, platform, or asset) followed by a specific identifier using underscore or dot as a separator, for example, `drone_1`, `vessel_2`, or `teamalpha.drone1`. When supplied, an ingressId must be between 4 and 36 characters long and use only printable ASCII characters with no spaces; the 36-character ceiling leaves room for a full GUID. A value outside that length range, or one containing spaces, control characters, or non-ASCII characters, is rejected, as is an ingressId that another ingress stream is already using.
- `title` (string, optional) — Human-readable title for the stream. A title is required: surrounding whitespace is trimmed before it is stored, and what remains must be non-empty, valid UTF-8, and no longer than 64 characters. Otherwise the request is rejected.
- `mpegTs` (MpegTsSettings, optional) — Receive an MPEG-TS push from the producer. The service allocates a UDP port and returns the URL the producer must push to in CreateIngressStreamResponse. MPEG-TS ingress is supported only at the edge, in closed networks. When Lattice runs in a cloud environment reached over the public internet, MPEG-TS ingress may be disabled per deployment. When it is disabled, a request that selects `mpegTs` is rejected with a gRPC error rather than accepted, so callers should be prepared to fall back to RTSP or SRT. An MPEG-TS stream created at the edge can still be listed and inspected on the IngressStream read model even when cloud ingress is disabled.
- `rtsp` (RtspSettings, optional) — Pull from a caller-supplied RTSP URL.
- `srt` (SrtSettings, optional) — Receive an SRT push from the producer. The service returns a URL and sessionId in CreateIngressStreamResponse.

## Response

### 200

OK

- `ingressId` (string, optional) — Identifier of the newly created ingress stream. Echoes the caller-supplied `ingressId` if one was provided, otherwise a service-generated GUID.
- `mpegTs` (MpegTsIngress, optional) — Connection details for an MPEG-TS push. Only returned when the request selected `mpegTs` and MPEG-TS ingress is enabled for the deployment. MPEG-TS ingress is supported only at the edge, in closed networks; in a cloud environment reached over the public internet it may be disabled per deployment, in which case the create request is rejected and this field is never populated.
- `srt` (SrtIngress, optional) — SRT ingress connection details. Returned to the producer so it knows where to push the stream.

## Errors

### 400 Bad Request Error

The request was malformed or violated a precondition. Possible causes include missing required fields, an unsupported value, an `oneof` with zero or more than one variant set, a malformed URL, or a state-based precondition such as the source ingress stream not being live.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 401 Unauthorized Error

The request was rejected because the bearer token was missing, malformed, or could not be resolved to a user identity.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 403 Forbidden Error

The caller is authenticated but lacks permission for the requested resource.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 404 Not Found Error

The specified ingress or egress stream was not found.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 409 Conflict Error

The supplied identifier is already in use. For ingress creation this means the requested `ingressId` is taken by another stream; for egress creation an egress stream already exists for the requested source.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 429 Too Many Requests Error

A service-wide resource pool is exhausted. For egress this means a port could not be allocated or the egress instance is at capacity. There is no per-caller quota or rate limit, so this reflects deployment-wide capacity rather than caller behavior.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

### 503 Service Unavailable Error

The service is temporarily unable to handle the request, such as during startup or when a backend dependency is shutting down. The response carries a RetryInfo hint (typically around 2 seconds); clients should retry per that hint.

- `code` (integer, optional) — The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- `message` (string, optional) — A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- `details` (list of google.protobuf.Any, optional) — A list of messages that carry the error details. There is a common set of message types for APIs to use.

## Types

### MpegTsSettings

Settings for MPEG-TS ingress. Empty by default, the service allocates a UDP port from a service-wide pool and returns the push URL in CreateIngressStreamResponse. MPEG-TS ingress is supported only at the edge, in closed networks. When Lattice runs in a cloud environment reached over the public internet, MPEG-TS ingress may be disabled per deployment. When it is disabled, a CreateIngressStream request that selects `mpegTs` is rejected with a gRPC error rather than accepted, so callers should be prepared to fall back to RTSP or SRT. An MPEG-TS stream created at the edge can still be listed and inspected on the IngressStream read model even when cloud ingress is disabled.

### RtspSettings

Settings for RTSP.

- `url` (string, optional) — The upstream RTSP URL the service should pull frames from. Must use the `rtsp://` scheme.

### SrtSettings

The Lattice video service supports SRT protocol for push operations (ingress) and pull operations (egress). When configuring SRT for ingress, CreateIngressStreamResponse will return to the user a url to push to which contains a unique `sessionId` to use on the connection. If supplied, passphrase will be applied on incoming connections. When configuring SRT for egress, CreateEgressStreamResponse will return to the user a url from which to pull a stream. Use the supplied sessionId and passphrase in your StreamId if applicable. See the SRT documentation on Access Control for more information.

- `passphrase` (string, optional) — Optional passphrase for the stream, set by the user, that applies AES encryption.

### MpegTsIngress

MPEG-TS ingress connection details. MPEG-TS ingress is supported only at the edge, in closed networks; in a cloud environment reached over the public internet it may be disabled per deployment. These details are populated only when a stream was successfully created with `mpegTs`. An MPEG-TS stream created at the edge can still be listed and inspected on the IngressStream read model even when cloud ingress is disabled.

- `url` (string, optional) — The URL that the producer should push the MPEG-TS stream to.

### SrtIngress

SRT ingress connection details. Returned to the producer so it knows where to push the stream.

- `url` (string, optional) — The URL the producer should push the SRT stream to.
- `sessionId` (string, optional) — Unique session identifier the producer must include on the SRT connection. See SrtSettings for context.

### google.protobuf.Any

Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.

- `@type` (string, optional) — The type of the serialized message.

## Examples

**Request**

```json
{}
```

**Response**

```json
{
  "ingressId": "string",
  "mpegTs": {
    "url": "string"
  },
  "srt": {
    "url": "string",
    "sessionId": "string"
  }
}
```