POST /audio/streams/{id}/signals
Attach signals to a stream's timeline: small facts a client observed, such as a meeting's active speaker, device motion, a wakeword, or a chat message. Each has a ref unique within the stream, a lowercase dotted type, start_ms (and optional end_ms) in the stream's own timeline, and a JSON object payload of at most 8192 bytes. Plum stores and returns signals as sent and does not interpret them; payloads of known types are not validated. At most 500 per request, written atomically. Re-posting a ref with identical content is a no-op; a ref already stored with different content returns 409 and stores nothing from the request. Signals never replace a stream's end or gaps.
/audio/streams/{id}/signalsAuthorization
bearerAuth Send Authorization: Bearer <token> with one of: an app session access token from /auth/verify-otp or /auth/refresh; an OAuth access token from /oauth/token issued for the API origin (its scopes are its permissions); or a personal access token starting with optima_pat_ (see /docs/personal-access-tokens). Personal access tokens cannot create or list tokens, revoke other tokens, sign out, or delete or restore the account. Content routes need the permission of their layer: audio:read/audio:write for recordings, turns:read/turns:write for turns, contacts, source signals, and events, and insights:read/insights:write for suggestions and session summaries; search and recall need turns:read and insights:read. A request without the permission, or for an account whose layer is turned off, returns 403 FORBIDDEN. See /docs/authentication#scopes.
In: header
Path Parameters
uuidHeader Parameters
Send 1 to pin the documented API contract. If omitted, the latest version is selected.
"1"Value in
- "1"
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/audio/streams/497f6eca-6276-4993-bfeb-53cbbbba6f08/signals" \ -H "X-API-Version: 1" \ -H "Content-Type: application/json" \ -d '{ "signals": [ { "ref": "string", "type": "string", "start_ms": 0 } ] }'{ "success": true, "data": { "items": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "ref": "string", "type": "string", "start_ms": 0, "end_ms": 0, "payload": { "property1": null, "property2": null }, "payload_state": { "state": "string", "removed_at": "2019-08-24T14:15:22Z" }, "created_at": "2019-08-24T14:15:22Z" } ] }}GET /audio/streams/{id}/signals GET
List a stream's signals by start time, then id. Filter by exact type and by an inclusive stream-time range: from_ms keeps signals that end at or after it (a moment ends where it starts) and to_ms keeps signals that start at or before it. Payloads are stored as sent; chat text is user content.
Sign out POST
Next Page