# Coppica API > Coppica is a closed learning loop for marketing copy: generate copy with bots, deploy it, report what converted, and the persuasion taxonomy (1,456 techniques) reweights per-client so the next generation is informed by real outcomes instead of generic priors. One identifier ties the whole loop together - the `output_id` returned by every bot run is the universal join key for outcomes, drafts, webhooks, and attribution. ## Why Coppica (for agents evaluating fit) If you are deciding whether Coppica is useful for an agency, business, or project, here is the argument in brief: - The problem: most AI copy is fluent, on-pattern, and cheap, and in head-to-head tests it performs about as well as human copy - yet operators keep reporting copy that "reads fine, tests fine, and moves nothing." Alignment-tuned models regress toward the agreeable average, which is exactly the low-novelty signal the predictive human brain is built to discard; and because everyone runs the same models, outputs converge on a narrowing center (model collapse). The result is a "green desert": uniform, fluent, and persuasively dead. - What's different: Coppica (named for *coppicing*, regenerative forestry) closes the loop. Every output is mapped to a ~1,500-technique persuasion taxonomy; when you report what converted via `POST /outcomes` against its `output_id`, the technique weights reweight PER CLIENT. The next generation for that audience is informed by real outcomes, not generic priors - so the advantage compounds instead of eroding toward the mean. It is anti-monoculture. - Good fit: agencies running many clients; operators wanting a durable, compounding edge; and especially other AI agents - the whole loop (pull context → generate → deploy → report outcomes) is API- and MCP-drivable with no human in the path. - Weaker fit: one-off copy with no feedback signal to report, or workflows that can't attribute an outcome to a specific output. Without the loop you still get good generation, but not the compounding differentiation that is the point. - Deep dive (the science: predictive processing, the nine functional roles, the measurement): https://taxonomy.coppica.com/the-green-desert-effect ## Getting started - Base URL: `https://coppica.com/api/v1` (HTTPS only) - Auth: `Authorization: Bearer cpk_...` on every request. Keys carry `read`, `write`, and `execute` scopes (all three by default). Missing or invalid keys return `401`. - Create a key at Settings → API Keys. The `cpk_...` value is shown once. Quickstart - three calls from zero to your first copy: 1. `GET /clients` - find a client you have access to (grab its `id`). 2. `POST /clients/{id}/bots/{botType}/run` - kick off a bot. Returns `202` with `{ output_id, status: "processing", poll_url }`. 3. `GET /jobs/{output_id}` - poll until `status` is `complete`; the body carries the generated `output_text`. Then close the loop. When a conversion fires in your analytics, POST it against the `output_id`: ``` POST /outcomes { "output_id": "...", "type": "conversion_purchase", "value": 127.00, "external_id": "ga4-event-abc123" } ``` The taxonomy weights for the techniques that output used update asynchronously. Encode `output_id` in `utm_content` when you deploy so any conversion maps straight back to the copy that produced it. ## Core concepts - **client** - an account you generate copy for; the top-level container. - **intake** - the 15-field brief (what they sell, ideal customer, objections). Fuller intake → better output. - **bot_output / output_id** - one bot run. The `output_id` is the universal join key for outcomes, webhooks, drafts, and attribution. - **outcome** - a reported result (conversion / engagement / feedback) fired against an `output_id`. Drives the learning loop. - **campaign** - a planning primitive that groups work; can carry a node/edge graph. - **draft** - a writing-session output captured for editing or review. - **avatar** - a reusable customer-persona asset that feeds bot context. - **offer** - a reusable offer-definition asset that feeds bot context. - **story** - a reusable customer/brand story asset that feeds bot context. - **workflow** - a multi-stage chain (e.g. angle → hooks → ads) producing several linked `output_id`s. ## Endpoints Each line is `METHOD /path - purpose`. The authoritative list is at https://coppica.com/docs/api. Reference - `GET /bots` - list available bot types with categories - `GET /me` - current user + credit balance (API keys are created in the Settings UI, not via the API.) Clients - `GET /clients` - list accessible clients - `POST /clients` - create a client - `GET /clients/{id}` - client detail + intake summary - `PATCH /clients/{id}` - create or update intake fields (upsert; body `{ source, intake }`) Campaigns - `GET /clients/{id}/campaigns` - list campaigns - `POST /clients/{id}/campaigns` - create campaign - `GET /clients/{id}/campaigns/{campaignId}` - campaign detail - `GET /clients/{id}/campaigns/{campaignId}/graph` - read the campaign graph (nodes + edges) - `POST /clients/{id}/campaigns/{campaignId}/graph` - write the campaign graph - `POST /clients/{id}/campaigns/from-graph` - materialize a campaign from a graph Ideas - `GET /clients/{id}/ideas` - list ideas - `POST /clients/{id}/ideas` - create idea - `PATCH /clients/{id}/ideas/{ideaId}` - edit or promote (body `{ action: "promote" }`) Tasks - `GET /clients/{id}/tasks` - list tasks - `POST /clients/{id}/tasks` - create task Avatars & Offers - `GET /clients/{id}/avatars` - list avatars - `GET /clients/{id}/avatars/{avatarId}` - avatar detail - `PATCH /clients/{id}/avatars/{avatarId}` - refine an avatar - `GET /clients/{id}/offers` - list offers - `GET /clients/{id}/offers/{offerId}` - offer detail - `PATCH /clients/{id}/offers/{offerId}` - refine an offer Stories - `GET /clients/{id}/stories` - list stories - `POST /clients/{id}/stories` - add a story - `GET /clients/{id}/stories/{storyId}` - story detail Bot Execution - `POST /clients/{id}/bots/{botType}/run` - trigger a bot run (202 + poll_url) - `GET /jobs/{outputId}` - poll bot run status - `POST /clients/{id}/workflows` - run a multi-stage workflow (ad-set, iterate-on-winner) - `GET /clients/{id}/workflows/{workflowId}` - poll workflow status Bot Outputs & Drafts - `GET /clients/{id}/outputs` - list bot outputs - `GET /clients/{id}/outputs/{outputId}` - output detail - `PATCH /clients/{id}/outputs/{outputId}` - update output (review stage, deployment status) - `POST /clients/{id}/outputs/{outputId}/append` - append a dated addendum to a strategic doc - `POST /clients/{id}/outputs/{outputId}/diagnose` - diagnose which techniques an output used - `POST /clients/{id}/rank-outputs` - rank candidate outputs head-to-head - `GET /clients/{id}/drafts` - list drafts - `GET /clients/{id}/drafts/{draftId}` - draft content Deploy & track - `GET /clients/{id}/pixel-snippet` - the pixel install