Skip to content

Ingest

POST
/users/{user_id}/meeting-signals
curl --request POST \
--url https://example.com/users/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/meeting-signals \
--header 'Content-Type: application/json' \
--data '{ "meetings": [ { "duration_min": 1, "external_id": "example", "meeting_type": "one_on_one", "occurred_at": "2026-04-15T12:00:00Z", "participant_count": 1, "rubric_version": "example", "scorer": "example", "sentiment_arousal": 1, "sentiment_valence": 1, "talk_share": 1, "turn_count": 1 } ] }'

Bulk-upsert derived meeting signals (idempotent on user+external_id) and recompute the affected days’ meeting metrics (sentiment / engagement / count).

user_id
required
User Id
string format: uuid
Media typeapplication/json
MeetingSignalsBatchIngest
object
meetings
required
Meetings
Array<object>
<= 500 items
MeetingSignalIngest

One captured meeting’s derived signals. The transcript is read + scored upstream (Claude via the Granola MCP); only these scores are sent. external_id is Granola’s opaque meeting UUID and the dedup key — re-deriving the same meeting updates its row in place.

object
duration_min
Any of:
number
external_id
required
External Id
string
<= 200 characters
meeting_type
Any of:
string
Allowed values: one_on_one small_group large
occurred_at
required
Occurred At
string format: date-time
participant_count
Any of:
integer
rubric_version
Any of:
string
<= 40 characters
scorer
Any of:
string
<= 100 characters
sentiment_arousal
Any of:
number
<= 1
sentiment_valence
Any of:
number
>= -1 <= 1
talk_share
Any of:
number
<= 1
turn_count
Any of:
integer

Successful Response

Media typeapplication/json
MeetingSignalsIngestResult
object
created
required
Created
integer
days_recomputed
required
Days Recomputed
integer
updated
required
Updated
integer
Examplegenerated
{
"created": 1,
"days_recomputed": 1,
"updated": 1
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example"
}
]
}