Changelog
GuidesUpdated June 14, 2026
Changelog
Use this page to note API changes over time (new endpoints, request/response changes, deprecations). Update it when you ship changes.
Format
- Added – New endpoints or new request/response fields.
- Changed – Behavior or response shape change.
- Deprecated – Still supported but will be removed later (e.g.
sequence_idin favor oflist_id). - Removed – No longer supported.
2026-06-14 — Phase 4 (Campaign creation — granular HITL)
- Added:
POST /api/v1/campaigns— create a campaign shell (scopecampaigns:write). Returns409 NOT_READY(detail.missing) if the workspace isn't ready to build, and403 FORBIDDEN(detail = { reason: "campaign_build_limit", limit, used }) when the plan's build limit is reached. No credits (builds are gated by the campaign build limit). SupportsIdempotency-Key. See Create & Build a Campaign. - Added:
GET /api/v1/target-audiences— list selectable TA segments (scopecampaigns:read). - Added:
POST /api/v1/campaigns/:id/target-audience— submit TA (existing id or custom segment); kicks the background research. Returns202+ acampaign.target_audiencejob (scopecampaigns:write). - Added:
GET /api/v1/campaigns/:id/assets/:type/options(campaigns:read) andPUT /api/v1/campaigns/:id/assets/:type/selection(campaigns:write) forsocial_proof | lead_magnet | risk_reversal | value_proposition. SP/LM/RR return200;value_propositionselection kicks the build chain and returns202+ acampaign.buildjob. - Added:
POST /api/v1/campaigns/:id/assets/value_proposition/generate— generate campaign-scoped VP options;409 NOT_READYuntil SP/LM/RR selections are submitted. Returns202+ acampaign.value_propositionsjob (scopecampaigns:write). - Added:
GET /api/v1/campaigns/:id/build-status— derived per-stage +overall(draft|building|ready|failed) readiness (scopecampaigns:read).campaign.*jobs report derived (non-enqueued) status viaGET /api/v1/jobs/:id, likeworkspace.regenerate. See Build Status.
2026-06-14 — Phase 3A (Workspace, imports, regenerate, agent chat, conversations)
- Added:
GET /api/v1/workspace(profile + onboarding + document status) andPUT /api/v1/workspace/details(save-only; does not regenerate documents) (scopesworkspace:read/workspace:write). See Workspace. - Added:
POST /api/v1/workspace/imports/document(multipart upload → extract + merge intoworkspace_details) andPOST /api/v1/workspace/imports/url(company research → merge details only). Both async (pollGET /api/v1/jobs/:id) and free (rate limited) (scopeworkspace:write). See Imports. - Added:
POST /api/v1/workspace/regenerate+GET /api/v1/workspace/regenerate/:id— rebuild company summary + market research; status is derived from live document readiness (not worker-hosted). Free (rate limited) (scopesworkspace:write/workspace:read). See Regenerate. - Added:
POST /api/v1/agent/chat— synchronous, JSON-only campaign chat. Free (no credits); messages are persisted server-side. Returns409 NOT_READYif the campaign has no knowledge base yet (scopeagent:write). See Agent Chat & Conversations. - Added:
GET /api/v1/conversationsandGET /api/v1/conversations/:id/messages— workspace-scoped conversation history, paginated (sendernormalized torole) (scopeagent:read). See Agent Chat & Conversations.
2026-06-14 — Phase 2 (Tier 2 CRUD, branch, reprocess, signatures)
- Added:
PATCH /api/v1/campaigns/:id(rename) andDELETE /api/v1/campaigns/:id(scopecampaigns:write). Delete removes the campaign and its regenerable artifacts but retains the campaign's lists and their CSVs (lists are detached:campaign_idbecomesnull). Returns409 CONFLICTwhile any list is processing. See Update, Delete & Branch. - Added:
POST /api/v1/campaigns/:id/branch— create a new campaign from a chosen step of an existing one (synchronous, no credits; supportsIdempotency-Key) (scopecampaigns:write). See Update, Delete & Branch. - Added:
POST /api/v1/lists/:id— reprocess a list's pending batches (async; pollGET /api/v1/lists/:id) (scopelists:write). See Lists. - Added: Email signature CRUD —
GET/POST /api/v1/signaturesandPUT/DELETE /api/v1/signatures/:id(scopessignatures:read/signatures:write). See Email Signatures.
2026-06-14 — Phase 1 (Tier 1 reads & cheap CRUD)
- Added:
GET /api/v1/creditsandGET /api/v1/credits/check?required=N(scopecredits:read). See Credits. - Added:
GET /api/v1/campaigns/:id/selections(scopecampaigns:read). See Campaign Selections. - Added:
GET /api/v1/campaigns/:id/documentsandGET /api/v1/workspace/documentswith short-lived signeddownload_urls (scopescampaigns:read/workspace:read). See Campaign Documents and Workspace Documents. - Added:
PATCH /api/v1/lists/:id(rename) andDELETE /api/v1/lists/:id(delete + storage cleanup;409while processing) (scopelists:write). See Lists. - Added:
POST /api/v1/campaigns/:id/preview— preview emails from 5 synthetic leads (scopecampaigns:write). Costs 5 credits per call with partial/total-failure refunds; supportsIdempotency-Key; returns409 NOT_READYwhen campaign instructions aren't built yet. See Preview.
2026-06-14 — API platform foundation
- Added: API platform foundation. All responses now include a
request_id(andX-Request-Idheader) and a standardized error envelope ({ error, message, detail?, request_id }). - Added: Per-key rate limiting with
X-RateLimit-*headers and a429 RATE_LIMITEDresponse (honorRetry-After). Distinct fromWORKSPACE_LIMIT. See Rate Limits. - Added:
Idempotency-Keyheader support on selected write requests — campaign create, target-audience submit, asset selection, and preview (safe retries; same key + different body →409 CONFLICT). Not supported ongenerate/generate-batch. - Added: Pagination (
limit/offset+has_more/total) onGET /campaignsandGET /lists. Existingcampaigns/listsarray keys are retained for back-compat. - Added:
GET /api/v1/jobs/:id(generic async job polling) andGET /api/v1/health. - Changed: Credit checks are now pay-as-you-go aware;
402 INSUFFICIENT_CREDITSincludesdetail { required, available, payg_enabled, pct_of_cap }.
2026-04-14
- Added:
enrichment_enabledoption on/generateand/generate-batch. Whentrue, leads are enriched via web research (persona description, company data, industry, employee count, etc.) before email generation. Costs 2 credits per lead instead of 1. - Fixed: Batch generate (
/generate-batch) no longer double-charges credits. Previously, credits were deducted upfront at acceptance and again per successful lead during background processing. Now credits are only deducted per successful lead.
2025-02-14
- Added: Public API documentation (Campaigns, Generate, Generate Batch, Lists, Export).
- Note:
sequence_idin generate response is deprecated; uselist_idfor new integrations.