> 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 `, 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" } } ```