{"success":true,"code":"OK","message":"OK","data":{"app":"commandprojects","title":"Project Command API","version":"v1","base_url":"https://projectcommand.reversal.org","html_docs":"https://projectcommand.reversal.org/docs/","public_access_docs":"https://projectcommand.reversal.org/docs/","json_spec":"https://projectcommand.reversal.org/api/v1/docs/","updated":"2026-09-26","layer":"commandprojects-docs","envelope":{"description":"All JSON endpoints return the same top-level shape.","fields":{"success":"boolean","code":"string (OK, VALIDATION_ERROR, NOT_FOUND, AUTH_REQUIRED, ...)","message":"string","data":"object or null -- payload","errors":"array of {field, message} on validation failures","meta":"object with app, version, timestamp (ISO in CP_TIMEZONE), timezone, timezone_label, plus paging"}},"auth":[{"id":"none","label":"Public","detail":"No session. Used for health, pixel collect, and embed analytics."},{"id":"session","label":"Staff session","detail":"Sign in at /login/. Cookie CPSESSID. POST/PATCH/DELETE need X-CSRF-Token header or csrf in JSON body."},{"id":"pixel_key","label":"Pixel API key","detail":"Header Authorization: Bearer eepx_... or X-Api-Key: eepx_... Keys are scoped to one pixel with read and/or write flags."},{"id":"changelog_key","label":"Changelog API key","detail":"Header X-Api-Key: cpcl_... Hashed key scoped to a company, venture, or project. Company keys may write child ventures and projects. Also used to ping CodeShare notes after a project Pastes binding exists."},{"id":"pastes_key","label":"CodeShare API key","detail":"Minted on pastes.reversal.org. Header X-Api-Key: pvsk_... Used on CodeShare /api/v1/notes/. Command stores the encrypted key per project."},{"id":"chat_widget_key","label":"Chat widget key","detail":"Header X-Api-Key: cpcw_... Publishable key for one site chat. POST action=config or action=message only. Do not use a cpcl_ key in the page."}],"schemas":{"project_card":{"description":"Lean project row returned by Overlook, projects, and financials.","fields":{"id":"int","public_id":"string (16 hex)","name":"string","slug":"string","venture":"string","org":"string","lifecycle":"idea|qualify|plan|build|validate|survive|grow|merge|sell|pause|drop","decision_state":"ship|sell|merge|pause|drop","survival_status":"string (survived|on_track|at_risk|missed)","mrr_cents":"int planned or live MRR","survival_mrr_cents":"int target to survive","revenue_gap_cents":"int","recurring_cost_cents":"int","recurring_contribution_cents":"int","revenue_deadline_on":"date|null","days_to_deadline":"int|null","priority_score":"int 0-100","ai_decision":"string","ai_reason":"string","next_proof":"string","pinned":"0|1","ee_product_id":"int|null EE Holdings product","ee_product_manager_user_id":"int|null EE Holdings user"}},"financial_rollup":{"description":"Nested under financials and enriched projects.","fields":{"mrr_cents":"int","arr_cents":"int","recurring_cost_cents":"int","recurring_contribution_cents":"int","one_time_revenue_cents":"int","one_time_cost_cents":"int","net_contribution_cents":"int","container_monthly_cents":"object hosting|domain|saas|other monthly burn","live_mrr_cents":"int|null when ee_product_id linked","mrr_source":"planned|live"}},"pixel_analytics":{"description":"GET /api/v1/analytics/ compact card or view=report super pack (no raw IPs).","fields":{"pixel":"string px_ + 16 hex","name":"string","app_slug":"string","hits":"int","visitors":"int","sessions":"int","range":"24h|7d|30d","view":"card|report","sources":"array label/hits/share","pages":"array optional","series":"array trend buckets","hours":"array 24 Eastern hours on report","weekdays":"array on report","rates":"object bounce_rate, pages_per_session, returning_share","insights":"array of short strings on report","recent":"array hit rows only for staff or eepx_ read"}},"job_staff":{"description":"Staff job detail -- includes cost and margin (never expose to customer view).","fields":{"id":"int","project_id":"int|null","title":"string","client_label":"string","status":"string","cost_total_cents":"int","sell_total_cents":"int","margin_cents":"int","markup_bps":"int","cost_lines":"array","sell_lines":"array"}}},"endpoints":[{"group":"Meta","method":"GET","path":"/api/v1/health/","auth":"none","query":[],"body":[],"response":["app","db","schema","csrf?"],"notes":"Returns csrf when a staff session is present."},{"group":"Meta","method":"GET","path":"/api/v1/docs/","auth":"none","query":[],"body":[],"response":["features[]","snapins[]","endpoints[]","counts"],"notes":"Documentation layer: features, snap-ins, and this endpoint catalog."},{"group":"Meta","method":"GET","path":"/api/v1/request-log/","auth":"session","query":["project_id","venture_id","organization_id","container","channel api|page|activity","id","limit","offset"],"body":[],"response":["rows[] with metadata.project","meta.total","meta.limit","meta.offset"],"notes":"Staff session. One row per API call, staff page, or container action. metadata.project is the project snapshot. container=hosting|domain|saas|other filters cost containers. Pixel collect and health are omitted."},{"group":"Portfolio","method":"GET","path":"/api/v1/overlook/","auth":"session","query":[],"body":[],"response":["totals","status_counts","top_contributors[]","week_actions","projects[] project_card","csrf"],"notes":"Overlook dashboard: KPIs, survival mix, ranked attention, and project cards."},{"group":"Portfolio","method":"GET","path":"/api/v1/hierarchy/","auth":"session","query":["org optional id|public_id|slug, 0 = all"],"body":[],"response":["totals","companies[] with ventures[] and nested projects[]"],"notes":"Parent company plus ventures it owns. Holding projects include children."},{"group":"Portfolio","method":"GET","path":"/api/v1/projects/","auth":"session","query":["limit","offset"],"body":[],"response":["projects[] project_card"],"notes":"Paged active projects sorted by priority."},{"group":"Portfolio","method":"GET","path":"/api/v1/projects/{id}/","auth":"session","query":[],"body":[],"response":["project project_card"],"notes":""},{"group":"Portfolio","method":"POST","path":"/api/v1/projects/","auth":"session","query":[],"body":["name","organization_id","venture_id","parent_project_id","survival_mrr","target_mrr","objective","revenue_deadline_on"],"response":["project project_card"],"notes":"Creates project; owner defaults to signed-in staff."},{"group":"Portfolio","method":"PATCH","path":"/api/v1/projects/{id}/","auth":"session","query":[],"body":["name","organization_id","venture_id","lifecycle","owner_staff_id","ee_product_id","ee_product_manager_user_id","survival_mrr","pinned"],"response":["project project_card"],"notes":"Updates operating fields, parent company/venture, and EE spine links."},{"group":"Portfolio","method":"GET","path":"/api/v1/ee-companies/","auth":"session","query":["q optional, name/slug/sector/industry","limit max 40"],"body":[],"response":["companies[] id,name,slug,sector,imported,organization_id"],"notes":"Searches ee_holdings.ee_companies. Empty q returns the first page of active names."},{"group":"Portfolio","method":"POST","path":"/api/v1/ee-companies/","auth":"session","query":[],"body":["ee_company_id"],"response":["created","organization","venture"],"notes":"Imports into cp_organizations (+ starter venture if none). Idempotent by ee_company_id, slug, then name."},{"group":"Portfolio","method":"DELETE","path":"/api/v1/projects/{id}/","auth":"session","query":[],"body":[],"response":["id","deleted"],"notes":"Soft-deletes (is_active=0). Unlinks children. Does not wipe jobs or bills."},{"group":"Money","method":"GET","path":"/api/v1/financials/","auth":"session","query":["project_id or renewals=1","days (1-365, default 180)"],"body":[],"response":["project","items[]","containers","rollup","or renewals[]"],"notes":"items include start_on, end_on, days_until_renewal, renewal_state. renewals=1 lists overdue + due within days."},{"group":"Money","method":"POST","path":"/api/v1/financials/","auth":"session","query":[],"body":["project_id","item_type","name","amount","frequency","provider","cost_container","resource_name","start_on","end_on","status"],"response":["id","item"],"notes":"item_type: recurring_revenue|one_time_revenue|recurring_cost|one_time_cost. start_on=paid; empty end_on auto-fills from frequency (not one_time)."},{"group":"Money","method":"POST","path":"/api/v1/financials/","auth":"cpcl_ key, API key, or session","query":["action=payment"],"body":["venture_id","amount","source","external_id","paid_on","project_id","name","notes","currency"],"response":["id","created","venture_id","project_id","item"],"notes":"action=payment. Header X-Api-Key. A cpcl_ key only writes its company, venture, or project. Same source + external_id returns the existing row. USD only. One project is chosen when the venture has a single project."},{"group":"Portfolio","method":"GET","path":"/api/v1/mindfiles/","auth":"cpcl_ key, API key, or session","query":["organization_id","project_id"],"body":[],"response":["kind","company","venture or ventures[]","brandkit","intelligence","signals","money"],"notes":"Master JSON for one company or one project. Brand kit comes from the venture, then Holdings when that kit is empty. A venture key sees only its venture. A project key sees only its project."},{"group":"Portfolio","method":"POST","path":"/api/v1/mindfiles/","auth":"cpcl_ key, API key, or session","query":[],"body":["action=save|refresh","organization_id","project_id","positioning","audience","offer","voice","proof","competitors","notes","facts"],"response":["mindfile or companies, projects"],"notes":"action=save stores the operator notes and rewrites the JSON file. action=refresh is a signed-in operator only and writes up to 100 companies and 200 projects."},{"group":"Money","method":"PATCH","path":"/api/v1/financials/","auth":"session","query":["id"],"body":["id","start_on","end_on","paid_on","renews_on","frequency"],"response":["item"],"notes":"Set paid/renew dates on an existing bill. Empty renews_on recomputes from start_on + frequency."},{"group":"Money","method":"GET","path":"/api/v1/jobs/","auth":"session|pixel_key","query":["limit","offset","status","project_id"],"body":[],"response":["jobs[]"],"notes":"Staff list item includes cost, sell, margin."},{"group":"Money","method":"GET","path":"/api/v1/jobs/{id}/","auth":"session|pixel_key","query":[],"body":[],"response":["job job_staff"],"notes":""},{"group":"Money","method":"GET","path":"/api/v1/jobs/{id}/customer/","auth":"session|pixel_key","query":["view=customer"],"body":[],"response":["job sell lines only -- no cost"],"notes":"Customer-safe payload."},{"group":"Money","method":"POST|PATCH","path":"/api/v1/jobs/","auth":"session|pixel_key","query":["id on PATCH"],"body":["title","client_label","project_id","status","source"],"response":["job"],"notes":""},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/goals/","auth":"session","query":["project_id","id","limit","offset"],"body":["project_id","name","goal_type","target_value","current_value","due_on","status"],"response":["goals[] or id"],"notes":""},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/tasks/","auth":"session","query":["project_id","id","limit","offset"],"body":["project_id","title","owner_name","estimate_hours","status"],"response":["tasks[] or id"],"notes":""},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/bugs/","auth":"session|api_key|cpcl_","query":["project_id","venture_id","organization_id","company_id","id","limit","offset"],"body":["project_id","project_slug","title","problem","details","fix","fix_files","severity","reporter_name","status","page_urls","page_url"],"response":["bugs[] with problem, fix, fix_files, patched_at, page_urls, or id and status"],"notes":"Company and venture come from the project. A cpcl_ key is locked to its company, venture, or project. POST accepts project_slug. problem and details are the original bug. severity is low, medium, high, or critical. GET lists critical and high first. fix stores the patch and marks the row fixed. fix_files is a list of paths. An open create notifies Marvis when CP_MARVIS_ALERT_KEY is set. A create that already includes fix does not notify. PATCH can set status, severity, or add fix later. This endpoint is not rate limited so a batch of reports can be filed. Other Command APIs still use the per-minute cap."},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/alerts/","auth":"session|api_key|cpcl_","query":["project_id","project_slug","venture_id","organization_id","company_id","page_url","id","limit","offset"],"body":["project_id","project_slug","page_url","link_url","title","message","severity","reporter_name","status"],"response":["alerts[] or id"],"notes":"Log of alerts for every app. If message is omitted, the custom message saved for that page_url is used. {page_url} and {link_url} are replaced. PATCH status is open or closed."},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/alert-urls/","auth":"session|api_key|cpcl_","query":["project_id","project_slug","venture_id","organization_id","company_id","page_url","id","limit","offset"],"body":["project_id","project_slug","page_url","link_url","message","status"],"response":["alert_urls[] or id"],"notes":"One custom message per page URL on a project. link_url is the URL tied to that page. POST again for the same page_url updates the row. PATCH status is active or paused."},{"group":"Execution","method":"GET|POST","path":"/api/v1/expenses/","auth":"session","query":["project_id","job_id","limit","offset"],"body":["job_id","amount","vendor","category","notes"],"response":["expenses[] or id"],"notes":"Internal job COGS."},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/costs/","auth":"session","query":["job_id"],"body":["job_id","amount","vendor","category"],"response":["cost_lines[]"],"notes":"Job cost lines."},{"group":"Execution","method":"GET|POST","path":"/api/v1/splits/","auth":"session","query":["project_id"],"body":["project_id","party_name","split_bps","role_label"],"response":["splits[]"],"notes":"Economic split parties in basis points."},{"group":"Execution","method":"GET|POST","path":"/api/v1/splits/import/","auth":"session","query":[],"body":["url"],"response":["deals[]","deal"],"notes":"POST a contract URL or slug. Reads ee_holdings and stores parties plus split basis points. GET lists saved deals. CSRF on POST."},{"group":"Track","method":"GET|POST|PATCH|DELETE","path":"/api/v1/pixels/","auth":"session|pixel_key","query":["id","app_slug","owner_user_ref","project_id","action","key_id"],"body":["name","app_slug","owner_user_ref","status","project_id","allowed_hosts"],"response":["pixels[]","pixel","keys[]"],"notes":"Manage EE tracking pixels and eepx_ keys. POST with only project_id fills name/slug from that Command project."},{"group":"Track","method":"GET|POST","path":"/api/v1/collect/","auth":"none|pixel_key write","query":["id|pixel_id|p public px id"],"body":["event","path","referrer"],"response":["accepted","pixel"],"notes":"CORS * for browser pixels. Optional write key for server events."},{"group":"Track","method":"GET","path":"/api/v1/traffic/","auth":"session|pixel_key read","query":["pixel|pixel_id|id","range=24h|7d|30d","view=summary|hits"],"body":[],"response":["hits","visitors","sources","pages","days or hits[]"],"notes":"Staff traffic reports. Use analytics for public embed numbers."},{"group":"Track","method":"GET","path":"/api/v1/analytics/","auth":"none|pixel_key read|session for portfolio","query":["pixel px_... or app=rcna","view=card|report","range=24h|7d|30d"],"body":[],"response":["pixel_analytics schema"],"notes":"CORS * callable pack. Compact card by default. view=report adds hours, weekdays, rates, share tables. app=rcna is Recovery Networks. Staff session with no pixel returns the portfolio report. recent[] only with staff or eepx_ read."},{"group":"System","method":"GET","path":"/api/v1/ai/","auth":"session","query":["project_id optional"],"body":[],"response":["recommendations[]"],"notes":"Explainable priority recommendations."},{"group":"System","method":"GET|POST","path":"/api/v1/ai-spend/","auth":"session","query":["month=YYYY-MM"],"body":["vendor","spent_on","amount_usd","kind","cost_kind","invoice_ref","project_id?","venture_id?","note"],"response":["summary or id"],"notes":"Billed cash vs changelog. Token notes are not cash. Duplicate invoice_ref returns already recorded. Budgets are alerts only."},{"group":"System","method":"GET","path":"/api/v1/agent-executions/","auth":"session","query":["month=YYYY-MM"],"body":[],"response":["summary"],"notes":"Cursor subagent execution counts, duration, outcomes. estimated_usd null means unknown (never zero). Not office chat roster."},{"group":"System","method":"GET|POST","path":"/api/v1/onboarding/","auth":"session","query":[],"body":["action=onboard|add_ventures|delete_venture|seed_holding_portfolio"],"response":["organization","ventures[]","venture?","created[]?","children[]?"],"notes":"Create company, add ventures, delete an empty venture, or nest EE portfolio ventures under a holding project (parent_project_id)."},{"group":"System","method":"GET|PATCH","path":"/api/v1/settings/","auth":"session","query":[],"body":["default_markup_bps"],"response":["default_markup_bps"],"notes":"Global markup default for jobs."},{"group":"System","method":"GET|POST|PATCH","path":"/api/v1/changelog/","auth":"session|changelog_key","query":["organization_id","venture_id","project_id","q","limit","offset","id"],"body":["title","summary","extra_notes","categories","priority","project_id","external_ref","work_started_at","work_ended_at","ai_duration_seconds","ai_duration_minutes","human_estimate_seconds","human_estimate_minutes"],"response":["entries[]","entry","ai_duration_seconds","human_estimate_seconds","efficiency_ratio","time_saved_seconds"],"notes":"Scoped ship log. Timing columns compare AI duration to a human-alone estimate; efficiency_ratio = human / AI. extra_notes is the reserved scale-up column. PATCH extra_notes is session only."},{"group":"System","method":"GET|POST|PATCH","path":"/api/v1/changelog/keys/","auth":"session","query":["organization_id","venture_id","project_id"],"body":["name","scope_type","organization_id","venture_id","project_id","extra_notes","action","id"],"response":["keys[]","key with api_key once"],"notes":"Mint hashed cpcl_ keys. Raw secret shown once on create."},{"group":"System","method":"GET|POST","path":"/api/v1/changelog/provision/","auth":"session","query":[],"body":[],"response":["platforms[]"],"notes":"GET previews EE platforms vs Command projects. POST creates missing ventures/projects, enables changelog snap-in, and mints project keys once."},{"group":"System","method":"GET","path":"/api/v1/changelog/analytics/","auth":"session|changelog_key","query":["days","organization_id","venture_id","project_id"],"body":[],"response":["counts","pace","hours[]","days[]","weekdays[]","projects[]","priorities[]","sources[]","last_punch","punches[]"],"notes":"Frequency board for cp_changelog_entries. days defaults to 7 (1-30). projects[] include share_pct and per_day. Key scope applies. UI: /changelog/."},{"group":"System","method":"GET","path":"/api/v1/changelog/export/","auth":"session|changelog_key","query":["format","organization_id","venture_id","project_id","q","date_from","date_to","download"],"body":[],"response":["file","entries[]","filename","total","truncated"],"notes":"Download the scoped ship log. format=apps|csv|md|json. date_from and date_to are YYYY-MM-DD, US Eastern, inclusive. The ship log page starts the fields at the last 2 days. apps is a Markdown list grouped by project. Cap 5000 rows. json&download=0 returns the JSON envelope. UI: /changelog/#export."},{"group":"System","method":"GET","path":"/changelog/live/","auth":"session","query":["after_id","organization_id","venture_id","project_id","q","date_from","date_to","limit"],"body":[],"response":["ok","count","newest_id","ids[]","html","total","polled_at"],"notes":"Staff AJAX feed for /changelog/. Returns HTML card fragments for rows with id > after_id using the same filters. Paused when the tab is hidden."},{"group":"Execution","method":"GET","path":"/api/v1/progress/export/","auth":"session","query":["kind","venture_id","project_id","format","download"],"body":[],"response":["file","entries[]","filename","total"],"notes":"kind=todo or improvement. Staff must already share that venture. Cap 2000 rows. UI: project To-dos tab."},{"group":"Execution","method":"GET","path":"/api/v1/goals/export/","auth":"session","query":["project_id","format","download"],"body":[],"response":["file","entries[]","filename","total"],"notes":"Download measurable goals. Optional project_id. Cap 2000 rows. UI: /goals/ and project Goals tab."},{"group":"Execution","method":"GET","path":"/api/v1/bugs/export/","auth":"session|changelog_key","query":["project_id","venture_id","organization_id","format","download"],"body":[],"response":["file","entries[]","filename","total"],"notes":"Download scoped bugs. Staff with no filter gets every row. A cpcl_ key stays inside its scope. Cap 2000. UI: project Bugs tab."},{"group":"System","method":"GET|POST|PATCH","path":"/api/v1/snapins/","auth":"session|changelog_key read","query":["project_id"],"body":["action=enable|disable|reorder|notes","snapin_key","project_id","stack","extra_notes"],"response":["catalog[]","stack[]","card"],"notes":"Stack changelog, checks, health, mermaids, pastes, chat, pdfs, contracts, whitepapers on a project."},{"group":"System","method":"GET|POST","path":"/api/v1/checks/","auth":"session|changelog_key","query":["project_id"],"body":["action=run|context|override|enable|disable|create|attest","project_id","check_key","base_url","env_rel_path","param_value","runner"],"response":["catalog[]","context","last_run","run","results[]"],"notes":"Parameter catalog in cp_checks. Security and .env first. INSERT or POST action=create to snap in more. .env values are never returned. UI: /checks/. DataPolicy standards render under that audit."},{"group":"System","method":"GET|POST","path":"/api/v1/documents/","auth":"session|changelog_key","query":["project_id"],"body":["action=pack|push|upload","project_id","agreement_key","title","label","pdf_base64"],"response":["project_id","catalog[]","stored[]"],"notes":"cpcl_ key or staff session. The key must cover the project. action=pack writes the draft agreement catalog onto that project. action=push writes one agreement_key. action=upload stores a PDF the caller already built. Drafts are not signed contracts. UI: project Documents tab."},{"group":"System","method":"GET|POST","path":"/api/v1/venture-documents/","auth":"session","query":["venture_id"],"body":["action=register|archive","venture_id","doc_type","title","tags","parent_id","document_id","verification_status","verified_on","expires_on","csrf"],"response":["documents[]","onboarding[]","types","id","version_no"],"notes":"Venture document metadata, versions, tags, and archive. Staff session only. Binary file bytes are not accepted on this route."},{"group":"System","method":"GET|POST","path":"/api/v1/sales-contracts/","auth":"session","query":[],"body":["action=collect","csrf"],"response":["project_id","parent_id","contracts[]","cloned","updated","trace_id"],"notes":"Places sales.reversal.org under Reversal Solutions or the ecosystem parent. POST action=collect reads salesdb.sales_contracts and stores a contract link plus a trace document. Names, emails, and signatures are not copied."},{"group":"System","method":"GET|POST","path":"/api/v1/holdings-groups/","auth":"session|cpcl_","query":[],"body":["action=sync","csrf on session write"],"response":["project_id","venture_id","groups[] or read/created/updated/members","trace_id"],"notes":"Mirrors ee_holdings.`groups` and user_groups onto cp_groups (source=holdings) under the EE Holdings project. Holdings is source of truth. UI: /groups/."},{"group":"System","method":"GET|POST","path":"/api/v1/sales-groups/","auth":"session|cpcl_","query":[],"body":["action=sync","csrf on session write"],"response":["project_id","venture_id","groups[] or read/created/updated/members","trace_id"],"notes":"Mirrors salesdb.sales_groups and sales_group_members onto cp_groups (source=sales). Sales is source of truth. API only; Holdings groups use /groups/."},{"group":"System","method":"GET|POST","path":"/api/v1/finance-groups/","auth":"session|cpcl_","query":[],"body":["action=sync","csrf on session write"],"response":["project_id","venture_id","groups[] or read/created/updated/members","trace_id"],"notes":"Mirrors finance_db.finance_groups onto cp_groups (source=finance) under the EE Financial project. Finance admin is source of truth. UI: https://ee.financial/admin/dashboard/#product-groups"},{"group":"System","method":"GET|POST|PATCH","path":"/api/v1/venture-framework/","auth":"session","query":["venture_id","action=framework|checklist"],"body":["action=save|evidence|submit|approve|reject|launch|assign|upgrade","venture_id","item_id","version_id","status","row_version","csrf"],"response":["framework","checklist[]","progress","signals[]"],"notes":"Staff session and CSRF on writes. Checklist definitions stay in SQL. Approval and launch are manager-only. A percent does not authorize launch."},{"group":"System","method":"GET|POST","path":"/api/v1/venture-health/","auth":"session|changelog_key","query":["project_id"],"body":["action=save_base|add|remove|required|run","project_id","base_url","label","path","expect_status","is_required","url_id"],"response":["venture_id","base_url","urls[]","score","pass","fail"],"notes":"One checklist per venture. Privacy, whitepaper, /seller, and the 404 row start required. is_required 1 counts toward Required done. Optional rows still run. Probes do not follow redirects. UI: /projects/view/?tab=health."},{"group":"System","method":"GET|POST|PATCH","path":"/api/v1/pastes/","auth":"session bind; session|changelog_key note","query":["project_id"],"body":["action=bind|unbind|note|ping","project_id","name","pastes_api_key","title","body","external_id"],"response":["binding","paste"],"notes":"Per-project encrypted pvsk_ binding. Cursor posts notes with cpcl_. Forwards to pastes.reversal.org/api/v1/notes/."},{"group":"Projects","method":"GET|POST","path":"/api/v1/project-coowners/","auth":"session|changelog_key","query":["project_id","public_id"],"body":["action=add|remove","project_id","public_id","email","staff_id"],"response":["project_id","public_id","coowners[]","mailed"],"notes":"Owner or operator, or a cpcl_ key that covers the project. A new co-owner signs in only to attached projects. Role owner is never changed. The email has a sign-in link and a view link. A new password is emailed once and is not returned. Changing the accountable owner or EE product manager on project save sends the same links to the stored inbox."},{"group":"Projects","method":"GET|POST","path":"/api/v1/staff-roster/","auth":"session|changelog_key","query":["venture_id","project_id","action=list|check|board"],"body":["action=upsert|remove|seed|check","venture_id","project_id","role_key","role_label","person_name","person_email","status","is_required","id"],"response":["seats[]","check","pass","open_roles[]","board[]"],"notes":"Org roles to build out on a venture or project. Not login co-owners. Required seats must be filled for action=check to pass. UI: /staff/ and project tab Staff."},{"group":"System","method":"POST","path":"/api/v1/chat/","auth":"cpcw_ for config and message; session|changelog_key for save, list, inbox, master, rotate, status","query":[],"body":["action=config|message|save|list|inbox|master|rotate|status","project_id","public_id","business_name","theme","fields","steps","roles","name","phone","email","message","consent"],"response":["widget","widgets[]","messages[]","accepted","thank_you","success_msg","next_url"],"notes":"Lead Connector. action=message stores the lead, then runs steps. The embed stays on the thank-you. next_url is a Continue link, https only. Mail uses the Reversal Brevo key. A missing key still stores the lead. Traces: /usage/. POST only. UI: /chat/."},{"group":"System","method":"GET|POST","path":"/api/v1/contact/","auth":"public POST; session GET","query":["project_id","channel"],"body":["channel=venture|helpdesk|job","project_slug","project_id","job_id","name","email","message","page_url"],"response":["id","messages[]"],"notes":"Public POST stores a note for one project. job requires job_id on that project. A honeypot field named website is ignored. Staff GET lists the inbox. The note writes a medium alert and emails the owner. Both include the sender email. UI: /contact/."},{"group":"Execution","method":"GET|POST|PATCH","path":"/api/v1/helpdesk/","auth":"session|api_key|cpcl_","query":["project_id","project_slug","venture_id","organization_id","company_id","id","status","limit","offset"],"body":["project_id","project_slug","subject","body","priority","channel","requester_name","requester_email","page_url","source_ref","status","assignee_staff_id","action=reply","reply","is_internal"],"response":["tickets[] with replies on detail, or id and status, or reply_id"],"notes":"Ticket lifecycle per project. priority is low, medium, high, or urgent. status is open, in_progress, waiting, resolved, or closed. A cpcl_ key is locked to its company, venture, or project. Open creates write a Command alert. PATCH can set status/priority/assignee or action=reply. Distinct from /api/v1/contact/ helpdesk notes. UI: /helpdesk/."},{"group":"System","method":"GET|POST","path":"/api/v1/errors/","auth":"public POST; session GET and action=clear","query":["project_id"],"body":["project_slug","page_url","tried","reason","action=clear","confirm=all","project_id"],"response":["id","report_url","errors[]","cleared"],"notes":"A console error stores the page, what was tried, and why. Command writes an alert and emails the owner once per signature per Eastern day. action=clear needs a staff session and CSRF. UI: /errors/."},{"group":"System","method":"POST","path":"/api/v1/mail/send/","auth":"session","query":[],"body":["action=welcome|receipt|progress|comeback|thanks","resource","href","fact","button","user_id"],"response":["action","sent","skipped","trace_id"],"notes":"Staff session and CSRF. The inbox is loaded from cp_staff. The browser cannot set a recipient, subject, or HTML body. One note per person, action, and resource per Eastern day. A receipt is one per payment id. An empty Reversal Brevo key skips the send. Traces: /usage/."},{"group":"System","method":"GET|POST","path":"/api/v1/desk/","auth":"session","query":[],"body":["action=todo","project_id","title"],"response":["projects[]","id","project_id","title"],"notes":"Signed-in desk chat. GET lists projects the person can add a to-do to. POST action=todo stores one line on that project. CSRF on POST. The shell mounts it bottom right. More actions are not accepted yet."},{"group":"System","method":"GET|POST|PATCH|DELETE","path":"/api/v1/whitepaper-dumpster/","auth":"session","query":["action=list|get|notes|paper|prompt|mermaids","id","file_id","limit","offset"],"body":["action=create|update|delete|upload|delete_file|generate|add_note|update_note|refine","title","idea_summary","project_id","file_id","extra_brief","chart_keys[]","note_id"],"response":["dumpsters[]","dumpster","files[]","notes[]","paper","prompt","file_id"],"notes":"Per-PDF inbox. Upload extracts then analyzes that file only. Pass file_id on get, notes, paper, prompt, generate, and refine. UI: /whitepaper-dumpster/."},{"group":"System","method":"GET|POST|DELETE","path":"/api/v1/mermaids/","auth":"session","query":["action=list|get|templates|opts","owner_type","owner_id","dumpster_id","project_id","id"],"body":["action=create|generate|opts|delete","owner_type","owner_id","title","kind","body_mermaid","chart_keys[]","dumpster_id"],"response":["charts[]","chart","templates[]","count"],"notes":"Mermaid lists on company, venture, project, dumpster. Generate from a dumpster whitepaper. UI: /mermaids/."}],"features":[{"feature_key":"hierarchy","label":"Company / venture / project","kind":"core","status":"active","api_path":"/api/v1/hierarchy/","ui_path":"/overview/","summary":"Parent companies own ventures; ventures own projects. Project Command nests under Reversal."},{"feature_key":"sales-contracts","label":"sales.reversal.org contracts","kind":"snapin","status":"active","api_path":"/api/v1/sales-contracts/","ui_path":"/projects/view/","summary":"sales.reversal.org sits under Reversal Solutions or the ecosystem parent. POST action=collect clones each sales contract as a trace document. Names and emails stay in salesdb."},{"feature_key":"holdings-groups","label":"EE Holdings groups","kind":"snapin","status":"active","api_path":"/api/v1/holdings-groups/","ui_path":"/groups/","summary":"EE Holdings owns user groups. Command mirrors groups and members onto the EE Holdings project. POST action=sync pulls from ee_holdings.`groups` and user_groups. Usernames only; emails are not copied."},{"feature_key":"sales-groups","label":"sales.reversal.org groups","kind":"snapin","status":"active","api_path":"/api/v1/sales-groups/","ui_path":"/api/v1/sales-groups/","summary":"Sales owns partner teams. Command mirrors groups and members onto the Sales venture via API. POST action=sync pulls from salesdb. Names stay as usernames; emails are not copied."},{"feature_key":"project-coowners","label":"Project co-owners","kind":"core","status":"active","api_path":"/api/v1/project-coowners/","ui_path":"/projects/view/","summary":"Attach a client email to one project. The note includes a sign-in link and a link to view that project. Saving a new accountable owner or EE product manager sends the same kind of note to the address already on that account."},{"feature_key":"venture-brand","label":"Venture brand kit","kind":"core","status":"active","api_path":"","ui_path":"/companies/","summary":"Each venture stores a logo and brand kit. Projects under it use that kit. The venture you select becomes the favicon, header icon, sidebar, and buttons."},{"feature_key":"overlook","label":"Overlook","kind":"core","status":"active","api_path":"/api/v1/overlook/","ui_path":"/","summary":"Portfolio KPIs, survival mix, traffic snapshot, attention queue, and ranked project table."},{"feature_key":"changelog","label":"Scoped ship log","kind":"snapin","status":"active","api_path":"/api/v1/changelog/","ui_path":"/changelog/","summary":"Company, venture, or project entries with AI vs human timing, metered Composer/Grok token breakdown (in/out/cache), and list or billed USD. Ingest with a hashed cpcl_ key."},{"feature_key":"changelog-analytics","label":"Ship-log analytics","kind":"workflow","status":"active","api_path":"/api/v1/changelog/analytics/","ui_path":"/changelog/","summary":"Ship-log frequency board: last-7-days default, project mix circle, sortable table, weekday bars, and click-to-filter punches."},{"feature_key":"changelog-export","label":"Ship-log export","kind":"workflow","status":"active","api_path":"/api/v1/changelog/export/","ui_path":"/changelog/","summary":"Export a From/To Eastern date window from /changelog/ as an apps list, CSV, Markdown, or JSON (max 5000 rows)."},{"feature_key":"changelog-live","label":"Ship-log live feed","kind":"workflow","status":"active","api_path":"/changelog/live/","ui_path":"/changelog/","summary":"Staff AJAX poll on /changelog/ prepends new ship-log cards without a full refresh (after_id + active filters)."},{"feature_key":"progress-export","label":"To-do export","kind":"workflow","status":"active","api_path":"/api/v1/progress/export/","ui_path":"/projects/view/","summary":"Download project to-dos or improvements as CSV, Markdown, or JSON (max 2000 rows)."},{"feature_key":"goals-export","label":"Goals export","kind":"workflow","status":"active","api_path":"/api/v1/goals/export/","ui_path":"/goals/","summary":"Download measurable goals as CSV, Markdown, or JSON (max 2000 rows)."},{"feature_key":"bugs-export","label":"Bugs export","kind":"workflow","status":"active","api_path":"/api/v1/bugs/export/","ui_path":"/projects/view/","summary":"Download scoped bug rows as CSV, Markdown, or JSON (max 2000 rows). Staff session or a cpcl_ read key."},{"feature_key":"changelog-keys","label":"Changelog keys","kind":"auth","status":"active","api_path":"/api/v1/changelog/keys/","ui_path":"/changelog/keys/","summary":"Mint one cpcl_ key per scope. Raw secret shown once. First key: Project Command."},{"feature_key":"changelog-provision","label":"Install platform changelogs","kind":"workflow","status":"active","api_path":"/api/v1/changelog/provision/","ui_path":"/changelog/install/","summary":"Create missing Command ventures/projects, enable the ship-log snap-in, and mint a project cpcl_ key for each EE platform."},{"feature_key":"snapins","label":"Snap-in stack","kind":"core","status":"active","api_path":"/api/v1/snapins/","ui_path":"/snapins/","summary":"Enable and order modules on a project. Do not add a column per feature."},{"feature_key":"health","label":"Venture health","kind":"snapin","status":"active","api_path":"/api/v1/venture-health/","ui_path":"/projects/view/","summary":"Each venture has a URL checklist. Privacy, whitepaper, and /seller must return 200. A 404 row must stay missing. Staff can add more paths on that origin."},{"feature_key":"checks","label":"Security audit","kind":"snapin","status":"active","api_path":"/api/v1/checks/","ui_path":"/checks/","summary":"Sidebar Security audit. SQL catalog of security and .env parameters. INSERT a row to snap in more checks. Runners never return secrets. DataPolicy standards sit under this audit."},{"feature_key":"staff-roster","label":"Venture staff roster","kind":"feature","status":"active","api_path":"/api/v1/staff-roster/","ui_path":"/staff/","summary":"Add roles on each venture and project, fill seats, and GET action=check for pass or open. Separate from login co-owners. Project tab: Staff."},{"feature_key":"venture-documents","label":"Venture documents","kind":"snapin","status":"preview","api_path":"/api/v1/venture-documents/","ui_path":"/checks/","summary":"Per-venture document metadata, versions, tags, archive, and an onboarding checklist. Staff session only. File bytes stay off this API."},{"feature_key":"venture-framework","label":"Venture frameworks","kind":"snapin","status":"preview","api_path":"/api/v1/venture-framework/","ui_path":"/frameworks/","summary":"SQL lifecycle checklists. Admins publish versions. A venture pins one version. Launch is a separate gate from the percent."},{"feature_key":"datapolicy","label":"DataPolicy standards","kind":"snapin","status":"active","api_path":"","ui_path":"/checks/","summary":"Under the security audit. Privacy, terms, whitepaper, and data handling are required, missing, verified, expired, or review-needed from stored documents."},{"feature_key":"pdfs","label":"Streamline PDFs","kind":"snapin","status":"active","api_path":"/api/v1/documents/","ui_path":"/documents/","summary":"Draft Compacter, Backout, mail, and account agreements are stored as PDFs on cp_documents. POST /api/v1/documents/ with a cpcl_ key pushes one project pack. Counsel must review before they are treated as signed."},{"feature_key":"contracts","label":"Contracts","kind":"snapin","status":"preview","api_path":"/api/v1/snapins/","ui_path":"/documents/","summary":"Document label=contract. Templates and e-sign are not built yet."},{"feature_key":"whitepapers","label":"Whitepapers","kind":"snapin","status":"active","api_path":"/api/v1/whitepaper-dumpster/","ui_path":"/whitepaper-dumpster/","summary":"Each uploaded PDF is analyzed on its own. Notes and the draft stay in that file container."},{"feature_key":"whitepaper-dumpster","label":"Whitepaper dumpster","kind":"snapin","status":"active","api_path":"/api/v1/whitepaper-dumpster/","ui_path":"/whitepaper-dumpster/","summary":"Studio workspace. Open one PDF to see only that file notes, draft, and analyze action."},{"feature_key":"mermaids","label":"Mermaid charts","kind":"core","status":"active","api_path":"/api/v1/mermaids/","ui_path":"/mermaids/","summary":"Companies, ventures, and projects each hold a mermaid list. Dumpsters generate end-to-end system maps plus one flowchart per whitepaper note."},{"feature_key":"pastes","label":"CodeShare notes","kind":"snapin","status":"active","api_path":"/api/v1/pastes/","ui_path":"/pastes/","summary":"Bind a pvsk_ key per project. Cursor pings notes with a cpcl_ key; Command posts them to pastes.reversal.org."},{"feature_key":"chat","label":"Lead Connector","kind":"snapin","status":"active","api_path":"/api/v1/chat/","ui_path":"/chat/","summary":"Unlimited agents. After the form is sent, the thank-you stays open with an optional Continue link. Mail uses the Reversal Brevo key."},{"feature_key":"agent-office","label":"Agent office","kind":"snapin","status":"preview","api_path":"/chat/office/","ui_path":"/chat/office/","summary":"Staff floor of every tracked agent and sub-agent. Lead Connector roles and other embeds sync into cp_agent_roster. A photo stands in until a 3D model is assigned."},{"feature_key":"office-floor","label":"Office floor","kind":"snapin","status":"preview","api_path":"/chat/office/floor/","ui_path":"/chat/office/floor/","summary":"Four rooms with their own people. Public agents are the default. An owner or co-owner can show private and internal agents and move a person without copying that identity. Details open under the selected room."},{"feature_key":"ai-spend","label":"AI spend","kind":"core","status":"active","api_path":"/api/v1/ai-spend/","ui_path":"/ai/spend/","summary":"Billed AI cash beside changelog rows, model notes, budgets as alerts, and unattributed cost until a project is proven. Does not block Cursor billing."},{"feature_key":"action-mail","label":"Action mail","kind":"core","status":"active","api_path":"/api/v1/mail/send/","ui_path":"/usage/","summary":"Sign-in, a saved or finished to-do, a ship, and a recorded payment each send one note through the Reversal Brevo key. The inbox is the staff row."},{"feature_key":"bill-renewals","label":"Hosting and domain renewals","kind":"core","status":"active","api_path":"/api/v1/financials/","ui_path":"/financials/","summary":"Paid-on and renews-on dates on ops bills. Upcoming and overdue on Financials and the project Hosting & bills tab."},{"feature_key":"payment-ingest","label":"Outside payments","kind":"core","status":"active","api_path":"/api/v1/financials/","ui_path":"/financials/","summary":"A cpcl_ key and a venture id record a one-time USD payment from another website. The same source and external id is stored once."},{"feature_key":"desk-chat","label":"Desk chat","kind":"core","status":"active","api_path":"/api/v1/desk/","ui_path":"/","summary":"Signed-in bottom-right chat. The live action adds one to-do on a chosen project. More actions stay marked coming soon."},{"feature_key":"mindfiles","label":"Mindfiles","kind":"core","status":"active","api_path":"/api/v1/mindfiles/","ui_path":"/mindfiles/","summary":"One master JSON per company and per project. It calls the venture brand kit, and Holdings when the venture kit is empty, plus money, leads, and operator notes."},{"feature_key":"contact","label":"Contact inbox","kind":"core","status":"active","api_path":"/api/v1/contact/","ui_path":"/contact/","summary":"One API for a venture note, a helpdesk note, or a note on a job listing. Each row stays on that project."},{"feature_key":"helpdesk","label":"Helpdesk tickets","kind":"core","status":"active","api_path":"/api/v1/helpdesk/","ui_path":"/helpdesk/","summary":"Support tickets per project with priority, status, and replies. Apps open tickets with a cpcl_ key. Contact inbox stays for short notes."},{"feature_key":"error-log","label":"Console error log","kind":"core","status":"active","api_path":"/api/v1/errors/","ui_path":"/errors/","summary":"A venture page posts a console error with the page, what was tried, and why. Command alerts the project and emails a copy. Staff can clear the log."},{"feature_key":"jobs","label":"Jobs and COGS","kind":"core","status":"active","api_path":"/api/v1/jobs/","ui_path":"/jobs/","summary":"Billed work with hidden cost. Customer projection never includes margin."},{"feature_key":"pixels","label":"Pixels and traffic","kind":"core","status":"active","api_path":"/api/v1/pixels/","ui_path":"/pixels/","summary":"Tracking properties, collect, analytics embed, traffic report."},{"feature_key":"pixel-analytics","label":"Pixel analytics pack","kind":"workflow","status":"active","api_path":"/api/v1/analytics/","ui_path":"/pixels/traffic/","summary":"Callable JSON pack. Compact card or view=report (charts, hours, rates). app=rcna is Recovery Networks."},{"feature_key":"bug-log","label":"Project bug log","kind":"core","status":"active","api_path":"/api/v1/bugs/","ui_path":"/projects/","summary":"Each project keeps its own bug log. POST can file an open bug, or send problem plus fix to store the patch as done. Severity is low, medium, high, or critical. Lists load critical and high first. PATCH can set status or severity. The Bugs tab shows the original problem and the fix on done rows. Marvis ship copies status and urgency, and mark-done sets status to fixed. A cpcl_ key stays inside its scope. An open create pings Marvis once when CP_MARVIS_ALERT_KEY is set. A row that already includes the fix does not ping."},{"feature_key":"alert-log","label":"App alert log","kind":"core","status":"active","api_path":"/api/v1/alerts/","ui_path":"","summary":"Every app can log alerts through Project Command. Each page URL can store one linked URL and a custom message. {page_url} and {link_url} in that message are filled when an alert is filed. Saving the same page URL again updates that message. It does not add a second row."},{"feature_key":"backout-revenue","label":"Backout revenue pull","kind":"core","status":"active","api_path":"","ui_path":"/companies/","summary":"A venture can store a Backout structure id from the env packet and a Backout API key. Pull reads org revenue totals and confirms the structure. Only the staff member who created the venture can see the key prefix or change the key. Partners with financial access can pull totals and do not see the key."},{"feature_key":"progress-lists","label":"To-dos and improvements","kind":"core","status":"active","api_path":"","ui_path":"/projects/","summary":"Each project has To-dos and Improvements tabs. Each venture page has the same two lists. A to-do can include an optional page URL, recommended, for the page to fix. The glowing Marvis mark on a to-do sends it to the Marvis ship log as an Optimize brief titled with the project name. Partners who are already on the venture can add items, mark them done, and send them. Owner and operator accounts can use every list and can edit a to-do to clarify the note. Open to-dos show by default. Closed ones stay hidden until Closed or All is selected. Data view lists the same rows in a compact stack."},{"feature_key":"backout-sso","label":"Backout sign-in","kind":"core","status":"active","api_path":"","ui_path":"/projects/view/","summary":"A project Backout tab connects the Backout account and stores the Stripe id. A second sign-in imports one venture into a hosting, domain, SaaS, or other container: products, payment structures, and dates. Staff can create a checkout structure on that account for Vending Valley, EE Holdings, or Compacter."},{"feature_key":"venture-finance-share","label":"Venture financial sharing","kind":"core","status":"active","api_path":"","ui_path":"/companies/","summary":"On a venture page, an owner or operator can add a person and share view access to that venture's bills. A new email creates a member account they can sign in with. Partners and members see only granted ventures on Financials and Overlook."},{"feature_key":"partner-signup","label":"EE partner signup","kind":"core","status":"active","api_path":"","ui_path":"/signup/","summary":"An EE Holdings user can create a Project Command staff row when users.role is partner and users.status is active. Pending, inactive, and other roles are refused. Later sign-in rechecks that gate."},{"feature_key":"evening-schedule","label":"Evening schedule","kind":"core","status":"active","api_path":"","ui_path":"/schedule/","summary":"Partners and potential clients book a weekday block after 5:00 PM EST, weekly or monthly. A guest can free one evening with I can't make it. Staff close times that are already meetings. The window ends at 9:00 PM EST."},{"feature_key":"request-log","label":"Request log","kind":"core","status":"active","api_path":"/api/v1/request-log/","ui_path":"/request-log/","summary":"Staff log of API calls, page views, and container actions. Each row stores the project snapshot (slug, venture, company, lifecycle) plus the container the request passed through. Hosting, domain, SaaS, and other bill saves are cost-container rows. Pixel collect and health probes are not stored here."},{"feature_key":"contract-deals","label":"Contract splits","kind":"core","status":"active","api_path":"/api/v1/splits/import/","ui_path":"/splits/","summary":"Paste an ee.holdings contract link. Command reads the parties, revenue split, and sale note from EE Holdings and stores them on the matching venture."},{"feature_key":"docs-layer","label":"Documentation layer","kind":"meta","status":"active","api_path":"/api/v1/docs/","ui_path":"/docs/","summary":"JSON catalog of features, snap-ins, and endpoints at GET /api/v1/docs/. The HTML Docs page is the public API access guide."},{"feature_key":"public-api-access","label":"Public API access","kind":"meta","status":"active","api_path":"/api/v1/changelog/","ui_path":"/docs/","summary":"/docs/ and /documentation/ show the same guide: API keys, open endpoints, fields a caller can send, and request examples. Raw keys are not printed."}],"snapins":[{"snapin_key":"changelog","label":"Ship log","kind":"log","status":"active","api_path":"/api/v1/changelog/","ui_path":"/changelog/","extra_notes":"Live. Scoped cpcl_ keys. Next: webhooks, RSS, Holdings mirror."},{"snapin_key":"checks","label":"Project checks","kind":"pack","status":"active","api_path":"/api/v1/checks/","ui_path":"/checks/","extra_notes":"Catalog in cp_checks. Security and .env rows first. INSERT more parameters anytime."},{"snapin_key":"mermaids","label":"Mermaid charts","kind":"pack","status":"active","api_path":"/api/v1/mermaids/","ui_path":"/mermaids/","extra_notes":"Lists on company, venture, project, dumpster. Dumpster generate builds the e2e set from the whitepaper."},{"snapin_key":"health","label":"Venture health","kind":"pack","status":"active","api_path":"/api/v1/venture-health/","ui_path":"/projects/view/","extra_notes":"Per venture. Privacy, whitepaper, and /seller start the list. Add any other path, including one that must return 404."},{"snapin_key":"pastes","label":"CodeShare notes","kind":"log","status":"active","api_path":"/api/v1/pastes/","ui_path":"/pastes/","extra_notes":"Bind a pvsk_ key from pastes.reversal.org. Cursor posts notes with a cpcl_ key."},{"snapin_key":"chat","label":"Lead Connector","kind":"pack","status":"active","api_path":"/api/v1/chat/","ui_path":"/chat/","extra_notes":"Unlimited agents. Each agent has its own form, required flags, and input types."},{"snapin_key":"pdfs","label":"Streamline PDFs","kind":"document","status":"active","api_path":"/api/v1/snapins/","ui_path":"/documents/","extra_notes":"Uses cp_documents. Next: generate + merge pipeline, then a dedicated /api/v1/pdfs/."},{"snapin_key":"contracts","label":"Contracts","kind":"document","status":"preview","api_path":"/api/v1/snapins/","ui_path":"/documents/","extra_notes":"PDF label=contract today. Next: templates, e-sign, version log."},{"snapin_key":"whitepaper-dumpster","label":"Whitepaper dumpster","kind":"pack","status":"active","api_path":"/api/v1/whitepaper-dumpster/","ui_path":"/whitepaper-dumpster/","extra_notes":"Per-user PDF inbox. Auto metadata. Super prompt writes notes, auto-refines them, and drafts a whitepaper."},{"snapin_key":"whitepapers","label":"Whitepapers","kind":"pack","status":"active","api_path":"/api/v1/whitepaper-dumpster/","ui_path":"/whitepaper-dumpster/","extra_notes":"Dumpster analyzes uploaded PDFs into notes and a draft. Dedicated PDF pack is next."},{"snapin_key":"analytics","label":"Pixel analytics","kind":"pack","status":"active","api_path":"/api/v1/analytics/","ui_path":"/pixels/traffic/","extra_notes":"Super report: view=report. app=rcna is Recovery Networks. Charts on Traffic."}],"counts":{"features":56,"snapins":11,"endpoints":70}},"errors":[],"meta":{"app":"commandprojects","version":"v1","timestamp":"2026-10-22T21:02:42-04:00","timezone":"America/New_York","timezone_label":"EST","module":"api-docs"}}