Keep the same operation and operation_id when retrying identical work. Reconcile an uncertain result before new work; never replay an old V1 write under a new V2 ID.
Check status, execution_state, error_code, output and evidence/resource references. Queued work is not complete: poll jobs.status.get.v2 in domain.workspace.v2. For read-back verification require read_back_verified=true where returned; reconcile failures without creating another object.
Input schema: fields, defaults and constraints
{
"$defs": {
"EventParticipantInputV1": {
"additionalProperties": false,
"description": "One roster row. Role defaults to attendee, which is what guest lists are.",
"properties": {
"role": {
"default": "attendee",
"enum": [
"speaker",
"sponsor",
"exhibitor",
"attendee",
"organizer",
"panelist",
"host"
],
"title": "Role",
"type": "string"
},
"person_name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Person Name"
},
"person_email": {
"anyOf": [
{
"maxLength": 320,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Person Email"
},
"person_title": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Person Title"
},
"person_linkedin": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Person Linkedin"
},
"company_name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Name"
},
"company_domain": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Domain"
},
"role_attributes": {
"additionalProperties": {
"$ref": "#/$defs/JsonValue"
},
"description": "Event metadata to preserve verbatim: rsvp_status, checked_in, waitlisted, ticket_type, registered_at.",
"title": "Role Attributes",
"type": "object"
}
},
"title": "EventParticipantInputV1",
"type": "object"
},
"ImportSourceInputV1": {
"additionalProperties": false,
"description": "Where this list came from. Every record the import creates or matches is badged with it.",
"properties": {
"source_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Add to an existing source instead of creating one.",
"title": "Source Id"
},
"name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New source name, e.g. 'AI for CFOs workshop'. Omit to name it after the file.",
"title": "Name"
},
"kind": {
"default": "list",
"enum": [
"workshop",
"event",
"webinar",
"list",
"other"
],
"title": "Kind",
"type": "string"
},
"occurred_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Occurred On"
},
"details": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"description": "Location, host, link, notes. Flat: at most 20 keys (each up to 64 characters), values are text up to 1000 characters, numbers, booleans or null. No nested objects or lists.",
"title": "Details",
"type": "object"
}
},
"title": "ImportSourceInputV1",
"type": "object"
},
"JsonValue": {}
},
"additionalProperties": false,
"properties": {
"csv_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Verbatim contents of a CSV the caller holds. Send the file exactly as it is: never retype values, reorder or drop rows, summarise, or leave columns out. The server maps arbitrary column layouts itself, and the preview reports which columns it reads as source-system noise, and why, in column_policy. Decide there with the user -- not here.",
"title": "Csv Text"
},
"exclude_columns": {
"default": [],
"description": "Source columns to leave out, after the user agreed to it. Leave empty on a first preview. Naming a column the server protects, or one that is mapped to a canonical field, fails the whole call.",
"items": {
"type": "string"
},
"maxItems": 200,
"title": "Exclude Columns",
"type": "array"
},
"keep_columns": {
"default": [],
"description": "Source columns to retain whatever the server makes of them. Use it when the user says a column matters. Outranks exclude_columns.",
"items": {
"type": "string"
},
"maxItems": 200,
"title": "Keep Columns",
"type": "array"
},
"tags": {
"anyOf": [
{
"items": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Account tags (1-64 characters each, at most 10) added to every account this import creates or matches -- existing accounts get the tag and nothing else on them changes. Matched case-insensitively against existing tags; resolve them with accounts.tags.list.v2 first. The preview's import_token locks these in: omit tags on the commit to reuse them, and a different list is refused. Separate from the source badge.",
"title": "Tags"
},
"event_name": {
"description": "Event name used by the public events import start input v2 operation.",
"maxLength": 500,
"minLength": 1,
"title": "Event Name",
"type": "string"
},
"event_date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Event date used by the public events import start input v2 operation.",
"title": "Event Date"
},
"event_type": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Event type used by the public events import start input v2 operation.",
"title": "Event Type"
},
"location_city": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Location city used by the public events import start input v2 operation.",
"title": "Location City"
},
"location_country": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Location country used by the public events import start input v2 operation.",
"title": "Location Country"
},
"venue": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Venue used by the public events import start input v2 operation.",
"title": "Venue"
},
"url": {
"anyOf": [
{
"maxLength": 1000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Url used by the public events import start input v2 operation.",
"title": "Url"
},
"target_event_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Append the roster to this existing event instead of creating one. The event metadata fields are ignored when set.",
"title": "Target Event Id"
},
"visibility": {
"default": "private",
"description": "Visibility used by the public events import start input v2 operation.",
"enum": [
"private",
"shared"
],
"title": "Visibility",
"type": "string"
},
"participants": {
"default": [],
"description": "Participants used by the public events import start input v2 operation.",
"items": {
"$ref": "#/$defs/EventParticipantInputV1"
},
"maxItems": 2000,
"title": "Participants",
"type": "array"
},
"source": {
"anyOf": [
{
"$ref": "#/$defs/ImportSourceInputV1"
},
{
"type": "null"
}
],
"default": null,
"description": "Label this list so every account and contact it creates or matches is badged with where it came from (workshop, event, webinar, list). For events only `kind` is used (workshop, event or webinar): the event itself is the source."
},
"action_proposal_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. Hivekind fills this from the MCP consent grant.",
"title": "Action Proposal Id"
},
"import_token": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Token from the matching preview. Reuses the exact rows that were previewed and skips re-normalising them.",
"title": "Import Token"
},
"auto_enrich": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "When true, once this roster is graded the A/B tier is enriched and imported into Hive Base automatically. This spends Apollo credits and is off unless asked for. Leave unset to keep the workspace's existing choice. Grading still has to be started with events.score.v2 — importing alone never enriches anything.",
"title": "Auto Enrich"
}
},
"required": [
"event_name"
],
"title": "McpMcpPublicEventsImportStartInputV2",
"type": "object"
}Output schema inside the result envelope
{
"$defs": {
"ImportRowErrorV1": {
"additionalProperties": false,
"description": "One row the parser could not use. Row numbers are 1-based and header-aware.",
"properties": {
"row": {
"minimum": 1,
"title": "Row",
"type": "integer"
},
"reason": {
"maxLength": 500,
"minLength": 1,
"title": "Reason",
"type": "string"
}
},
"required": [
"row",
"reason"
],
"title": "ImportRowErrorV1",
"type": "object"
}
},
"additionalProperties": false,
"description": "V2 result for events.import.start.v2; preserves the established validators.",
"properties": {
"event_id": {
"format": "uuid",
"title": "Event Id",
"type": "string"
},
"source_event_id": {
"maxLength": 500,
"minLength": 1,
"title": "Source Event Id",
"type": "string"
},
"visibility": {
"default": "private",
"enum": [
"private",
"shared"
],
"title": "Visibility",
"type": "string"
},
"rows_parsed": {
"default": 0,
"minimum": 0,
"title": "Rows Parsed",
"type": "integer"
},
"rows_skipped": {
"default": 0,
"minimum": 0,
"title": "Rows Skipped",
"type": "integer"
},
"participants_inserted": {
"default": 0,
"minimum": 0,
"title": "Participants Inserted",
"type": "integer"
},
"participants_updated": {
"default": 0,
"minimum": 0,
"title": "Participants Updated",
"type": "integer"
},
"parse_errors": {
"default": [],
"items": {
"$ref": "#/$defs/ImportRowErrorV1"
},
"maxItems": 50,
"title": "Parse Errors",
"type": "array"
},
"record_source_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Id of the source badge attached to the accounts and contacts this roster creates.",
"title": "Record Source Id"
},
"tags": {
"default": [],
"description": "Account tags added to every account this import created or matched.",
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
}
},
"required": [
"event_id",
"source_event_id"
],
"title": "PublicEventsImportStartResultV2",
"type": "object"
}