Skip to main content

HubSpot Integration

Connect your AI agents to HubSpot CRM

Step 1: Connect HubSpot

Recommended: Use the one-click OAuth connection. It automatically handles authentication, token refresh, and grants access to all HubSpot API scopes your account supports.

  1. 1Go to Settings Integrations
  2. 2Click Connect Platform HubSpot
  3. 3Approve the connection in HubSpot and select the account to connect
  4. 4Done! Your access token refreshes automatically every 30 minutes
DetailValue
Base URLhttps://api.hubapi.com (set automatically)
Auth TypeOAuth 2.0 (automatic)
Token RefreshEvery 30 minutes (automatic)
ScopesAll available CRM, CMS, and settings scopes

Step 2: Add Actions with Pre-Built Templates

Once connected, click Add Action to open the template picker. Choose from 42 pre-built actions across 11 HubSpot CRM categories, so there is no need to configure endpoints, parameters, or body templates manually.

New: Pre-built templates configure everything for you in one click. Just select a template, review the settings, and save. You can always customize the action after adding it.

Available Templates

Contacts

GETSearch Contact
POSTCreate Contact
PATCHUpdate Contact
DELETEDelete Contact

Deals

GETSearch Deal
POSTCreate Deal
PATCHUpdate Deal
DELETEDelete Deal

Companies

GETSearch Company
POSTCreate Company
PATCHUpdate Company
DELETEDelete Company

Tickets

GETSearch Ticket
POSTCreate Ticket
PATCHUpdate Ticket
DELETEDelete Ticket

Notes

GETSearch Notes
POSTCreate Note
GETGet Note
DELETEDelete Note

Calls

GETSearch Calls
POSTLog Call
GETGet Call
DELETEDelete Call

Tasks

GETSearch Tasks
POSTCreate Task
GETGet Task
DELETEDelete Task

Meetings

GETSearch Meetings
POSTCreate Meeting
GETGet Meeting
DELETEDelete Meeting

Owners & Pipelines

GETList Owners
GETList Pipelines
GETList Pipeline Stages

Associations

PUTCreate Association
GETList Associations
DELETEDelete Association

Direct Lookups

GETGet Contact by ID
GETGet Deal by ID
GETGet Company by ID
GETGet Ticket by ID

Tip: You can add the same template multiple times (e.g. two “Search Contact” actions with different configurations). Each gets a unique name automatically.

What Each Action Does

GET

Search

List all records or filter by a search term. The AI can call this with or without a search query.

BehaviorDescription
No search termReturns all records (up to 10)
With search termFilters by name, email, phone, or other fields
ConfirmationNot required (read-only)

Example: customer says “show me all contacts”:

GET /crm/v3/objects/contacts?properties=firstname,lastname,email,phone&limit=10

Response:
{
  "results": [
    {
      "id": "12345",
      "properties": {
        "firstname": "Sarah",
        "lastname": "Johnson",
        "email": "[email protected]",
        "phone": "+15551234567"
      }
    },
    ...
  ]
}

Example: customer says “find Peter Bakker”:

GET /crm/v3/objects/contacts?properties=firstname,lastname,email,phone&limit=10&search=Peter Bakker
POST

Create

Create a new record. The AI collects the required fields from the customer and confirms before creating.

BehaviorDescription
Required fieldsVaries by object (e.g. email + first name for contacts)
Optional fieldsAutomatically excluded if not provided
ConfirmationRequired (AI confirms details before creating)

Example: creating a contact:

POST /crm/v3/objects/contacts

{
  "properties": {
    "email": "[email protected]",
    "firstname": "Peter",
    "lastname": "Bakker",
    "phone": "0687654321"
  }
}

Smart cleanup: Optional fields that the customer doesn't provide are automatically removed from the request. For example, if the customer only gives a name and email, the phone and company fields won't be sent to HubSpot.

PATCH

Update

Update specific fields on an existing record. The AI uses the record ID from a previous search and only sends the fields that need to change.

BehaviorDescription
Record IDFrom a previous search result (e.g. contact_id)
Partial updatesOnly changed fields are sent and other fields stay untouched
ConfirmationRequired (AI confirms the change before updating)

Example: updating only the email:

PATCH /crm/v3/objects/contacts/692916567278

{
  "properties": {
    "email": "[email protected]"
  }
}

