Skip to main content
GET
Read one activity row

Authorizations

X-API-Key
string
header
required

Path Parameters

activity_id
string<uuid>
required

Response

Successful Response

One email or LinkedIn step that went out as a sender, or a task a person refused.

agent_written
boolean
required

Whether the outbound agent wrote the words.

ask_reason
enum<string> | null
required

Why it was held for a person before it went; null when it was not held.

Available options:
low_confidence,
findings,
insufficient_data,
policy,
always_ask,
sequence_manual,
step_requires_approval,
daily_cap,
unverified_sender,
suppressed,
different_sender,
label,
question,
consecutive_cap,
thread_cap,
hourly_cap,
org_daily_cap,
stale_inbound,
sequence_gone,
bot_question,
automated_counterparty,
kill_switch,
authentication,
language,
linkedin_only,
send_interrupted,
sender_switched_to_manual
audience_table_id
string<uuid> | null
required

The table the sequence reads its audience from, for opening the contact's row; null outside a sequence or when the sequence is gone.

background
boolean
required

Whether this is one of our own LinkedIn reads of the sender's account (the inbox, the sent connection requests, the newest connections, one conversation), which acts on nobody.

body
string | null
required

The words as they went out, or would have for a refusal; for a Browser use run, the site it worked on.

channel
enum<string>
required

Which channel performs the task once it is allowed to run.

BROWSER is the one channel that performs nothing: a Browser use run that settled on Needs human leaves a task for a person to pick up what the agent could not do (BU-08). Its contact already went on down the Needs human arm, so the task is a to-do with one verb, done, and no approval or rejection reaches it.

Available options:
linkedin,
email,
browser
contact_identity
string | null
required

The address or LinkedIn profile behind the label.

contact_label
string
required

The contact as the queue names them: a name, else an address or profile.

decided_at
string<date-time> | null
required
decided_by_display_name
string | null
required

Who approved it, refused it or sent it: a person's name, an API key's, or the platform's. Null when nobody did.

decision
enum<string>
required

Who let one unit of outreach go, or refused it.

APPROVED: a person (or an API key) approved it before it went. AUTOMATIC: nobody was asked; the sender's or the sequence's rules let it go. REJECTED: a person refused it, so it never went. SENT_BY_PERSON: a person wrote it and sent it themselves, from the inbox. NOT_RECORDED: a LinkedIn step that ran before Activity existed whose approval a later step of the same contact has since overwritten; saying so is truer than guessing.

Available options:
approved,
automatic,
rejected,
sent_by_person,
not_recorded
detail
string | null
required

Why it failed, in the channel's words, or why the person refused it; for a Browser use run, why it needed a person or failed.

enrolment_id
string<uuid> | null
required

The contact's place in the sequence, for opening them on its Audience tab.

error_code
string | null
required

The LinkedIn step's error code, or for a skip its specific reason, for the words every LinkedIn surface gives it.

hand_edited
boolean
required

A person edited the agent's words before they went, so Needs work is refused on them.

id
string<uuid>
required
kind
string
required

The LinkedIn action slug, or email (a sequence's email), reply, or browser_use (a settled Browser use run, on the browser channel).

linkedin_action_id
string<uuid> | null
required
looks_good
boolean
required

A person marked the words that went out Looks good (PUT /agent-learnings/sent-messages/{message_id}/looks-good/).

mailbox_address
string | null
required

The address an email left from; null for LinkedIn.

mailbox_id
string<uuid> | null
required
occurred_at
string<date-time>
required

When it was sent, when the LinkedIn step ended, or when it was refused.

outbound_message_id
string<uuid> | null
required

The outbound agent's message whose words went out (or would have, for a refusal): a sequence's email or LinkedIn step, a connection request's note, an approved reply. A thumbs down on what went out is given on it (message:<id>), whether or not it had a task. Null when the agent wrote none of the words, and on rows from before it was kept that nothing could fill.

outcome
enum<string>
required

How one unit of outreach ended.

SENT is an email the provider accepted, or a LinkedIn message, InMail or connection request that went out, so one thing reads one way on both channels (2026-10-21); DONE a LinkedIn step that only acted on a profile (a view, a follow, a like, a withdrawal). SKIPPED is a step that did not apply or was passed over in the extension; ALREADY_PENDING the one skip every LinkedIn surface names apart, a connection request somebody had already sent; STOPPED one stopped while a browser ran it. NOT_SENT is a task a person refused, which never reached its channel. RECEIVED is the one row that is not ours: a message the contact sent us, or their acceptance of our connection request (ReceivedActivityKind, review AC-11).

A Browser use run (BU-18) settles DONE on one of its step's outcomes, NEEDS_HUMAN when it left the contact for a person, or FAILED.

Available options:
sent,
done,
failed,
skipped,
already_pending,
stopped,
not_sent,
received,
needs_human
record_id
string<uuid> | null
required

The contact's row in the sequence's audience table.

sender_profile_id
string<uuid>
required
sender_profile_name
string | null
required

The sender it went out as; null when the sender was since deleted.

sequence_id
string<uuid> | null
required
sequence_name
string | null
required
step_id
string<uuid> | null
required
step_name
string | null
required

The step as its card in the Builder names it; null outside a sequence.

step_position
integer | null
required
subject
string | null
required

An email's subject line; for a Browser use run, the outcome it settled on (null for Needs human and a failure).

task_id
string<uuid> | null
required

Its task on the Tasks page, when it had one.

thread_id
string<uuid> | null
required

The inbox conversation, when there is one.

acted_at
string<date-time> | null

When a LinkedIn step acted on LinkedIn. Set on a step marked failed means it went through after all, after it was marked failed.

contact_company
string | null

The contact's company, from their audience row.

contact_title
string | null

The contact's job title, from their audience row.

found_already
boolean
default:false

A step that was cut off, came back, and found its own earlier attempt had already done it.

proposed_learning_event_id
string<uuid> | null

The feedback session waiting on the words that went out (outbound_message_id): notes were given (message:<id>) and what they would teach waits for Looks good, which saves it, or Discard feedback, which drops it. The row's 'Unfinished feedback' chip. Read it with GET /agent-learnings/thumbs-downs/{event_id}/. Null when none waits.

sent_without_note
boolean
default:false

A connection request LinkedIn sent the moment Connect was pressed, before its note could be added: the connection request went, the note did not.