OpenSequence
DocsAPI referenceSDKs and CLIReference
Analytics

Analytics endpoints

Summary, exits, nodes, channels and the cross-sequence table; what each number means.

Edit on GitHub
curl
curl $SEQ/v1/sequences/seq_01J9…/analytics/summary  -H "Authorization: Bearer $KEY"
curl $SEQ/v1/sequences/seq_01J9…/analytics/exits    -H "Authorization: Bearer $KEY"
curl $SEQ/v1/sequences/seq_01J9…/analytics/nodes    -H "Authorization: Bearer $KEY"
curl $SEQ/v1/sequences/seq_01J9…/analytics/channels -H "Authorization: Bearer $KEY"
curl "$SEQ/v1/analytics/sequences?min_enrolled=20"  -H "Authorization: Bearer $KEY"

All five take version, from, to, sender and country; scope read. Rates are per 100 and rounded to one decimal; a rate with no denominator is null, never NaN.

Summary

GET /v1/sequences/{id}/analytics/summary

FieldMeaning
enrolledenrollments created (in the filter)
active, exited, completedby current status (active includes paused and waiting_limit)
touches_deliveredoutreach runs whose message was delivered (sent at for Gmail, which has no receipt; Allo's sms.sent); the second denominator
replies, meetingsenrollments with a first reply or a first meeting
reply_rate_per_100_enrolled, meeting_rate_per_100_enrolledper enrolled
reply_rate_per_100_delivered, meeting_rate_per_100_deliveredper delivered touch
replies_by_channel{ email, sms, call, linkedin } counts of attributed replies

Exits

GET /v1/sequences/{id}/analytics/exits returns exits: [{ reason, count }] largest first: replied, meeting_booked, opt_out, bounced, suppressed, manual, deleted.

Nodes

GET /v1/sequences/{id}/analytics/nodes returns one row per step:

FieldMeaning
node_id, node_type, channelthe step
reachedruns of this node
executedoutreach runs that were sent
skipped, skipped_by_reasonruns a gate refused, with { no_consent: 12, suppressed: 3, … }
failedruns that ran out of retries
delivered, bouncedfrom the run's recorded outcome
replies, meetingssignals attributed to this step's runs
reply_rate_per_100_delivered
median_time_to_reply_secondsmedian of reply time minus send time

Channels

GET /v1/sequences/{id}/analytics/channels returns one row per (channel, touch_number): reached, sent, skipped, delivered, bounced, replies, meetings, reply_rate_per_100_sent, meeting_rate_per_100_sent. The split by touch number is deliberate: SMS usually comes later and to warmer contacts, so an email-versus-SMS chart is only fair at the same position in the sequence.

Cross-sequence

GET /v1/analytics/sequences?min_enrolled= returns every sequence of the project with enrolled, replies, meetings, replies_per_100_enrolled, meetings_per_100_enrolled, ranked by replies then meetings per 100 enrolled; min_enrolled hides tiny samples.

The architecture document also lists GET /v1/analytics/channels (all sequences compared by channel) and a 60-second cache. Neither exists in the code today.

What a client can show

ScreenNumbersEndpoint
Sequence overviewreplies and meetings (rate vs enrolled and delivered), replies by channel, exit reasonssummary, exits
Per stepreached, executed, skipped by reason, failed, delivered, bounced, replies, meetings, median time to replynodes
Channel comparisonper channel and touch numberchannels
By versionany of the above with ?version=
Cross-sequencesequences ranked by replies and meetings per 100 enrolled/v1/analytics/sequences

On this page