Create or update a context entry
Save context (ICP, Messaging Playbook, user profile, scraper entries, etc.).
Request body
Context type — closed set (server rejects anything else with 400 INVALID_CONTEXT_TYPE). Pick the canonical slot that matches the content; free-form "custom:*" slugs are rejected. Per-slot contracts: • "user-profile" — Who the operator is — name, role, company, background. Saved once globally; personalises every message. • "offering" — What the operator sells — products, services, agencies, anything they deliver to clients. Saved once globally. • "icp" — Who this chat targets — titles, industries, seniority, geography, company size. Guides discovery and qualification. • "playbook" — How outreach is WRITTEN for this chat — strategy, angle, value-prop, voice/tone, AND the messaging cadence (initial DM, follow-up timing, J+N reminders). One field covers the full messaging brief. • "scraper-post" / "scraper-profile" / "scraper-company" / "scraper-hashtag" — sources mined on a recurring schedule to feed contacts into the chat's list. Each row carries its own lifecycle (active/paused/completed) and mineFrequencyMinutes.
Markdown content. For scraper-* contexts, a JSON-serialized object with the source handle + mining state.
Defaults to "user". IMPORTANT: "scraper-*" types MUST use scope="campaign:{id}" — global user scope is rejected for these types.
Display label
For scraper-post: pass the _postTicketId value from each post object in the collect_posts result. Server resolves the real postUrl from the ticket — fabricated IDs are rejected.
Response
Context saved
Credits consumed (always 0 for workspace operations).
Seconds to wait (always 0 for workspace operations).