Safe updates: When updating a single field (like email), the other fields (name, phone, etc.) are not affected. The AI only sends what was changed.

DELETE

Delete

Archive a record from HubSpot. The record can be restored within 90 days from HubSpot's recycle bin.

BehaviorDescription
Record IDFrom a previous search result
ConfirmationRequired (AI always confirms before deleting)
DestructiveYes (marked as destructive action)

Safety: Delete actions are marked as destructive. The AI will always ask the customer for explicit confirmation before deleting. Consider adding Identity Verification to prevent unauthorized deletions.

Notes

Create, retrieve, search, and delete engagement notes attached to CRM records.

GET

Search Notes

List all notes or filter by a search term. Returns note content and metadata.

SettingValue
MethodGET
Endpoint/crm/v3/objects/notes?properties=hs_note_body,hs_timestamp,hubspot_owner_id&limit=10
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
searchqueryNoOptional search term to filter notes
POST

Create Note

Create a new note in HubSpot. The AI collects the note body from the customer and confirms before creating.

SettingValue
MethodPOST
Endpoint/crm/v3/objects/notes
ConfirmationRequired
ParameterLocationRequiredDescription
hs_note_bodybodyYesThe note content
hs_timestampbodyYesTimestamp for the note (ISO 8601)
hubspot_owner_idbodyNoOwner ID to assign the note to
GET

Get Note

Retrieve a single note by its ID. Returns the full note body and metadata.

SettingValue
MethodGET
Endpoint/crm/v3/objects/notes/{{note_id}}?properties=hs_note_body,hs_timestamp,hubspot_owner_id
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
note_idpathYesHubSpot note ID
DELETE

Delete Note

Archive a note from HubSpot. The AI always confirms before deleting.

