## Add Frame `client.streams.addFrame(stringnamespace, StreamAddFrameParamsbody, RequestOptionsoptions?): StreamAddFrameResponse` **post** `/v1/streams/{namespace}/frames` Ingest a single livestream frame as an image data URI plus relative timestamp in milliseconds. The stream does not need to be created beforehand. Only image/jpeg, image/png, and image/webp are accepted. The decoded bytes must match the declared mime type, decode as a valid image, stay within 5 MB, and stay within 4096x4096 / 16,000,000 total pixels. Timestamps are relative milliseconds from stream start and must be unique and strictly increasing within a stream. Duplicate or out-of-order frame timestamps are accepted at the API boundary but ignored by downstream processing. This method returns immediately after the frame has been accepted for processing. ### Parameters - `namespace: string` The namespace to ingest stream data into - `body: StreamAddFrameParams` - `image_data_uri: string` A data URI containing a base64-encoded frame image. Only image/jpeg, image/png, and image/webp are accepted. The decoded bytes must match the declared mime type, decode as a valid image, stay within 5 MB, and stay within 4096x4096 / 16,000,000 total pixels. - `stream_id: string` - `timestamp: number` ### Returns - `StreamAddFrameResponse` Stream ingestion request accepted for asynchronous processing. - `requestId: string` - `status: "accepted"` - `"accepted"` ### Example ```typescript import Safetykit from 'safetykit'; const client = new Safetykit({ apiKey: process.env['SAFETYKIT_API_KEY'], // This is the default and can be omitted }); const response = await client.streams.addFrame('namespace', { image_data_uri: 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoQABAAPm02mUmkIyIh...', stream_id: 'YOUR_STREAM_ID', timestamp: 1000, }); console.log(response.requestId); ```