> ## Documentation Index
> Fetch the complete documentation index at: https://docs.archal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# HubSpot

> CRM contacts, companies, deals, tickets, and engagements.

HubSpot is included in Archal's environment catalog. Use it in a sandbox for CRM contacts, companies, deals, tickets, and engagements.

| | |
| - | - |
| Environment ID | `hubspot` |
| Transport | REST |
| State | JSON |
| Contract | `archal.environment-state.hubspot` version `1` |
| Channel | Public |
| Curated samples | 5 |

Public means the environment is released and startable. It still describes a bounded provider surface, not a promise that every upstream operation exists.

## Compatibility boundary

**Local catalog validation:** All five published samples passed. Checks cover the state contract, relationships, artifact hash, secret scan, and size limit.

> [!NOTE]
>
> Local catalog validation is not hosted proof. Archal checks current certification, reset, and isolation evidence before admitting new sandboxes. Use the authenticated environment catalog for live availability.

* Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.

## Curated starting states

List the five samples with `archal sample list hubspot`. Each sample is a versioned starting state with a representative read, mutation, expected diff, reset expectation, and verified artifact hash.

> [accordion] HubSpot contact baseline
>
> List one contact and create another without requiring company or deal associations.
>
> **Sample ID:** `hubspot.contact-baseline.v1`
>
> **Category:** `minimal`
>
> **Starting state:** 1 record across `contacts`: 1
>
> **Supported surface:** Stateful CRM overlays for contacts, companies, deals, products, tickets, and associations.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.crm-contacts`
>
> **First read:** `GET /crm/v3/objects/contacts`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /crm/v3/objects/contacts`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "properties": {
>     "email": "maya.chen@example.test",
>     "firstname": "Maya",
>     "jobtitle": "Integration Engineering Lead",
>     "lastname": "Chen"
>   }
> }
> ```
>
> **Expected diff:** changes include `contacts`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show hubspot.contact-baseline.v1 --raw > archal-hubspot-contact-baseline.json
> archal state validate hubspot archal-hubspot-contact-baseline.json
> archal session create hubspot \
>   --state hubspot=archal-hubspot-contact-baseline.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show hubspot.contact-baseline.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/hubspot/contact-baseline/state.json` and is 665 bytes. The CLI verifies SHA-256 `74252548bf45ce2477e2370a8aadba0fe0ae18cf14985fe3fc15cb3152ec8621` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] HubSpot stale CRM team
>
> Exercise one contact, company, deal, ticket, product, and workflow whose timestamps need reconciliation.
>
> **Sample ID:** `hubspot.stale-crm-team.v1`
>
> **Category:** `small-team`
>
> **Starting state:** 16 records across `automationWorkflows`: 1, `cmsDomains`: 1, `companies`: 1, `contactCompanyAssociations`: 1, `contacts`: 1, `crmLists`: 3, `crmPipelines`: 1, `crmSchemas`: 1, `deals`: 1, `line_items`: 1, `products`: 1, `quotes`: 2, `tickets`: 1
>
> **Supported surface:** Stateful CRM overlays for contacts, companies, deals, products, tickets, and associations.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.crm-contacts`
>
> **First read:** `GET /crm/v3/objects/contacts`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /crm/v3/objects/contacts`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "properties": {
>     "email": "maya.chen@example.test",
>     "firstname": "Maya",
>     "jobtitle": "Integration Engineering Lead",
>     "lastname": "Chen"
>   }
> }
> ```
>
> **Expected diff:** changes include `contacts`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show hubspot.stale-crm-team.v1 --raw > archal-hubspot-stale-crm-team.json
> archal state validate hubspot archal-hubspot-stale-crm-team.json
> archal session create hubspot \
>   --state hubspot=archal-hubspot-stale-crm-team.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show hubspot.stale-crm-team.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/hubspot/stale-crm-team/state.json` and is 9,206 bytes. The CLI verifies SHA-256 `c3423bc62210bc38e1edf3bf56dee703654b9e58945c3a4ba36f4df6063ce9ae` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] HubSpot populated CRM portfolio
>
> Exercise contact, company, deal, product, ticket, and line-item list behavior over the full demo corpus.
>
> **Sample ID:** `hubspot.demo-crm-portfolio.v1`
>
> **Category:** `populated`
>
> **Starting state:** 47 records across `companies`: 2, `contacts`: 6, `deals`: 6, `line_items`: 11, `products`: 11, `tickets`: 11
>
> **Supported surface:** Stateful CRM overlays for contacts, companies, deals, products, tickets, and associations.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.crm-contacts`
>
> **First read:** `GET /crm/v3/objects/contacts`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /crm/v3/objects/contacts`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "properties": {
>     "email": "maya.chen@example.test",
>     "firstname": "Maya",
>     "jobtitle": "Integration Engineering Lead",
>     "lastname": "Chen"
>   }
> }
> ```
>
> **Expected diff:** changes include `contacts`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show hubspot.demo-crm-portfolio.v1 --raw > archal-hubspot-demo-crm-portfolio.json
> archal state validate hubspot archal-hubspot-demo-crm-portfolio.json
> archal session create hubspot \
>   --state hubspot=archal-hubspot-demo-crm-portfolio.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show hubspot.demo-crm-portfolio.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/hubspot/demo-crm-portfolio/state.json` and is 18,618 bytes. The CLI verifies SHA-256 `463c7c9426e8683719d970df564ff0d702a6d972b433ab711f0342fa7e9b96a1` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] HubSpot archived contact
>
> Verify that an archived contact is excluded from default reads but addressable through archived-object behavior.
>
> **Sample ID:** `hubspot.archived-contact.v1`
>
> **Category:** `edge-case`
>
> **Starting state:** 2 records across `contacts`: 2
>
> **Supported surface:** Stateful CRM overlays for contacts, companies, deals, products, tickets, and associations.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.crm-contacts`
>
> **First read:** `GET /crm/v3/objects/contacts`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /crm/v3/objects/contacts`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "properties": {
>     "email": "maya.chen@example.test",
>     "firstname": "Maya",
>     "jobtitle": "Integration Engineering Lead",
>     "lastname": "Chen"
>   }
> }
> ```
>
> **Expected diff:** changes include `contacts`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show hubspot.archived-contact.v1 --raw > archal-hubspot-archived-contact.json
> archal state validate hubspot archal-hubspot-archived-contact.json
> archal session create hubspot \
>   --state hubspot=archal-hubspot-archived-contact.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show hubspot.archived-contact.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/hubspot/archived-contact/state.json` and is 1,345 bytes. The CLI verifies SHA-256 `1a30cd29d83e415330aa938cdcfc7ae61cbe16be0f688720a0c31f2f56385d6c` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