SettingValue
MethodDELETE
Endpoint/crm/v3/objects/notes/{{note_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
note_idpathYesHubSpot note ID to delete

Calls

Log, retrieve, search, and delete call engagement records in HubSpot.

GET

Search Calls

List all call records or filter by a search term. Returns call details including duration and disposition.

SettingValue
MethodGET
Endpoint/crm/v3/objects/calls?properties=hs_call_title,hs_call_body,hs_call_duration,hs_call_disposition,hs_timestamp&limit=10
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
searchqueryNoOptional search term to filter calls
POST

Log Call

Log a new call engagement in HubSpot. The AI collects call details from the customer and confirms before creating.

SettingValue
MethodPOST
Endpoint/crm/v3/objects/calls
ConfirmationRequired
ParameterLocationRequiredDescription
hs_call_titlebodyYesTitle of the call
hs_call_bodybodyNoCall notes or description
hs_call_durationbodyNoDuration in milliseconds
hs_call_dispositionbodyNoCall outcome (e.g. connected, no answer)
hs_timestampbodyYesTimestamp for the call (ISO 8601)
GET

Get Call

Retrieve a single call record by its ID. Returns the full call details.

SettingValue
MethodGET
Endpoint/crm/v3/objects/calls/{{call_record_id}}?properties=hs_call_title,hs_call_body,hs_call_duration,hs_call_disposition,hs_timestamp
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
call_record_idpathYesHubSpot call record ID
DELETE

Delete Call

Archive a call record from HubSpot. The AI always confirms before deleting.

SettingValue
MethodDELETE
Endpoint/crm/v3/objects/calls/{{call_record_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
call_record_idpathYesHubSpot call record ID to delete

Tasks

Create, retrieve, search, and delete tasks in HubSpot CRM.

GET

Search Tasks

List all tasks or filter by a search term. Returns task subject, status, and due date.

SettingValue
MethodGET
Endpoint/crm/v3/objects/tasks?properties=hs_task_subject,hs_task_body,hs_task_status,hs_task_priority,hs_timestamp&limit=10
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
searchqueryNoOptional search term to filter tasks
POST

Create Task

Create a new task in HubSpot. The AI collects the task subject and details from the customer and confirms before creating.

SettingValue
MethodPOST
Endpoint/crm/v3/objects/tasks
ConfirmationRequired
ParameterLocationRequiredDescription
hs_task_subjectbodyYesTask subject line
hs_task_bodybodyNoTask description or notes
hs_task_statusbodyNoStatus (e.g. NOT_STARTED, IN_PROGRESS, COMPLETED)
hs_task_prioritybodyNoPriority (e.g. LOW, MEDIUM, HIGH)
hs_timestampbodyYesDue date timestamp (ISO 8601)
hubspot_owner_idbodyNoOwner ID to assign the task to
GET

Get Task

Retrieve a single task by its ID. Returns the full task details including status and priority.

SettingValue
MethodGET
Endpoint/crm/v3/objects/tasks/{{task_id}}?properties=hs_task_subject,hs_task_body,hs_task_status,hs_task_priority,hs_timestamp
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
task_idpathYesHubSpot task ID
DELETE

Delete Task

Archive a task from HubSpot. The AI always confirms before deleting.

SettingValue
MethodDELETE
Endpoint/crm/v3/objects/tasks/{{task_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
task_idpathYesHubSpot task ID to delete

Meetings

Create, retrieve, search, and delete meeting engagement records in HubSpot.

GET

Search Meetings

List all meeting records or filter by a search term. Returns meeting title, start time, and end time.

SettingValue
MethodGET
Endpoint/crm/v3/objects/meetings?properties=hs_meeting_title,hs_meeting_body,hs_meeting_start_time,hs_meeting_end_time,hubspot_owner_id&limit=10
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
searchqueryNoOptional search term to filter meetings
POST

Create Meeting

Create a new meeting engagement in HubSpot. The AI collects the meeting title, time, and details from the customer and confirms before creating.

SettingValue
MethodPOST
Endpoint/crm/v3/objects/meetings
ConfirmationRequired
ParameterLocationRequiredDescription
hs_meeting_titlebodyYesMeeting title
hs_meeting_bodybodyNoMeeting description or agenda
hs_meeting_start_timebodyYesStart time (ISO 8601)
hs_meeting_end_timebodyYesEnd time (ISO 8601)
hubspot_owner_idbodyNoOwner ID to assign the meeting to
GET

Get Meeting

Retrieve a single meeting by its ID. Returns the full meeting details.

SettingValue
MethodGET
Endpoint/crm/v3/objects/meetings/{{meeting_id}}?properties=hs_meeting_title,hs_meeting_body,hs_meeting_start_time,hs_meeting_end_time
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
meeting_idpathYesHubSpot meeting ID
DELETE

Delete Meeting

Archive a meeting record from HubSpot. The AI always confirms before deleting.

SettingValue
MethodDELETE
Endpoint/crm/v3/objects/meetings/{{meeting_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
meeting_idpathYesHubSpot meeting ID to delete

Owners & Pipelines

Read-only actions to list team members and pipeline configurations. Useful for assigning records and understanding deal or ticket stages.

GET

List Owners

List all owners (team members) in HubSpot. Useful for assigning contacts, deals, or tasks to specific team members.

SettingValue
MethodGET
Endpoint/crm/v3/owners?limit=100
ConfirmationNot required (read-only)

No parameters needed. Returns all owners with their ID, email, first name, and last name.

GET

List Pipelines

List all deal pipelines in HubSpot. Returns pipeline names and IDs.

SettingValue
MethodGET
Endpoint/crm/v3/pipelines/deals
ConfirmationNot required (read-only)

No parameters needed. Returns all deal pipelines with their stages.

GET

List Pipeline Stages

List all stages within a specific deal pipeline. Returns stage names, IDs, and display order.

SettingValue
MethodGET
Endpoint/crm/v3/pipelines/deals/{{pipeline_id}}/stages
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
pipeline_idpathYesHubSpot pipeline ID (from List Pipelines)

Associations

Link and unlink CRM records to each other using the HubSpot v4 associations API. For example, associate a contact with a deal or a company with a ticket.

PUT

Create Association

Create an association between two CRM records. For example, link a contact to a deal or a company to a ticket.

SettingValue
MethodPUT
Endpoint/crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}}/{{to_object_id}}
ConfirmationRequired
ParameterLocationRequiredDescription
from_object_typepathYesSource object type (e.g. contacts, deals)
from_object_idpathYesSource record ID
to_object_typepathYesTarget object type (e.g. deals, companies)
to_object_idpathYesTarget record ID
associationCategorybodyYesCategory (usually HUBSPOT_DEFINED)
associationTypeIdbodyYesAssociation type ID (e.g. 3 for deal-to-contact)

Tip: Common association type IDs: 3 (deal → contact), 5 (deal → company), 15 (ticket → contact). See HubSpot's documentation for the full list.

GET

List Associations

List all associations for a given record. For example, find all contacts associated with a deal.

SettingValue
MethodGET
Endpoint/crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}}
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
from_object_typepathYesSource object type (e.g. contacts, deals)
from_object_idpathYesSource record ID
to_object_typepathYesTarget object type to list associations for
DELETE

Delete Association

Remove an association between two CRM records. The AI always confirms before deleting.

SettingValue
MethodDELETE
Endpoint/crm/v4/objects/{{from_object_type}}/{{from_object_id}}/associations/{{to_object_type}}/{{to_object_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
from_object_typepathYesSource object type
from_object_idpathYesSource record ID
to_object_typepathYesTarget object type
to_object_idpathYesTarget record ID

Direct Lookups

Fetch a single record by its HubSpot ID. Faster than search when you already know the record ID from a previous action.

GET

Get Contact by ID

Retrieve a single contact by its HubSpot ID. Returns all requested properties.

SettingValue
MethodGET
Endpoint/crm/v3/objects/contacts/{{contact_id}}?properties=firstname,lastname,email,phone,company
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
contact_idpathYesHubSpot contact ID
GET

Get Deal by ID

Retrieve a single deal by its HubSpot ID. Returns deal name, amount, stage, and close date.

SettingValue
MethodGET
Endpoint/crm/v3/objects/deals/{{deal_id}}?properties=dealname,amount,dealstage,closedate,pipeline
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
deal_idpathYesHubSpot deal ID
GET

Get Company by ID

Retrieve a single company by its HubSpot ID. Returns company name, domain, industry, and other details.

SettingValue
MethodGET
Endpoint/crm/v3/objects/companies/{{company_id}}?properties=name,domain,industry,phone,city
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
company_idpathYesHubSpot company ID
GET

Get Ticket by ID

Retrieve a single ticket by its HubSpot ID. Returns ticket subject, status, priority, and pipeline.

SettingValue
MethodGET
Endpoint/crm/v3/objects/tickets/{{ticket_id}}?properties=subject,content,hs_ticket_priority,hs_pipeline_stage
ConfirmationNot required (read-only)
ParameterLocationRequiredDescription
ticket_idpathYesHubSpot ticket ID

Step 3: Enable on Your AI Agent

  1. 1Go to AI Agents and select the employee you want to configure
  2. 2Scroll down to Integrations and enable the HubSpot actions you want this employee to use
  3. 3Save. The AI agent can now use these actions during phone calls

Example Conversation

Here's a full conversation showing search, create, update, and delete in action:

Caller:"Show me all our contacts."
AI calls search_contact (no search term) → returns list of contacts
AI:"I found 3 contacts: Sarah Johnson, Maria Garcia, and John Smith. What would you like to do?"

Caller:"Add a new contact. Peter Bakker, email [email protected], phone 0687654321."
AI:"Let me confirm: Peter Bakker, email [email protected], phone 0687654321. Shall I create this contact?"
Caller:"Yes."
AI calls create_contact with firstname="Peter", lastname="Bakker", email="[email protected]", phone="0687654321"
AI:"Done! Peter Bakker has been added to HubSpot."

Caller:"Change Peter's email to [email protected]."
AI:"I'll update Peter Bakker's email to [email protected]. Shall I proceed?"
Caller:"Yes."
AI calls update_contact with contact_id and email="[email protected]". Only the email is updated, other fields stay the same
AI:"Done! Peter's email has been updated."

Caller:"Delete the contact Peter Bakker."
AI:"I found Peter Bakker. Are you sure you want to delete this contact? This action is permanent."
Caller:"Yes, delete it."
AI calls delete_contact with contact_id
AI:"Peter Bakker has been removed from HubSpot."

Custom Actions (From Scratch)

Need something beyond the templates? Click Custom Action in the template picker to configure any HubSpot API endpoint manually. Below are ready-to-use examples covering every HTTP method.

GET

List & Search Contacts

Retrieve all contacts or filter with a search query. This is what the Search template uses under the hood.

SettingValue
Action Namesearch_contact
DescriptionSearch for contacts in HubSpot. Call without a search term to list all contacts, or provide a search term to filter.
MethodGET
Endpoint/crm/v3/objects/contacts?properties=firstname,lastname,email,phone,company&limit=10
ParameterLocationRequiredDescription
searchqueryNoOptional search term to filter contacts (name, email, phone)

No body template needed. Example response:

{
  "results": [
    {
      "id": "12345",
      "properties": {
        "firstname": "Sarah",
        "lastname": "Johnson",
        "email": "[email protected]",
        "phone": "+15551234567",
        "company": "Tech Solutions Inc"
      }
    }
  ]
}

Tip: Add properties= directly in the endpoint path to choose which fields are returned. Use limit= to control results count.

POST

Search Contact by Customer Phone (Advanced)

Automatically identify the customer using HubSpot's search API with the {{caller_phone}} variable. Great for personalized greetings.

SettingValue
Action Nameidentify_customer
DescriptionLook up the customer in HubSpot by their phone number. Called automatically at the start of an interaction.
MethodPOST
Endpoint/crm/v3/objects/contacts/search
Custom Request BodyEnabled

Body Template:

{
  "filterGroups": [{
    "filters": [{
      "propertyName": "phone",
      "operator": "EQ",
      "value": "{{caller_phone}}"
    }]
  }],
  "properties": ["firstname", "lastname", "email", "phone", "company", "lifecyclestage"]
}

Tip: {{caller_phone}} is auto-filled with the customer's phone number, so there is no need to ask for it. This action has no parameters since everything is automatic.

POST

Create Contact

Add a new contact to HubSpot. The AI collects details from the customer and creates the record.

SettingValue
Action Namecreate_contact
DescriptionCreate a new contact in HubSpot. Collect at least the email and first name from the customer.
MethodPOST
Endpoint/crm/v3/objects/contacts
ConfirmationRequired
Custom Request BodyEnabled
ParameterLocationRequiredDescription
emailbodyYesContact email address
firstnamebodyYesFirst name
lastnamebodyYesLast name
phonebodyNoPhone number
companybodyNoCompany name

Body Template:

{
  "properties": {
    "email": "{{email}}",
    "firstname": "{{firstname}}",
    "lastname": "{{lastname}}",
    "phone": "{{phone}}",
    "company": "{{company}}"
  }
}

Example Response (201 Created):

{
  "id": "693073375428",
  "properties": {
    "email": "[email protected]",
    "firstname": "Peter",
    "lastname": "Bakker",
    "phone": "0687654321",
    "lifecyclestage": "lead",
    "createdate": "2026-02-11T11:51:30.649Z"
  }
}

Smart cleanup: Optional fields the customer doesn't provide (like phone or company) are automatically removed before sending to HubSpot. No empty values will be stored.

POST

Create Deal (with Contact Association)

Create a deal and link it to an existing contact. Use search_contact first to get the contact_id.

SettingValue
Action Namecreate_deal
DescriptionCreate a new deal in HubSpot and associate it with a contact.
MethodPOST
Endpoint/crm/v3/objects/deals
ConfirmationRequired
Custom Request BodyEnabled
ParameterLocationRequiredDescription
dealnamebodyYesName for the deal
amountbodyNoDeal value in dollars
contact_idbodyYesHubSpot contact ID (from search_contact)

Body Template:

{
  "properties": {
    "dealname": "{{dealname}}",
    "amount": "{{amount}}",
    "pipeline": "default",
    "dealstage": "appointmentscheduled"
  },
  "associations": [{
    "to": {"id": "{{contact_id}}"},
    "types": [{"associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 3}]
  }]
}

Note: associationTypeId: 3 links a deal to a contact. Use the search_contact action first to get the contact_id.

PATCH

Update Contact

Update specific fields on an existing contact. Only the fields provided by the customer are sent and everything else stays untouched.

SettingValue
Action Nameupdate_contact
DescriptionUpdate a contact in HubSpot. Only provide the fields that need to change.
MethodPATCH
Endpoint/crm/v3/objects/contacts/{{contact_id}}
ConfirmationRequired
Custom Request BodyEnabled
ParameterLocationRequiredDescription
contact_idpathYesHubSpot contact ID (from search)
emailbodyNoNew email address
firstnamebodyNoNew first name
lastnamebodyNoNew last name
phonebodyNoNew phone number
companybodyNoNew company name

Body Template:

{
  "properties": {
    "email": "{{email}}",
    "firstname": "{{firstname}}",
    "lastname": "{{lastname}}",
    "phone": "{{phone}}",
    "company": "{{company}}"
  }
}

Example: updating only the email (other fields auto-removed):

PATCH /crm/v3/objects/contacts/692916567278

Sent to HubSpot:
{
  "properties": {
    "email": "[email protected]"
  }
}

Response (200 OK):
{
  "id": "692916567278",
  "properties": {
    "email": "[email protected]",
    "firstname": "Peter",
    "lastname": "Bakker",
    "phone": "0687654321",
    "lastmodifieddate": "2026-02-11T14:24:41.917Z"
  }
}

Safe updates: Unused template fields like {{firstname}} are automatically cleaned up. Only fields the AI provides are sent, so a single-field update won't overwrite other data.

DELETE

Delete Contact

Archive (soft-delete) a contact in HubSpot. Recoverable within 90 days from HubSpot's recycle bin.

SettingValue
Action Namedelete_contact
DescriptionDelete a contact from HubSpot. Always confirm with the customer before deleting.
MethodDELETE
Endpoint/crm/v3/objects/contacts/{{contact_id}}
ConfirmationRequired
DestructiveYes
ParameterLocationRequiredDescription
contact_idpathYesHubSpot contact ID to delete

No request body or body template needed. Returns 204 No Content on success.

Important: Mark this action as Destructive and enable Require Confirmation. Consider adding Identity Verification to prevent unauthorized deletions.

Other Useful Endpoints

These endpoints don't have templates but can be configured as custom actions:

ActionMethodEndpointUse Case
List ticket pipelinesGET/crm/v3/pipelines/ticketsGet ticket stage IDs for creating tickets
List productsGET/crm/v3/objects/products?limit=20Browse product catalog
List line itemsGET/crm/v3/objects/line_items?limit=20Browse line items for deals

Available Variables

Use these in endpoint paths and body templates. They are automatically replaced at runtime.

VariableDescriptionExample Use
{{caller_phone}}The customer's phone numberAuto-search contacts by phone
{{employee_id}}The AI agent handling the callLog which agent made the request
{{call_id}}Unique identifier for the current callLink CRM records to call logs

Alternative: Manual Setup (Private App Token)

Only use this method if you cannot use OAuth or need a token that doesn't expire. Private App tokens have fixed scopes set during creation.

  1. 1In HubSpot, go to Settings Integrations Private Apps
  2. 2Click Create a private app, name it "Staffify Integration"
  3. 3Go to Scopes tab and enable the scopes you need (e.g. crm.objects.contacts.read, crm.objects.contacts.write)
  4. 4Create the app and copy the Access token
  5. 5In Staffify, go to Integrations and create a manual connection with the token as Bearer Token
FieldValue
Connection NameHubSpot CRM
Base URLhttps://api.hubapi.com
Auth TypeBearer Token
TokenYour Private App token
Token ExpiresDisabled (doesn't expire)

HubSpot API Reference

ObjectBase EndpointTemplate Actions
Contacts/crm/v3/objects/contactsSearch, Create, Update, Delete, Get by ID
Companies/crm/v3/objects/companiesSearch, Create, Update, Delete, Get by ID
Deals/crm/v3/objects/dealsSearch, Create, Update, Delete, Get by ID
Tickets/crm/v3/objects/ticketsSearch, Create, Update, Delete, Get by ID
Notes/crm/v3/objects/notesSearch, Create, Get, Delete
Calls/crm/v3/objects/callsSearch, Log, Get, Delete
Tasks/crm/v3/objects/tasksSearch, Create, Get, Delete
Meetings/crm/v3/objects/meetingsSearch, Create, Get, Delete
Owners/crm/v3/ownersList Owners
Pipelines/crm/v3/pipelines/dealsList Pipelines, List Pipeline Stages
Associations/crm/v4/objects/{type}Create, List, Delete
Products/crm/v3/objects/productsCustom actions only
Line Items/crm/v3/objects/line_itemsCustom actions only

Full API documentation: developers.hubspot.com/docs/api/crm

Last updated: February 2026

HubSpot Integration | Staffify Docs