API reference/Outreach/Flows
List flows
The ready-made flows and the workspace’s own, with their steps.
A flow is the skeleton of a sequence without its texts: which steps, on which channel, in which order and branch, after how many days. Any channel in any order: emails you send yourself, a call or another human task, and LinkedIn steps, with or without a LinkedIn invite, for example an email, a call and an email, or a call, a LinkedIn message and an email. A flow with nothing on LinkedIn (only emails and human tasks) needs no LinkedIn account, no LinkedIn profile of the person (an email address does) and no month of LinkedIn outreach (uses_linkedin). You write the texts per person when you start (POST /outreach/linkedin/sequences with flow and texts, or start_flow on the assistant server), and the sequence then has exactly the steps of the flow. There are ready-made flows (invite_note_then_message, invite_then_message, invite_note_two_follow_ups, invites_only, invite_then_inmail, like_then_invite, email_then_invite, email_then_call, emails_only) and the workspace’s own, at most 100. These routes are the tools list_flows, get_flow, save_flow, delete_flow and assign_flow of the assistant server. Free.
Authentication#
Send Authorization: Bearer gtk_…. Create the key under API keys in the menu. Every gtk_ key can call these routes, also while the Signals API is closed. A missing, invalid or revoked key is 401.
Response#
objectstring· required — Alwayslist. One of:list.totalinteger· required — How many flows there are.default_flowstring | null· required — The key of the default flow, which every lead without a flow of its own follows; null until the workspace has a flow of its own.dataobject[]· required — The flows: the ready-made ones first, then the workspace’s own, oldest first. Each as GET /outreach/flows/{key} gives it.dashboard_urlstring· required — The flows in mySDR.
Credits#
Free. This call never uses credits.
Errors#
- 401
authentication_error— The Authorization header is missing, or the key is unknown or revoked. - 403
permission_error— API access is not part of your plan, or your account is suspended. - 429
rate_limit_error— More than 60 requests per minute, or more than 3 at the same time, on one key. Wait for the Retry-After header. - 503
service_unavailable— The API is temporarily unavailable. Retry later. - 500
internal_error— Something went wrong on our side.
Example
curl "https://mysdr.app/api/v1/outreach/flows" \
-H "Authorization: Bearer $MYSDR_API_KEY"{
"object": "list",
"total": 2,
"default_flow": "cfo_after_funding",
"data": [
{
"object": "flow",
"key": "invite_note_then_message",
"name": "Invite with a note, then a message",
"description": "An invite with a note; once accepted, a message a few minutes later. Not accepted after 16 days: the invite is withdrawn.",
"preset": true,
"based_on": "linkedin_invite_note_message",
"steps": [
{
"key": "invite",
"type": "linkedin_invite",
"branch": "start",
"note": true,
"wait_days": 0,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "message_1",
"type": "linkedin_message",
"branch": "after_accept",
"wait_days": 0,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "withdraw",
"type": "withdraw_invite",
"branch": "not_accepted",
"wait_days": 16,
"text": false,
"subject": false,
"sent_by": "mysdr"
}
],
"channels": [
"linkedin"
],
"uses_linkedin": true,
"has_invite": true,
"text_steps": [
"invite",
"message_1"
],
"email_steps": [],
"inmail_steps": [],
"human_task_steps": [],
"ready_needs": {
"texts": [
"invite",
"message_1"
],
"subjects": []
},
"in_words": [
"invite: an invite with a note.",
"message_1: a message right after the invite is accepted.",
"Already a connection: nothing goes out (they get no invite either).",
"withdraw: not accepted after 16 days, the invite is withdrawn and the sequence ends.",
"An email in a branch follows that branch: it only goes out once it is clear whether the invite was accepted.",
"A reply stops the sequence for that person."
],
"created_at": null,
"updated_at": null,
"via": null,
"archived": false,
"reply_handling": {
"notify_positive": false,
"agent_closes_negative": false
},
"approval_required": true,
"dashboard_url": "https://mysdr.app/en/gtm/flows?flow=invite_note_then_message",
"is_default": false
},
{
"object": "flow",
"key": "cfo_after_funding",
"name": "CFOs after funding",
"description": "For CFOs at companies that just raised.",
"preset": false,
"based_on": "invite_note_two_follow_ups",
"steps": [
{
"key": "invite",
"type": "linkedin_invite",
"branch": "start",
"note": true,
"wait_days": 0,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "message_1",
"type": "linkedin_message",
"branch": "after_accept",
"wait_days": 0,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "follow_up_1",
"type": "linkedin_message",
"branch": "after_accept",
"wait_days": 3,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "connected_1",
"type": "linkedin_message",
"branch": "if_connected",
"wait_days": 0,
"text": true,
"subject": false,
"sent_by": "mysdr"
},
{
"key": "withdraw",
"type": "withdraw_invite",
"branch": "not_accepted",
"wait_days": 16,
"text": false,
"subject": false,
"sent_by": "mysdr"
}
],
"channels": [
"linkedin"
],
"uses_linkedin": true,
"has_invite": true,
"text_steps": [
"invite",
"message_1",
"follow_up_1",
"connected_1"
],
"email_steps": [],
"inmail_steps": [],
"human_task_steps": [],
"ready_needs": {
"texts": [
"invite",
"message_1",
"follow_up_1",
"connected_1"
],
"subjects": []
},
"in_words": [
"invite: an invite with a note.",
"message_1: a message right after the invite is accepted.",
"follow_up_1: a message 3 days after the previous step.",
"connected_1: for an existing connection, a message at the start.",
"withdraw: not accepted after 16 days, the invite is withdrawn and the sequence ends.",
"An email in a branch follows that branch: it only goes out once it is clear whether the invite was accepted.",
"A reply stops the sequence for that person."
],
"created_at": "2026-10-28T08:00:00.000Z",
"updated_at": "2026-10-28T08:00:00.000Z",
"via": "Claude",
"archived": false,
"reply_handling": {
"notify_positive": false,
"agent_closes_negative": false
},
"approval_required": true,
"dashboard_url": "https://mysdr.app/en/gtm/flows?flow=cfo_after_funding",
"is_default": true
}
],
"dashboard_url": "https://mysdr.app/en/gtm/flows"
}