> [accordion] HubSpot deal association workflow
>
> Start from a linked contact, company, deal, and line item graph, then create and reset one independent contact.
>
> **Sample ID:** `hubspot.deal-association-workflow.v1`
>
> **Category:** `workflow`
>
> **Starting state:** 6 records across `companies`: 1, `contactCompanyAssociations`: 1, `contacts`: 2, `deals`: 1, `line_items`: 1
>
> **Supported surface:** Stateful CRM overlays for contacts, companies, deals, products, tickets, and associations.
>
> **Required capabilities:** `state.read`, `state.load`, `state.reset`, `rest.crm-contacts`
>
> **First read:** `GET /crm/v3/objects/contacts`. Expected result: HTTP 200.
>
> **Representative mutation:** `POST /crm/v3/objects/contacts`. Expected result: HTTP 200, 201, 204.
>
> **Mutation input**
>
> ```json theme={null}
> {
>   "properties": {
>     "email": "maya.chen@example.test",
>     "firstname": "Maya",
>     "jobtitle": "Integration Engineering Lead",
>     "lastname": "Chen"
>   }
> }
> ```
>
> **Expected diff:** changes include `contacts`. Exact match required: no. Hosted promotion must observe every listed path after the provider-native mutation; dynamic provider ids and timestamps are excluded from exact matching.
>
> **Expected reset:** restores loaded sample.
>
> **Known limits**
>
> * Broad non-CRM aliases remain replay-backed and are not general stateful guarantees.
>
> **Start this sample**
>
> ```bash theme={null}
> archal sample show hubspot.deal-association-workflow.v1 --raw > archal-hubspot-deal-association-workflow.json
> archal state validate hubspot archal-hubspot-deal-association-workflow.json
> archal session create hubspot \
>   --state hubspot=archal-hubspot-deal-association-workflow.json
> ```
>
> **Inspect the raw state**
>
> ```bash theme={null}
> archal sample show hubspot.deal-association-workflow.v1 --raw
> ```
>
> The packaged JSON artifact is `samples/states/hubspot/deal-association-workflow/state.json` and is 2,637 bytes. The CLI verifies SHA-256 `e2149db70547a31843cd4a745890dec48cf514f52294cf3a6e4035bcc23a60fb` before printing it.
>
> Catalog validation: **Passed**. Hosted availability is determined by Archal's live certification and admission system, not this static page.

## Use custom state

Start from a sample when possible. For custom state, inspect the contract with `archal environment describe hubspot`, then validate the file before creating a sandbox:

```bash theme={null}
archal state validate hubspot state.json
```

Loading state replaces the current collections and establishes a new reset baseline. See [Starting state](https://docs.archal.ai/sandboxes/starting-state.md) before replacing state in an existing sandbox.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.