{"formatVersion":"1","kind":"dock_integration","slug":"hubspot-crm-api","title":"HubSpot CRM API","summary":"Import a Harbor-safe HubSpot CRM starter set for contact search, single-contact lookup, and approval-friendly contact creation.","description":"A Dock-hosted HubSpot CRM starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe HubSpot action set for searching contacts, getting a single contact, and creating a contact with explicit approval. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"hubspot","name":"HubSpot","websiteUrl":"https://developers.hubspot.com/docs/api-reference/crm-contacts-v3/guide"},"category":"CRM","tags":["hubspot","crm","contacts","sales","customer-ops"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. HubSpot search and write actions use input.body JSON payloads, and single-record lookup uses explicit input.path and typed input.query values."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"HubSpot CRM API","description":"HubSpot CRM API connection managed locally through Harbor.","baseUrl":"https://api.hubapi.com/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"search-contacts","label":"Search Contacts","description":"Search HubSpot contacts using a bounded JSON request body under input.body.","method":"POST","path":"/crm/v3/objects/contacts/search","approvalMode":"automatic","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"list-contacts","label":"List Contacts","description":"List HubSpot contacts using typed pagination and property selection inputs.","method":"GET","path":"/crm/v3/objects/contacts","inputs":{"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100},"default":25,"description":"Maximum number of contacts to return."},{"name":"after","in":"query","schema":{"type":"string"},"description":"Paging token from a previous HubSpot response."},{"name":"properties","in":"query","schema":{"type":"string","maxLength":500},"description":"Optional comma-separated list of property names to include."},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Whether to include archived contacts."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-contact","label":"Get Contact","description":"Retrieve a HubSpot contact by ID or another unique property using an explicit contact path value.","method":"GET","path":"/crm/v3/objects/contacts/{contactId}","inputs":{"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"HubSpot contact record ID, or another unique value when idProperty is supplied."},{"name":"idProperty","in":"query","schema":{"type":"string","maxLength":120},"description":"Optional unique property name such as email."},{"name":"properties","in":"query","schema":{"type":"string","maxLength":500},"description":"Optional comma-separated list of property names to include."},{"name":"archived","in":"query","schema":{"type":"boolean"},"description":"Whether to include archived contacts."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-contact","label":"Create Contact","description":"Create a HubSpot contact using a bounded JSON request body under input.body.","method":"POST","path":"/crm/v3/objects/contacts","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-contact","label":"Update Contact","description":"Update a HubSpot contact using an explicit contact ID and a bounded JSON request body.","method":"PATCH","path":"/crm/v3/objects/contacts/{contactId}","inputs":{"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"HubSpot contact record ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-contact","label":"Delete Contact","description":"Delete a HubSpot contact using an explicit contact ID.","method":"DELETE","path":"/crm/v3/objects/contacts/{contactId}","inputs":{"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"HubSpot contact record ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate and test search-contacts and get-contact before enabling create-contact. Use search-contacts to locate the right record first, then keep create-contact on approval unless your local policy explicitly allows it.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. HubSpot search-contacts and create-contact use input.body JSON, while get-contact uses input.path.contactId plus typed input.query values."}