Skip to main content
Writes to your heyBTW workspace. It creates or completes one follow-up task, heyBTW’s record of the commitment. It writes to no customer system and sends nothing; a shared task becomes visible to the partner workspaces assigned to it.
The marketer’s question is “who owes what after this event, and by when?” Reach for this tool when the user accepts a follow-up in the conversation, and again when they say it is done. Follows the heyBTW MCP rules.

When to use it

  • “Yes, have Bob send Jane the pricing deck three days after the dinner.”
  • “Tony books the meeting with Rosa’s CRO by the 30th.”
  • “Have Brightpath and Ferrocity each send invites to their top 20 by Friday.”
  • “Done, Theo has the proposal.”

Parameters

Either way the due date is stored relative to the event and moves if the event moves.

Workflow

1

Wait for the user's yes

One accepted follow-up is one call. Never create tasks in bulk, or from suggestions the user did not accept.
2

Create

Send action: "create" with a fresh client_request_id. Hand the task to its owner through the user’s own connectors (a CRM task, a Slack or mail message), joined on owner_email and contact_email.
3

Complete

When the user says it is done, send action: "complete" with task_id, an optional outcome_note, and a new client_request_id. A task already done changes nothing and returns outcome: "already_completed".
4

Retry safely

On a transport error, retry with the SAME client_request_id: a committed call returns idempotent_replay: true and is never repeated. Reusing the id for a different call is refused.

Shared tasks for partners

Send partner_domains to give the task to partner companies on a collab you host (manage_collab_partners action: "status" lists them). Each partner whose heyBTW workspace has joined the collab gets its own assignment and sees the task in its own heyBTW.
  • completion_rule: "each": every partner does it. "any": done when one partner does it; the others are covered and owe nothing.
  • A shared task names no person. Never send owner_email, contact_email or observation_ref with partner_domains, and never put a person’s email in the title or reason. Title, reason and account_domain are visible to every assigned partner.
  • A domain that is not a partner, was removed, or is your own is rejected by name; the rest still lands.
  • partner_not_joined: add it again with manage_collab_partners action: "add". If still refused, invite its contact with action: "invite" (with the user’s go-ahead) and save the task once they accept.
  • partner_no_workspace: record a task of your own workspace instead (owner_email the partner’s contact, account_domain its domain) and send the ask through the user’s connectors.
  • On complete, a shared task completes only this workspace’s own assignment. The host cannot complete it for a partner.

Response

The success shape below is from the code (tools/save_task.py and save-task-contract.json), not a live call: this page was written against a production workspace, so no task was created. data[0] holds: event_window bands, served by heyBTW, never computed by you: The validation error below is a real response, trimmed, from action: "create" sent with nothing else:

Rules the agent must follow

  • Create a task only for a follow-up the user accepted. One per call.
  • A task is a commitment, not evidence of contact. Never report a task as a touch; get_attendee_touch_status reports contact.
  • Read event_window and due_date as served. Never compute a band or a date yourself.
  • Never send owner_email, contact_email or observation_ref with partner_domains.
  • heyBTW sends nothing here. Deliver the task to its owner through the user’s own connectors.

Errors and gaps