Cassidy Intake Endpoint
Push action items and takeaways from client calls into the PMT Queue for review.Endpoint
Authentication
Uses the REST API token. Include thel5key header with the client’s API key.
client_id is extracted from the token automatically.
Request
Headers
| Header | Required | Description |
|---|---|---|
l5key | Yes | REST API token for the client |
Content-Type | Yes | application/json |
Body
Send a single JSON object or an array of objects (max 100 per request).Required
| Field | Type | Description |
|---|---|---|
title | string | Action item or takeaway title. Max 60 characters (rejected if longer). |
Optional — Core Fields
| Field | Type | Description |
|---|---|---|
date | string | Start date in YYYY-MM-DD format. Defaults to today if omitted. |
end_date | string | Deadline in YYYY-MM-DD format. |
notes | string | Additional details or context from the call. |
media_source | string | Channel or platform (e.g. "Meta", "Google Ads"). |
campaign | string | Campaign name if relevant. |
ads | string | Ad name if relevant. |
on_it_id | integer or string | Assignee — pass a user ID (integer) or an email address (string). Emails are resolved to user IDs automatically. Returns a 400 error if the user is not found. |
Optional — Categorization
| Field | Type | Valid Values |
|---|---|---|
category | string | "GTM Calendar", "Action Item", "Creative", "Test & Learn". Defaults to "Action Item" if omitted. |
subcategory | string | Must match the category (see pairing table below). Rejected if the pair is invalid. |
priority | string | "Low", "Medium", "High", "Urgent" |
status | string | "In Queue" (default), "Planned", "WIP", "Launched", "Complete", "Stuck", "Deferred", "Cancelled" |
kpi | string | "Revenue", "MER", "CTR", "CPC", "nCAC", "CVR", "AOV", "Other", "n/a" |
month | string | "January" through "December" |
Category / Subcategory Pairings
| Category | Valid Subcategories |
|---|---|
"GTM Calendar" | "Promotion", "Product Launch", "Campaign", "Email/SMS" |
"Action Item" | "Lunar", "Client" |
"Creative" | "Flight", "Brief", "UGC" |
"Test & Learn" | "Creative", "Tactic", "Audience", "Funnel" |
400 validation error. Subcategory without a category is also rejected.
Optional — Extended Fields
| Field | Type | Description |
|---|---|---|
expected_impact | string | Expected impact description. |
outcome_learnings | string | Outcome or learnings notes. |
client_visibility | boolean | true to make visible to client users. Defaults to true for Cassidy intake. |
Fields set automatically by the backend
These are not sent by Cassidy:| Field | Value |
|---|---|
client_id | Extracted from the l5key token |
intake_source | "cassidy" |
queue_status | "pending" |
status | "In Queue" |
category | "Action Item" (overridable) |
client_visibility | true (visible to client users by default) |
created_by | null (displayed as “Cassidy” in the UI) |
Examples
Single item
Batch (multiple items)
Minimal request (title only)
Responses
201 Created
400 Bad Request (validation errors)
403 Forbidden (invalid or missing API key)
Returned automatically when thel5key header is missing or does not match any active client.
What happens after intake
- Items land in the PMT Queue with
intake_source = "cassidy"andqueue_status = "pending". - A team member views the Cassidy queue tab in the PMT Queue dashboard.
- They click the checkmark to accept (opens a form to fill remaining fields) or the X to reject (soft-deletes with audit trail).
- Accepted items move to the main PMT with
status = "Planned".
.png?fit=max&auto=format&n=Frm2GFbmok4D-yJA&q=85&s=93c3ebd47542af65d1cd06d8563a7f6e)