← Back to brief

reference hubspot operations capabilities

memory · reference_hubspot_operations_capabilities.md

What chrome_bridge + in-browser CSRF can DO in HubSpot

This file is the persistent inventory. Most of the underlying operations are already exercised by sot_reconciler.py, bv_hs_sync.py, engagement_reconciler.py, etc. — this doc surfaces them as a capability menu.

Auth path

No PAT needed. The in-browser fetch() from a logged-in HS tab uses session cookies + CSRF token (document.cookie.match(/csrf\.app=([^;]+)/)). All /api/crm/v3/* endpoints work.

Verified read operations (CRM v3)

js
// Standard pattern, proven across multiple skills:
const csrf = (document.cookie.match(/csrf\.app=([^;]+)/)||[])[1];
fetch("/api/crm/v3/objects/contacts/search?portalId=23273108", {
  method: "POST",
  headers: {"Content-Type":"application/json", "X-HubSpot-CSRF-hubspotapi": csrf},
  body: JSON.stringify({...})
})

Object types proven readable: contacts, emails, notes, calls, meetings, tasks, deals.

Filter properties proven working: email, lead_source_notes (CONTAINS_TOKEN), hubspot_owner_id, hs_email_from_email, hs_email_to_email, hs_timestamp, hs_email_bcc_email, associations.contact.

Verified write operations

Verified URL routes

- BCC: 23273108@bcc.hubspot.com - Forwarding: 23273108@forward.hubspot.com - Read inputs: FormControl49 and FormControl53 (IDs are stable per-portal)

Verified DOM operations

Engagement-association truth

Anti-pattern catalogued

"HS API doesn't expose X" — when uncertain, hit the endpoint with the in-browser CSRF and read the actual response. Most v3 endpoints are richer than the public docs suggest. Don't infer impossibility from docs; verify by execution.

Related