{"openapi":"3.1.0","info":{"title":"Lead Magnet Builder API","version":"1.0.0","description":"Read your lead magnets, subscribers, campaigns, and inbox from a script, a CI job, or an agentic tool. Every number this API returns is computed by the same code that renders your dashboard, so the two cannot disagree.","contact":{"name":"Ashwanth S","email":"work@ashwanth.dev","url":"https://ashwanthxs.com"}},"servers":[{"url":"https://resources.ashwanth.dev/api","description":"Production"}],"tags":[{"name":"Account"},{"name":"Analytics"},{"name":"Magnets"},{"name":"Subscribers"},{"name":"Campaigns"},{"name":"Unibox"}],"paths":{"/v1/me":{"get":{"summary":"Your account, headline totals, and the key you authenticated with.","description":"Your account, headline totals, and the key you authenticated with.\n\nThe cheapest call in the API and the right way to check a key works before wiring anything else.\n\n`api_key` is null when the caller is a signed-in browser session rather than a key.","operationId":"GET_me","tags":["Account"],"security":[{"bearerAuth":["account:read"]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage":{"get":{"summary":"AI spend and token consumption, broken down by model and by endpoint.","description":"AI spend and token consumption, broken down by model and by endpoint.\n\nCosts are what this app recorded per call, not a figure fetched from the provider.","operationId":"GET_usage","tags":["Account"],"security":[{"bearerAuth":["account:read"]}],"parameters":[{"name":"range","in":"query","required":false,"description":"Window to report on.","schema":{"type":"string","enum":["7d","1m","3m","all"],"default":"1m"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/activity":{"get":{"summary":"Scheduled-job run history: what ran, when, how long, and what failed.","description":"Scheduled-job run history: what ran, when, how long, and what failed.","operationId":"GET_activity","tags":["Account"],"security":[{"bearerAuth":["account:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return, 1 to 200.","schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","default":0}},{"name":"job","in":"query","required":false,"description":"Filter to one job name, for example `send_pending`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/email-accounts":{"get":{"summary":"Every sending inbox, with deliverability, warmup state, and daily capacity.","description":"Every sending inbox, with deliverability, warmup state, and daily capacity.\n\n`summary.total_daily_capacity` counts only accounts that are active and not paused by the system, so it reflects what can actually send today.","operationId":"GET_email_accounts","tags":["Account"],"security":[{"bearerAuth":["account:read"]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/dashboard":{"get":{"summary":"Headline KPIs, the funnel, a by-day series, and your top magnets.","description":"Headline KPIs, the funnel, a by-day series, and your top magnets.\n\nThese are the same numbers the dashboard screen shows, computed by the same code, so the API and the UI cannot disagree.\n\n`by_day` buckets sends on the day they were sent and opens and clicks on the day they happened, in IST. An open on a later day appears on that later day, not on the send date.\n\nOpens and clicks only count against deliveries that actually left, so a rate can never exceed 100%.","operationId":"GET_dashboard","tags":["Analytics"],"security":[{"bearerAuth":["analytics:read"]}],"parameters":[{"name":"range","in":"query","required":false,"description":"Window to report on.","schema":{"type":"string","enum":["7d","30d","90d","all"],"default":"30d"}},{"name":"scope","in":"query","required":false,"description":"Whether archived magnets are included.","schema":{"type":"string","enum":["active","all"],"default":"active"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/magnets":{"get":{"summary":"Your lead magnets, each with its live performance attached.","description":"Your lead magnets, each with its live performance attached.","operationId":"GET_magnets","tags":["Magnets"],"security":[{"bearerAuth":["magnets:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return, 1 to 200.","schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","default":0}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string","enum":["all","draft","private","public","archived"],"default":"all"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscribers":{"get":{"summary":"Your audience, with server-side filtering on score, temperature, tag, magnet, status, and search.","description":"Your audience, with server-side filtering on score, temperature, tag, magnet, status, and search.\n\n`lead_score` and `temperature` come from the same scoring used across the app, so a lead that is hot here is hot on your dashboard.\n\n`total_matching` is the size of the full filtered set, not the size of this page.\n\nA subscriber who found you through two different accounts is one person, but you only ever see your own relationship with them: your magnets, your requests, your engagement.","operationId":"GET_subscribers","tags":["Subscribers"],"security":[{"bearerAuth":["subscribers:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return, 1 to 200.","schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","default":0}},{"name":"temperature","in":"query","required":false,"description":"Filter by lead temperature.","schema":{"type":"string","enum":["hot","warm","cool","cold"]}},{"name":"min_score","in":"query","required":false,"description":"Only leads scoring at least this, 0 to 100.","schema":{"type":"integer","default":0}},{"name":"tag","in":"query","required":false,"description":"Only leads carrying this tag.","schema":{"type":"string"}},{"name":"magnet_id","in":"query","required":false,"description":"Only leads who requested this magnet.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Subscription state.","schema":{"type":"string","enum":["all","active","unsubscribed"],"default":"all"}},{"name":"search","in":"query","required":false,"description":"Matches email, first name, or last name.","schema":{"type":"string"}},{"name":"created_after","in":"query","required":false,"description":"ISO 8601 timestamp, first seen on or after.","schema":{"type":"string"}},{"name":"created_before","in":"query","required":false,"description":"ISO 8601 timestamp, first seen on or before.","schema":{"type":"string"}},{"name":"order","in":"query","required":false,"description":"Sort order.","schema":{"type":"string","enum":["score","recent","activity"],"default":"score"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/campaigns":{"get":{"summary":"Your outbound campaigns with settings and lead counts.","description":"Your outbound campaigns with settings and lead counts.","operationId":"GET_campaigns","tags":["Campaigns"],"security":[{"bearerAuth":["campaigns:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return, 1 to 200.","schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","default":0}},{"name":"status","in":"query","required":false,"description":"Filter by campaign status.","schema":{"type":"string","enum":["all","draft","active","paused","stalled","bounced","completed","scheduled"],"default":"all"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/campaigns/{id}/metrics":{"get":{"summary":"One campaign in full: funnel, replies by intent, bounces, conversions, per-day and per-step with A/B variants.","description":"One campaign in full: funnel, replies by intent, bounces, conversions, per-day and per-step with A/B variants.\n\nA campaign send counts only when its status is `sent`. There is no `delivered` state on campaign sends, unlike magnet deliveries.\n\n`reply_rate` is replies over enrollments. A reply means real reply text, a conversion, or a classified intent, never the placeholder states.","operationId":"GET_campaigns_id_metrics","tags":["Campaigns"],"security":[{"bearerAuth":["campaigns:read"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Campaign id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscribers/{id}":{"get":{"summary":"One subscriber: scores, tags, engagement, and their request history.","description":"One subscriber: scores, tags, engagement, and their request history.\n\nReturns only YOUR relationship with this person. A subscriber who also opted into another account's magnets never reveals that side here.","operationId":"GET_subscribers_id","tags":["Subscribers"],"security":[{"bearerAuth":["subscribers:read"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Subscriber id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Edit tags, first name, or last name. Send any subset of the three.","description":"Edit tags, first name, or last name. Send any subset of the three.\n\nBody: `{ \"tags\": [\"vip\"], \"first_name\": \"Ada\" }`. Tags replace the existing set rather than merging, and are de-duplicated and trimmed.\n\nAt most 50 tags, each 60 characters or fewer.","operationId":"PATCH_subscribers_id","tags":["Subscribers"],"security":[{"bearerAuth":["subscribers:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Subscriber id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/subscribers/{id}/unsubscribe":{"post":{"summary":"Suppress a subscriber so they receive nothing further.","description":"Suppress a subscriber so they receive nothing further.\n\nIdempotent. Unsubscribing someone already unsubscribed succeeds and reports `changed: false`, keeping the ORIGINAL timestamp: the date a person opted out is a compliance record, not a field a retry should overwrite.\n\nThere is deliberately no resubscribe endpoint. Reversing an opt-out has to be the subscriber's own action.","operationId":"POST_subscribers_id_unsubscribe","tags":["Subscribers"],"security":[{"bearerAuth":["subscribers:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Subscriber id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/magnets/{id}":{"get":{"summary":"One magnet with its configuration and live performance.","description":"One magnet with its configuration and live performance.","operationId":"GET_magnets_id","tags":["Magnets"],"security":[{"bearerAuth":["magnets:read"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Magnet id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Change a magnet's status between draft, private, public, and archived.","description":"Change a magnet's status between draft, private, public, and archived.\n\nBody: `{ \"status\": \"public\" }`. Status is the only writable field in v1; copy and sections are edited in the app, where the AI guardrails live.\n\nSetting `public` requires a successful test send first, the same gate the editor enforces. Without one you get `400 test_send_required`.","operationId":"PATCH_magnets_id","tags":["Magnets"],"security":[{"bearerAuth":["magnets:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Magnet id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/campaigns/{id}/pause":{"post":{"summary":"Stop a running campaign from sending anything further.","description":"Stop a running campaign from sending anything further.\n\nOptional body: `{ \"reason\": \"...\" }`.\n\nIdempotent on an already-paused campaign. Pausing one that is not running returns `409 invalid_state` rather than silently doing nothing, because a caller who asked to stop sending should know nothing was sending.","operationId":"POST_campaigns_id_pause","tags":["Campaigns"],"security":[{"bearerAuth":["campaigns:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Campaign id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/campaigns/{id}/resume":{"post":{"summary":"Put a paused campaign back into sending.","description":"Put a paused campaign back into sending.\n\nA campaign the SYSTEM paused for bounces or deliverability will NOT resume here, returning `409 system_paused`. That pause is a safety brake, and resuming blind would keep sending from a domain that is being rejected. Fix the cause in the app, where the diagnosis is visible.","operationId":"POST_campaigns_id_resume","tags":["Campaigns"],"security":[{"bearerAuth":["campaigns:write"]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Campaign id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/unibox/{enrollmentId}":{"get":{"summary":"One conversation: the lead, every send to them, and every reply received.","description":"One conversation: the lead, every send to them, and every reply received.","operationId":"GET_unibox_enrollmentId","tags":["Unibox"],"security":[{"bearerAuth":["unibox:read"]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"description":"Enrollment id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Classify a conversation: interested, meeting booked, won, not interested, and so on.","description":"Classify a conversation: interested, meeting booked, won, not interested, and so on.\n\nBody: `{ \"reply_intent\": \"interested\" }`. One of: no_reply, interested, meeting_booked, meeting_completed, won, out_of_office, not_interested, unsubscribed, replied.\n\nThis is the only writable field on an enrollment. It feeds the intent split on the inbox summary and on campaign metrics.","operationId":"PATCH_unibox_enrollmentId","tags":["Unibox"],"security":[{"bearerAuth":["unibox:write"]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"description":"Enrollment id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/unibox":{"get":{"summary":"Reply roll-up across the unified inbox, split by intent and by campaign.","description":"Reply roll-up across the unified inbox, split by intent and by campaign.\n\n`inbox_messages` counts every email pulled from your connected inboxes. `campaign_reply_messages` counts only those matched to a campaign.\n\nPlaceholder intents are not counted as classified outcomes, so this will not claim replies that never happened.","operationId":"GET_unibox","tags":["Unibox"],"security":[{"bearerAuth":["unibox:read"]}],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing, invalid, expired, or revoked key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key lacks the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such object, or it does not belong to this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Check Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Send your key as `Authorization: Bearer lmb_live_...`. Create one in Settings, Developers. The key is shown once at creation and stored only as a hash, so it cannot be recovered later. Available scopes:\n- `account:read`: Read your profile, usage, activity log, and connected email accounts.\n- `magnets:read`: Read lead magnets and their performance.\n- `magnets:write`: Change a magnet's status (draft, private, public, archived).\n- `subscribers:read`: Read subscribers, their scores, tags, and engagement.\n- `subscribers:write`: Edit subscriber names and tags, and unsubscribe them.\n- `campaigns:read`: Read campaigns, their leads, and their metrics.\n- `campaigns:write`: Pause and resume campaigns.\n- `unibox:read`: Read the unified inbox and reply summaries.\n- `unibox:write`: Set the reply intent on a conversation.\n- `analytics:read`: Read dashboard KPIs, analytics, and insights."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable reason. Branch on this, not on the message.","enum":["unauthorized","invalid_key","expired_key","revoked_key","insufficient_scope","invalid_parameter","not_found","rate_limited","internal_error"]},"message":{"type":"string"},"param":{"type":"string","description":"Present when one query parameter caused the failure."},"required_scope":{"type":"string","description":"Present on insufficient_scope."}},"required":["code","message"]}}},"ListEnvelope":{"type":"object","description":"Every list endpoint returns this shape.","properties":{"data":{"type":"array","items":{"type":"object"}},"has_more":{"type":"boolean"},"next_offset":{"type":["integer","null"],"description":"Pass as ?offset= to get the next page. Null on the last page."}}}}}}