Skip to main content
Writes to your heyBTW workspace on action: "confirm": sign-ups and their statuses on one collab. A preview or append writes nothing to the roster. It sends nothing, enriches no one, never writes an invited record, and never writes to the event platform.
Reach for it when the user has a guest list or check-in export from a platform heyBTW does not sync (Partiful, Eventbrite, a badge scan, a spreadsheet). For a file with more than about 50 rows or custom question columns, prefer create_import_link. Follows the heyBTW MCP rules.

When to use it

  • “Here’s the Partiful export from Thursday. Load it.”
  • “These 12 people checked in at the door, here are their LinkedIn links.”
  • “Mark everyone on this badge scan as attended.”
  • “Our HubSpot list is everyone who registered for the March dinner.”

Parameters

attendance_status on rows must be exactly one of CHECKED_IN, APPROVED, PENDING_APPROVAL, DECLINED, WAITLIST, REGISTERED.

Status words

A csv is read with heyBTW’s one status vocabulary, the one the dashboard importer reads. Confirmed, Approved, Attended, Can’t Go, Cancelled, No response and Invited were checked on a live preview today; Attending and Going are from the tool description. Registered is never attended. Only CHECKED_IN is attended. INVITED is never recorded here: people the user wants to reach go through import_people, save_list, activate_list. A word heyBTW does not know is skipped and listed with the word; ask the user once what it means.

Workflow

1

Preview

action: "preview" with the csv or the first rows. Nothing is written. The server keeps the rows and returns preview_token, valid 15 minutes.
2

Append (rows only, more than about 50)

action: "append" with the same preview_token, the next chunk of rows and a fresh client_request_id. Never a csv. The token stays valid 15 minutes after the last append. Report data[0].staged totals, never one chunk’s. At most 2,000 rows staged.
3

Show the preview to the user

The column_map, the counts, the skipped rows, matches for LinkedIn or name rows, suspect rows, and the workspace_overlap.sentence and company_carry.sentence as written.
4

Confirm

action: "confirm", the preview_token and a fresh client_request_id, with NO rows and NO csv. Never resend the rows. A second confirm with the same token replays the first result.
5

Close the import gaps

Read import_gaps and propose each remedy tool, manage_collab_partners first, before you report the import done.
On a transport error, retry the confirm with the SAME client_request_id: a committed call is replayed (idempotent_replay: true), never repeated. Reusing an id for different rows is refused. Expired or refused token: preview again.

LinkedIn and name rows

A row with linkedin_url or name and no email matches the ONE sign-up already on the collab with that profile or full name (case and accents folded). It only updates that person, never adds anyone. Never look the emails up first. These rows confirm ONLY by preview_token.

The event-history ladder

An export is rung 3: a snapshot. Rung 1, API sync, keeps partners, check-ins and answers current. A collab whose registrations Luma, Splash or Zuddl sync is refused here, naming the platform. Every answer carries import_gaps: A CRM list (rung 4, source: "crm_list") says who was on it, never who came. Ask the user which cluster of create dates is this event, and whether the list means invited, registered or attended, before any call.

Response

A preview data[0], in the order that matters: A confirm opens with facts, carry and next (as create_collab serves them), then written: true, changed_since_preview (rows whose result changed, each with previewed in attention) and chunks. Trimmed from a real preview today (fictional people at example.org):
status is partial because rows were skipped (gap partial_coverage, retryable false). That is a disclosure, not a failure.

Rules the agent must follow

  • Send the file as it is. Never recount it yourself: relay the first coverage note’s counts.
  • Never confirm before every chunk is appended. Never resend rows on confirm.
  • Never guess a status or a default status. Never mark a whole guest list attended.
  • Never exclude a suspect kind on your own, and never call two emails the same person without the user’s confirmation.
  • A stale export never lowers a status. A fuller one advances it. Use allow_status_correction only on the user’s say.

Errors and gaps