HubSpot
Canonical tools, triggers, auth, schemas, and mock behavior for HubSpot.
Run a valid hubspot.add_note call through the same SDK surface used by every toolkit.
Minimal tool call
import { Eyeball } from "@eyeball/sdk";
const eyeball = new Eyeball({
apiKey: process.env.EYEBALL_API_KEY!,
baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});
const output = await eyeball.tools.run(
"hubspot.add_note",
{
"recordType": "contact",
"recordId": "example_recordId",
"body": "example_body"
},
{ userId: "demo_user",
idempotencyKey: "docs:hubspot.add_note:demo-1" },
);
console.log(output);The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.
Supported canonical tools
| Tool | Purpose | Execution | Effect | Version |
|---|---|---|---|---|
hubspot.add_note | Add a timeline note to a CRM contact, company, or deal. This creates externally visible CRM history. | sync or async | mutation | 1.0.0 |
hubspot.create_company | Create a CRM company, organization, or account record. | sync or async | mutation | 1.0.0 |
hubspot.create_contact | Create a CRM contact from a person identity and portable properties. Use this only after checking for an existing contact when duplicates matter. | sync or async | mutation | 1.0.0 |
hubspot.create_deal | Create a CRM deal or opportunity in a pipeline with portable amount and stage fields. | sync or async | mutation | 1.0.0 |
hubspot.get_contact | Retrieve one CRM contact by its provider identifier. | sync or async | read | 1.0.0 |
hubspot.search_contacts | Search CRM contacts by email, portable property, or free-text identity query and return a normalized page. | sync or async | read | 1.0.0 |
hubspot.update_company | Update portable fields on an existing CRM company, organization, or account. Repeating the same values has no additional effect. | sync or async | mutation | 1.0.0 |
hubspot.update_contact | Update portable fields on an existing CRM contact. Repeating the same field values has no additional effect. | sync or async | mutation | 1.0.0 |
hubspot.update_deal | Update an existing CRM deal's fields, stage, amount, or pipeline. Repeating the same values has no additional effect. | sync or async | mutation | 1.0.0 |
Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.
Supported canonical triggers
This manifest does not implement a canonical trigger.
Input and output schemas
hubspot.add_note
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:add_note:1.0.0:hubspot",
"type": "object",
"description": "Associated CRM record and note content.",
"additionalProperties": false,
"required": [
"recordType",
"recordId",
"body"
],
"properties": {
"recordType": {
"type": "string",
"description": "Kind of CRM record receiving the note.",
"enum": [
"contact",
"company",
"deal"
]
},
"recordId": {
"type": "string",
"description": "Provider identifier of the associated CRM record.",
"minLength": 1
},
"body": {
"type": "string",
"description": "Plain-text note content.",
"minLength": 1
},
"occurredAt": {
"type": "string",
"format": "date-time",
"description": "Timestamp represented by the note; defaults to provider time."
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:add_note:output:1.0.0:hubspot",
"type": "object",
"description": "Identifiers and timestamp for the created CRM note.",
"additionalProperties": false,
"required": [
"noteId",
"recordType",
"recordId",
"body",
"createdAt"
],
"properties": {
"noteId": {
"type": "string",
"description": "Provider identifier of the note.",
"minLength": 1
},
"recordType": {
"type": "string",
"description": "Kind of associated CRM record.",
"enum": [
"contact",
"company",
"deal"
]
},
"recordId": {
"type": "string",
"description": "Provider identifier of the associated CRM record.",
"minLength": 1
},
"body": {
"type": "string",
"description": "Stored note content."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Note creation timestamp."
}
}
}hubspot.create_company
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_company:1.0.0:hubspot",
"type": "object",
"description": "Identity and properties for a new company.",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Company name.",
"minLength": 1
},
"domain": {
"type": "string",
"description": "Company website domain.",
"minLength": 1
},
"phone": {
"type": "string",
"description": "Company phone number."
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the company.",
"additionalProperties": true
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_company:output:1.0.0:hubspot",
"type": "object",
"description": "The newly created CRM company.",
"additionalProperties": false,
"required": [
"company"
],
"properties": {
"company": {
"type": "object",
"description": "A normalized CRM company.",
"additionalProperties": false,
"required": [
"companyId",
"name",
"createdAt",
"updatedAt"
],
"properties": {
"companyId": {
"type": "string",
"description": "Provider identifier of the company.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Company name."
},
"domain": {
"type": "string",
"description": "Company website domain."
},
"phone": {
"type": "string",
"description": "Company phone number."
},
"properties": {
"type": "object",
"description": "Provider-neutral company properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Company creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent company update timestamp."
}
}
}
}
}hubspot.create_contact
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_contact:1.0.0:hubspot",
"type": "object",
"description": "Identity and properties for a new CRM contact.",
"additionalProperties": false,
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Primary contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name associated with the contact."
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the contact.",
"additionalProperties": true
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_contact:output:1.0.0:hubspot",
"type": "object",
"description": "The newly created CRM contact.",
"additionalProperties": false,
"required": [
"contact"
],
"properties": {
"contact": {
"type": "object",
"description": "A normalized CRM contact.",
"additionalProperties": false,
"required": [
"contactId",
"createdAt",
"updatedAt"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name stored on the contact."
},
"properties": {
"type": "object",
"description": "Provider-neutral contact properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Contact creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent contact update timestamp."
}
}
}
}
}hubspot.create_deal
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_deal:1.0.0:hubspot",
"type": "object",
"description": "Pipeline fields and optional associations for a new deal.",
"additionalProperties": false,
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Deal or opportunity name.",
"minLength": 1
},
"amount": {
"type": "number",
"description": "Deal amount in major currency units.",
"minimum": 0
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code.",
"pattern": "^[A-Z]{3}$",
"default": "USD"
},
"stage": {
"type": "string",
"description": "Provider pipeline stage identifier.",
"minLength": 1
},
"pipeline": {
"type": "string",
"description": "Provider pipeline identifier.",
"minLength": 1
},
"contactId": {
"type": "string",
"description": "Contact to associate with the deal when supported.",
"minLength": 1
},
"companyId": {
"type": "string",
"description": "Company to associate with the deal when supported.",
"minLength": 1
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the deal.",
"additionalProperties": true
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:create_deal:output:1.0.0:hubspot",
"type": "object",
"description": "The newly created CRM deal.",
"additionalProperties": false,
"required": [
"deal"
],
"properties": {
"deal": {
"type": "object",
"description": "A normalized CRM deal or opportunity.",
"additionalProperties": false,
"required": [
"dealId",
"name",
"createdAt",
"updatedAt"
],
"properties": {
"dealId": {
"type": "string",
"description": "Provider identifier of the deal.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Deal or opportunity name."
},
"amount": {
"type": "number",
"description": "Deal amount in major currency units.",
"minimum": 0
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code.",
"pattern": "^[A-Z]{3}$"
},
"stage": {
"type": "string",
"description": "Provider pipeline stage identifier."
},
"pipeline": {
"type": "string",
"description": "Provider pipeline identifier."
},
"properties": {
"type": "object",
"description": "Provider-neutral deal properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Deal creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent deal update timestamp."
}
}
}
}
}hubspot.get_contact
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:get_contact:1.0.0:hubspot",
"type": "object",
"description": "Identifier of the contact to retrieve.",
"additionalProperties": false,
"required": [
"contactId"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
}
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:get_contact:output:1.0.0:hubspot",
"type": "object",
"description": "The requested CRM contact.",
"additionalProperties": false,
"required": [
"contact"
],
"properties": {
"contact": {
"type": "object",
"description": "A normalized CRM contact.",
"additionalProperties": false,
"required": [
"contactId",
"createdAt",
"updatedAt"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name stored on the contact."
},
"properties": {
"type": "object",
"description": "Provider-neutral contact properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Contact creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent contact update timestamp."
}
}
}
}
}hubspot.search_contacts
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:search_contacts:1.0.0:hubspot",
"type": "object",
"description": "Contact search selectors and pagination.",
"additionalProperties": false,
"properties": {
"query": {
"type": "string",
"description": "Free-text identity query supported by the provider.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Exact email address to match."
},
"property": {
"type": "string",
"description": "Provider property name to match.",
"minLength": 1
},
"value": {
"type": [
"string",
"number",
"boolean"
],
"description": "Exact value for the selected property."
},
"pageSize": {
"type": "integer",
"description": "Maximum number of contact search results to return in one page.",
"minimum": 1,
"maximum": 100,
"default": 50
},
"pageToken": {
"type": "string",
"description": "Opaque continuation token from a previous contact search result page.",
"minLength": 1
}
},
"dependentRequired": {
"property": [
"value"
],
"value": [
"property"
]
}
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:search_contacts:output:1.0.0:hubspot",
"type": "object",
"description": "One page of matching CRM contacts.",
"additionalProperties": false,
"required": [
"contacts"
],
"properties": {
"contacts": {
"type": "array",
"description": "Contacts matching the search.",
"items": {
"type": "object",
"description": "A normalized CRM contact.",
"additionalProperties": false,
"required": [
"contactId",
"createdAt",
"updatedAt"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name stored on the contact."
},
"properties": {
"type": "object",
"description": "Provider-neutral contact properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Contact creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent contact update timestamp."
}
}
}
},
"nextPageToken": {
"type": "string",
"description": "Opaque token to request the next page of contact search results; absent when the result is complete.",
"minLength": 1
}
}
}hubspot.update_company
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_company:1.0.0:hubspot",
"type": "object",
"description": "Company identifier and fields to update.",
"additionalProperties": false,
"required": [
"companyId"
],
"properties": {
"companyId": {
"type": "string",
"description": "Provider identifier of the company.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Company name.",
"minLength": 1
},
"domain": {
"type": "string",
"description": "Company website domain.",
"minLength": 1
},
"phone": {
"type": "string",
"description": "Company phone number."
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the company.",
"additionalProperties": true
}
},
"minProperties": 2
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_company:output:1.0.0:hubspot",
"type": "object",
"description": "The updated CRM company.",
"additionalProperties": false,
"required": [
"company"
],
"properties": {
"company": {
"type": "object",
"description": "A normalized CRM company.",
"additionalProperties": false,
"required": [
"companyId",
"name",
"createdAt",
"updatedAt"
],
"properties": {
"companyId": {
"type": "string",
"description": "Provider identifier of the company.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Company name."
},
"domain": {
"type": "string",
"description": "Company website domain."
},
"phone": {
"type": "string",
"description": "Company phone number."
},
"properties": {
"type": "object",
"description": "Provider-neutral company properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Company creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent company update timestamp."
}
}
}
}
}hubspot.update_contact
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_contact:1.0.0:hubspot",
"type": "object",
"description": "Contact identifier and fields to update.",
"additionalProperties": false,
"required": [
"contactId"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Primary contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name associated with the contact."
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the contact.",
"additionalProperties": true
}
},
"minProperties": 2
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_contact:output:1.0.0:hubspot",
"type": "object",
"description": "The updated CRM contact.",
"additionalProperties": false,
"required": [
"contact"
],
"properties": {
"contact": {
"type": "object",
"description": "A normalized CRM contact.",
"additionalProperties": false,
"required": [
"contactId",
"createdAt",
"updatedAt"
],
"properties": {
"contactId": {
"type": "string",
"description": "Provider identifier of the contact.",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"description": "Contact email address."
},
"firstName": {
"type": "string",
"description": "Contact given name."
},
"lastName": {
"type": "string",
"description": "Contact family name."
},
"phone": {
"type": "string",
"description": "Contact phone number."
},
"companyName": {
"type": "string",
"description": "Company name stored on the contact."
},
"properties": {
"type": "object",
"description": "Provider-neutral contact properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Contact creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent contact update timestamp."
}
}
}
}
}hubspot.update_deal
Input schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_deal:1.0.0:hubspot",
"type": "object",
"description": "Deal identifier and fields to update.",
"additionalProperties": false,
"required": [
"dealId"
],
"properties": {
"dealId": {
"type": "string",
"description": "Provider identifier of the deal.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Deal or opportunity name.",
"minLength": 1
},
"amount": {
"type": "number",
"description": "Deal amount in major currency units.",
"minimum": 0
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code.",
"pattern": "^[A-Z]{3}$"
},
"stage": {
"type": "string",
"description": "Provider pipeline stage identifier.",
"minLength": 1
},
"pipeline": {
"type": "string",
"description": "Provider pipeline identifier.",
"minLength": 1
},
"contactId": {
"type": "string",
"description": "Contact to associate with the deal when supported.",
"minLength": 1
},
"companyId": {
"type": "string",
"description": "Company to associate with the deal when supported.",
"minLength": 1
},
"properties": {
"type": "object",
"description": "Additional canonical CRM properties to store on the deal.",
"additionalProperties": true
}
},
"minProperties": 2
}Output schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:eyeball:crm:update_deal:output:1.0.0:hubspot",
"type": "object",
"description": "The updated CRM deal.",
"additionalProperties": false,
"required": [
"deal"
],
"properties": {
"deal": {
"type": "object",
"description": "A normalized CRM deal or opportunity.",
"additionalProperties": false,
"required": [
"dealId",
"name",
"createdAt",
"updatedAt"
],
"properties": {
"dealId": {
"type": "string",
"description": "Provider identifier of the deal.",
"minLength": 1
},
"name": {
"type": "string",
"description": "Deal or opportunity name."
},
"amount": {
"type": "number",
"description": "Deal amount in major currency units.",
"minimum": 0
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code.",
"pattern": "^[A-Z]{3}$"
},
"stage": {
"type": "string",
"description": "Provider pipeline stage identifier."
},
"pipeline": {
"type": "string",
"description": "Provider pipeline identifier."
},
"properties": {
"type": "object",
"description": "Provider-neutral deal properties returned by the CRM.",
"additionalProperties": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Deal creation timestamp."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Most recent deal update timestamp."
}
}
}
}
}Authentication
| Property | Value |
|---|---|
| Auth class | oauth2 |
| Required scopes | None |
| Optional scopes | None |
| Credential fields | None |
Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.
Provider-specific extensions
This manifest declares no provider-specific schema extensions. Use only canonical fields.
Provider differences may appear only under x_provider.hubspot and only when the schema above declares them.
Sync and async behavior
All tools are synchronous by nature, but callers may choose mode: "async" to queue them.
Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.
REST example
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
-H "Authorization: Bearer $EYEBALL_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: docs:hubspot.add_note:demo-1' \
--data '{"tool":"hubspot.add_note","userId":"demo_user","input":{"recordType":"contact","recordId":"example_recordId","body":"example_body"},"mode":"sync"}'Mock support
Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no HubSpot account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.
Limitations
- This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
- Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
- Fields outside the canonical schemas and declared
x_providerextensions are rejected.
Versions
| Contract | Version |
|---|---|
| Runtime catalog | 1.1 |
| Manifest catalog | 1.0 |
| Manifest schema | 1.0 |
| Source | activepieces-bridge |
| Tier | P0 |
| Capabilities | crm |
Next
Use Testing with mocks to exercise this toolkit before connecting a live provider account.