commit 9dba39124ecb9e00aed0a7c9500dd31288f98e5c Author: a2a-platform Date: Sat Jun 27 01:03:26 2026 +0000 deploy diff --git a/README.md b/README.md new file mode 100644 index 0000000..acc3cb1 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# hubspot-associations-openapi-agent + +Generated A2APack agent for Associations. + +- Source OpenAPI: https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json +- Generated operations: 10 +- Main skill: `auto` +- Routing mode: direct operation skills + +The generated code is intentionally editable. Tune prompts, operation +grouping, auth names, and safety policy before publishing serious agents. diff --git a/a2a.yaml b/a2a.yaml new file mode 100644 index 0000000..2e760b2 --- /dev/null +++ b/a2a.yaml @@ -0,0 +1,13 @@ +name: hubspot-associations-openapi-agent +version: v4 +entrypoint: agent:HubspotAssociationsOpenapiAgent +description: CRM relationship API for linking records and activities across object + types. +runtime: + resources: + cpu: 200m + memory: 512Mi + egress: + allow_hosts: + - api.hubapi.com + deny_internet_by_default: true diff --git a/agent.py b/agent.py new file mode 100644 index 0000000..70263b2 --- /dev/null +++ b/agent.py @@ -0,0 +1,621 @@ +from __future__ import annotations + +import base64 +import json +import re +from pathlib import Path +from typing import Any + +import httpx +from a2a_pack.deepagents import create_a2a_deep_agent +from langchain_core.messages import BaseMessage +from langchain_core.tools import StructuredTool +from pydantic import BaseModel, Field + +from a2a_pack import ( + A2AAgent, + ConsumerSetup, + ConsumerSetupField, + ConsumerSetupMissing, + EgressPolicy, + LLMProvisioning, + Pricing, + Resources, + RunContext, + skill, +) + + +DEFAULT_BASE_URL = "https://api.hubapi.com" +OPERATIONS = json.loads("{\n \"delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"deletes all associations between two records.\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}\",\n \"request_body\": null,\n \"security\": [\n {\n \"oauth2\": [\n \"oauth\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Delete associations between two records\",\n \"tags\": [\n \"Basic\"\n ]\n },\n \"get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Retrieve all associations between a specific record and an object type. Limit 500 per call.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results.\",\n \"in\": \"query\",\n \"name\": \"after\",\n \"required\": false,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The maximum number of results to display per page.\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 500,\n \"example\": null,\n \"format\": \"int32\",\n \"type\": \"integer\"\n }\n }\n ],\n \"path\": \"/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}\",\n \"request_body\": null,\n \"security\": [\n {\n \"oauth2\": [\n \"oauth\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Retrieve all associations by object type\",\n \"tags\": [\n \"Basic\"\n ]\n },\n \"post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Batch delete associations for objects\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/archive\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BatchInputPublicAssociationMultiArchive\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Remove associations\",\n \"tags\": [\n \"Batch\"\n ]\n },\n \"post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create the default (most generic) association type between two object types\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/associate/default\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BatchInputPublicDefaultAssociationMultiPost\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \" Create Default Associations\",\n \"tags\": [\n \"Batch\"\n ]\n },\n \"post_crm_v4_associations_from_object_type_to_object_type_batch_create_create\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Batch create associations for objects\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_create_create\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BatchInputPublicAssociationMultiPost\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_create_create\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Associate records (labelled)\",\n \"tags\": [\n \"Batch\"\n ]\n },\n \"post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Batch delete specific association labels for objects. Deleting an unlabeled association will also delete all labeled associations between those two objects\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/labels/archive\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BatchInputPublicAssociationMultiPost\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Delete Specific Labels\",\n \"tags\": [\n \"Batch\"\n ]\n },\n \"post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Batch read associations for objects to specific object type. The 'after' field in a returned paging object can be added alongside the 'id' to retrieve the next page of associations from that objectId. The 'link' field is deprecated and should be ignored. Note: The 'paging' field will only be present if there are more pages and absent otherwise.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/read\",\n \"request_body\": {\n \"$ref\": \"#/components/schemas/BatchInputPublicFetchAssociationsBatchRequest\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Retrieve associations\",\n \"tags\": [\n \"Batch\"\n ]\n },\n \"post_crm_v4_associations_usage_high_usage_report_user_id_request\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Requests a report of all objects in the portal which have a high usage of associations\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_crm_v4_associations_usage_high_usage_report_user_id_request\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"userId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"format\": \"int32\",\n \"type\": \"integer\"\n }\n }\n ],\n \"path\": \"/crm/v4/associations/usage/high-usage-report/{userId}\",\n \"request_body\": null,\n \"security\": [\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"post_crm_v4_associations_usage_high_usage_report_user_id_request\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Report high usage\",\n \"tags\": [\n \"Report\"\n ]\n },\n \"put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Create the default (most generic) association type between two object types\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"fromObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}\",\n \"request_body\": null,\n \"security\": [\n {\n \"oauth2\": [\n \"oauth\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Associate records (default)\",\n \"tags\": [\n \"Basic\"\n ]\n },\n \"put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i\": {\n \"base_url\": \"https://api.hubapi.com\",\n \"base_url_field\": \"OPENAPI_BASE_URL\",\n \"description\": \"Set association labels between two records.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i\",\n \"parameters\": [\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"objectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectId\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"\",\n \"in\": \"path\",\n \"name\": \"toObjectType\",\n \"required\": true,\n \"schema\": {\n \"example\": null,\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}\",\n \"request_body\": {\n \"example\": null,\n \"items\": {\n \"$ref\": \"#/components/schemas/AssociationSpec\"\n },\n \"type\": \"array\"\n },\n \"security\": [\n {\n \"oauth2\": [\n \"oauth\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.tasks.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"media_bridge.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.calls.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.meetings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.users.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.orders.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.commercepayments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.services.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.subscriptions.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.invoices.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.highly_sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"e-commerce\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.appointments.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.companies.highly_sensitive.write.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.custom.highly_sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.goals.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.line_items.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.deals.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.projects.sensitive.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.write\"\n ]\n },\n {\n \"oauth2\": [\n \"tickets.highly_sensitive.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.leads.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.carts.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.emails.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.quotes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.write\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.partner-clients.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.notes.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.courses.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.listings.read\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.contacts.sensitive.read.v2\"\n ]\n },\n {\n \"oauth2\": [\n \"crm.objects.products.read\"\n ]\n }\n ],\n \"skill_name\": \"put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i\",\n \"source_index\": 1,\n \"source_openapi_url\": \"https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json\",\n \"source_title\": \"Associations\",\n \"summary\": \"Associate records (labelled)\",\n \"tags\": [\n \"Basic\"\n ]\n }\n}") +OPERATION_GROUPS = json.loads("[]") +ROOT_SECURITY = json.loads("[]") +SECURITY_SCHEMES = json.loads("{\n \"developer_hapikey\": {\n \"in\": \"query\",\n \"name\": \"hapikey\",\n \"type\": \"apiKey\"\n },\n \"oauth2\": {\n \"flows\": {\n \"authorizationCode\": {\n \"authorizationUrl\": \"https://app.hubspot.com/oauth/authorize\",\n \"scopes\": {\n \"crm.objects.appointments.read\": \"\",\n \"crm.objects.appointments.sensitive.read.v2\": \"\",\n \"crm.objects.appointments.sensitive.write.v2\": \"\",\n \"crm.objects.appointments.write\": \"\",\n \"crm.objects.calls.read\": \"\",\n \"crm.objects.carts.read\": \"\",\n \"crm.objects.carts.write\": \"\",\n \"crm.objects.commercepayments.read\": \"\",\n \"crm.objects.commercepayments.write\": \"\",\n \"crm.objects.companies.highly_sensitive.read.v2\": \"\",\n \"crm.objects.companies.highly_sensitive.write.v2\": \"\",\n \"crm.objects.companies.read\": \"\",\n \"crm.objects.companies.sensitive.read.v2\": \"\",\n \"crm.objects.companies.sensitive.write.v2\": \"\",\n \"crm.objects.companies.write\": \"\",\n \"crm.objects.contacts.highly_sensitive.read.v2\": \"\",\n \"crm.objects.contacts.highly_sensitive.write.v2\": \"\",\n \"crm.objects.contacts.read\": \"\",\n \"crm.objects.contacts.sensitive.read.v2\": \"\",\n \"crm.objects.contacts.sensitive.write.v2\": \"\",\n \"crm.objects.contacts.write\": \"\",\n \"crm.objects.courses.read\": \"\",\n \"crm.objects.courses.write\": \"\",\n \"crm.objects.custom.highly_sensitive.read.v2\": \"\",\n \"crm.objects.custom.highly_sensitive.write.v2\": \"\",\n \"crm.objects.custom.read\": \"\",\n \"crm.objects.custom.sensitive.read.v2\": \"\",\n \"crm.objects.custom.sensitive.write.v2\": \"\",\n \"crm.objects.custom.write\": \"\",\n \"crm.objects.deals.highly_sensitive.read.v2\": \"\",\n \"crm.objects.deals.highly_sensitive.write.v2\": \"\",\n \"crm.objects.deals.read\": \"\",\n \"crm.objects.deals.sensitive.read.v2\": \"\",\n \"crm.objects.deals.sensitive.write.v2\": \"\",\n \"crm.objects.deals.write\": \"\",\n \"crm.objects.emails.read\": \"\",\n \"crm.objects.goals.read\": \"\",\n \"crm.objects.goals.write\": \"\",\n \"crm.objects.invoices.read\": \"\",\n \"crm.objects.invoices.write\": \"\",\n \"crm.objects.leads.read\": \"\",\n \"crm.objects.leads.write\": \"\",\n \"crm.objects.line_items.read\": \"\",\n \"crm.objects.line_items.write\": \"\",\n \"crm.objects.listings.read\": \"\",\n \"crm.objects.listings.write\": \"\",\n \"crm.objects.meetings.read\": \"\",\n \"crm.objects.notes.read\": \"\",\n \"crm.objects.orders.read\": \"\",\n \"crm.objects.orders.write\": \"\",\n \"crm.objects.partner-clients.read\": \"\",\n \"crm.objects.partner-clients.write\": \"\",\n \"crm.objects.partner-services.read\": \"\",\n \"crm.objects.partner-services.write\": \"\",\n \"crm.objects.products.read\": \"\",\n \"crm.objects.products.write\": \"\",\n \"crm.objects.projects.highly_sensitive.read\": \"\",\n \"crm.objects.projects.highly_sensitive.write\": \"\",\n \"crm.objects.projects.read\": \"\",\n \"crm.objects.projects.sensitive.read\": \"\",\n \"crm.objects.projects.sensitive.write\": \"\",\n \"crm.objects.projects.write\": \"\",\n \"crm.objects.quotes.read\": \"\",\n \"crm.objects.quotes.write\": \"\",\n \"crm.objects.services.read\": \"\",\n \"crm.objects.services.write\": \"\",\n \"crm.objects.subscriptions.read\": \"\",\n \"crm.objects.subscriptions.write\": \"\",\n \"crm.objects.tasks.read\": \"\",\n \"crm.objects.users.read\": \"\",\n \"crm.objects.users.write\": \"\",\n \"e-commerce\": \"\",\n \"media_bridge.read\": \"\",\n \"oauth\": \"\",\n \"tickets\": \"\",\n \"tickets.highly_sensitive.v2\": \"\",\n \"tickets.sensitive.v2\": \"\"\n },\n \"tokenUrl\": \"https://api.hubapi.com/oauth/v1/token\"\n }\n },\n \"type\": \"oauth2\"\n },\n \"private_apps\": {\n \"in\": \"header\",\n \"name\": \"private-app\",\n \"type\": \"apiKey\"\n },\n \"private_apps_legacy\": {\n \"in\": \"header\",\n \"name\": \"private-app-legacy\",\n \"type\": \"apiKey\"\n }\n}") +SECURITY_FIELDS = json.loads("{\n \"developer_hapikey\": {\n \"field\": \"HAPIKEY\",\n \"kind\": \"apiKey\",\n \"location\": \"query\",\n \"name\": \"hapikey\"\n },\n \"oauth2\": {\n \"field\": \"OAUTH2\",\n \"kind\": \"oauth2\",\n \"scheme\": \"Bearer\"\n },\n \"private_apps\": {\n \"field\": \"PRIVATE_APP\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"private-app\"\n },\n \"private_apps_legacy\": {\n \"field\": \"PRIVATE_APP_LEGACY\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"private-app-legacy\"\n }\n}") +PATH_PARAMETER_RE = re.compile(r"{([^}/]+)}") +SOURCE_ROOT = Path(globals().get("__file__", "agent.py")).resolve().parent +SOURCE_SKILLS_DIR = SOURCE_ROOT / "skills" +RUNTIME_SKILLS_DIR = ".deepagents/openapi-skills/" + + +class OperationInput(BaseModel): + parameters: dict[str, Any] = Field( + default_factory=dict, + description="Path, query, header, and cookie parameters keyed by OpenAPI parameter name.", + ) + body: Any | None = Field(default=None, description="JSON request body, when the operation accepts one.") + + +class HubspotAssociationsOpenapiAgent(A2AAgent): + name = "hubspot-associations-openapi-agent" + description = "CRM relationship API for linking records and activities across object types." + version = "v4" + consumer_setup = ConsumerSetup.from_fields( + ConsumerSetupField.config("OPENAPI_BASE_URL", label="API base URL", description="Override the default API server (https://api.hubapi.com).", required=False, input_type="url"), + ConsumerSetupField.secret("HAPIKEY", label="developer_hapikey API key", description="Sent as query parameter 'hapikey'.", required=False), + ConsumerSetupField.secret("OAUTH2", label="oauth2 access token", description="OAuth/OIDC access token.", required=True), + ConsumerSetupField.secret("PRIVATE_APP", label="private_apps API key", description="Sent as header parameter 'private-app'.", required=False), + ConsumerSetupField.secret("PRIVATE_APP_LEGACY", label="private_apps_legacy API key", description="Sent as header parameter 'private-app-legacy'.", required=False), + ) + llm_provisioning = LLMProvisioning.PLATFORM + pricing = Pricing( + price_per_call_usd=0.0, + caller_pays_llm=True, + notes="Uses the caller's saved LLM credential through ctx.llm.", + ) + resources = Resources(cpu="200m", memory="512Mi") + egress = EgressPolicy( + allow_hosts=('api.hubapi.com',), + deny_internet_by_default=True, + ) + tools_used = ("openapi", "deepagents") + capabilities = { + "openapi_auto_agent": { + "operation_count": len(OPERATIONS), + "default_base_url": DEFAULT_BASE_URL, + "source_openapi_url": 'https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json', + "source_openapi_urls": ['https://raw.githubusercontent.com/HubSpot/HubSpot-public-api-spec-collection/main/PublicApiSpecs/CRM/Associations/Rollouts/130902/v4/associations.json'], + "server_urls": ['https://api.hubapi.com'], + "regenerable": True, + "security_schemes": list(SECURITY_SCHEMES), + } + } + + @skill( + name="auto", + description="Use the OpenAPI service to complete a natural-language goal.", + tags=("openapi", "auto"), + timeout_seconds=900, + ) + async def auto(self, ctx: RunContext, goal: str) -> dict[str, Any]: + creds = ctx.llm + if not creds.api_key: + return { + "error": "llm_credentials_missing", + "final": ( + "LLM key required. Add an LLM credential in Settings > " + "LLM credentials before running this agent." + ), + "messages": [], + } + graph = create_a2a_deep_agent( + ctx, + creds=creds, + tools=self._operation_tools(ctx), + system_prompt=self._system_prompt(), + ) + result = await graph.ainvoke({"messages": [{"role": "user", "content": goal}]}) + messages = result.get("messages", []) if isinstance(result, dict) else [] + final = _message_text(messages[-1]) if messages else result + return { + "final": final, + "messages": [_message_to_dict(message) for message in messages[-8:]], + } + + @skill( + name="post_crm_v4_associations_usage_high_usage_report_user_id_request", + description="POST /crm/v4/associations/usage/high-usage-report/{userId} - Report high usage", + tags=('Report',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_usage_high_usage_report_user_id_request( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_usage_high_usage_report_user_id_request", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive", + description="POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/archive - Remove associations", + tags=('Batch',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_from_object_type_to_object_type_batch_archive_archive", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default", + description="POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/associate/default - Create Default Associations", + tags=('Batch',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_from_object_type_to_object_type_batch_associate_default", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="post_crm_v4_associations_from_object_type_to_object_type_batch_create_create", + description="POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create - Associate records (labelled)", + tags=('Batch',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_from_object_type_to_object_type_batch_create_create( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_from_object_type_to_object_type_batch_create_create", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar", + description="POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/labels/archive - Delete Specific Labels", + tags=('Batch',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_from_object_type_to_object_type_batch_labels_archive_ar", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page", + description="POST /crm/v4/associations/{fromObjectType}/{toObjectType}/batch/read - Retrieve associations", + tags=('Batch',), + timeout_seconds=120, + ) + async def post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "post_crm_v4_associations_from_object_type_to_object_type_batch_read_get_page", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec", + description="PUT /crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId} - Associate records (default)", + tags=('Basic',), + timeout_seconds=120, + ) + async def put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "put_crm_v4_objects_from_object_type_from_object_id_associations_default_to_objec", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page", + description="GET /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType} - Retrieve all associations by object type", + tags=('Basic',), + timeout_seconds=60, + ) + async def get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "get_crm_v4_objects_object_type_object_id_associations_to_object_type_get_page", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i", + description="PUT /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} - Associate records (labelled)", + tags=('Basic',), + timeout_seconds=120, + ) + async def put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "put_crm_v4_objects_object_type_object_id_associations_to_object_type_to_object_i", + parameters=parameters or {}, + body=body, + ) + + @skill( + name="delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec", + description="DELETE /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} - Delete associations between two records", + tags=('Basic',), + timeout_seconds=120, + ) + async def delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec( + self, + ctx: RunContext, + parameters: dict[str, Any] | None = None, + body: Any | None = None, + ) -> dict[str, Any]: + return await self._request( + ctx, + "delete_crm_v4_objects_object_type_object_id_associations_to_object_type_to_objec", + parameters=parameters or {}, + body=body, + ) + + def _operation_subagents(self, ctx: RunContext, skills_root: str) -> list[dict[str, Any]]: + subagents: list[dict[str, Any]] = [] + for group in OPERATION_GROUPS: + skill_path = ( + f"{skills_root}{group['skill_dir']}/" + if skills_root + else "" + ) + subagent = { + "name": group["subagent_name"], + "description": group["description"], + "system_prompt": self._subagent_prompt(group), + "tools": self._operation_tools(ctx, set(group["operation_ids"])), + } + if skill_path: + subagent["skills"] = [skill_path] + subagents.append(subagent) + return subagents + + def _operation_tools( + self, + ctx: RunContext, + operation_ids: set[str] | None = None, + ) -> list[StructuredTool]: + tools: list[StructuredTool] = [] + for operation_id, operation in OPERATIONS.items(): + if operation_ids is not None and operation_id not in operation_ids: + continue + async def call( + parameters: dict[str, Any] | None = None, + body: Any | None = None, + *, + _operation_id: str = operation_id, + ) -> dict[str, Any]: + return await self._request( + ctx, + _operation_id, + parameters=parameters or {}, + body=body, + ) + + tools.append( + StructuredTool.from_function( + coroutine=call, + name=operation["skill_name"], + description=self._tool_description(operation), + args_schema=OperationInput, + ) + ) + return tools + + def _system_prompt(self) -> str: + if OPERATION_GROUPS: + lines = [ + "You coordinate route-specific OpenAPI subagents.", + "Delegate API work to the matching subagent with the task tool.", + "Do not invent API responses; ask subagents to call their tools for real results.", + "If a subagent reports missing consumer setup, tell the user which setup field is required.", + "If a subagent reports that the generated OpenAPI agent may be stale, ask whether the user wants to refresh it from the latest OpenAPI spec.", + "", + "Available route groups:", + ] + for group in OPERATION_GROUPS: + lines.append( + f"- {group['subagent_name']}: {group['description']}" + ) + return "\n".join(lines) + lines = [ + "You operate an API through generated OpenAPI tools.", + "Call tools to get real results. Do not invent API responses.", + "For write, update, or delete operations, explain the intended action before calling the tool.", + "If an operation reports missing consumer setup, tell the user which setup field is required.", + "If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, tell the user this generated agent may need to be refreshed from the latest OpenAPI spec and ask whether they want to refresh it.", + "", + "Available operations:", + ] + for operation in OPERATIONS.values(): + marker = "WRITE" if operation.get("destructive") else "READ" + lines.append( + f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} — {operation['summary']}" + ) + return "\n".join(lines) + + def _subagent_prompt(self, group: dict[str, Any]) -> str: + lines = [ + "You operate one route group from a generated OpenAPI API.", + "Use the available operation tools to make real API calls. Do not invent API responses.", + "Read the route group's SKILL.md when it applies; it lists every route you cover.", + "For write, update, or delete operations, explain the intended action before calling the tool.", + "If an operation reports missing consumer setup, return the exact setup field name.", + "If an operation returns 404, 405, 410, or a schema/validation error that suggests the live API no longer matches these tools, say the generated agent may need to be refreshed from the latest OpenAPI spec.", + "", + f"Route group: {group['label']}", + f"Common prefix: {group.get('common_prefix') or '/'}", + "Available operation tools:", + ] + for operation_id in group["operation_ids"]: + operation = OPERATIONS[operation_id] + marker = "WRITE" if operation.get("destructive") else "READ" + lines.append( + f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} - {operation['summary']}" + ) + return "\n".join(lines) + + def _tool_description(self, operation: dict[str, Any]) -> str: + parts = [ + f"{operation['method']} {operation['path']}", + str(operation.get("description") or operation.get("summary") or ""), + ] + if operation.get("parameters"): + parts.append( + "Parameters: " + + ", ".join( + f"{p['name']} in {p['in']}{' required' if p.get('required') else ''}" + for p in operation["parameters"] + ) + ) + if operation.get("request_body") is not None: + parts.append("Accepts a JSON request body.") + return "\n".join(part for part in parts if part) + + async def _request( + self, + ctx: RunContext, + operation_id: str, + *, + parameters: dict[str, Any], + body: Any | None, + ) -> dict[str, Any]: + operation = OPERATIONS[operation_id] + default_base_url = str(operation.get("base_url") or DEFAULT_BASE_URL).rstrip("/") + base_url_field = str(operation.get("base_url_field") or "OPENAPI_BASE_URL") + base_url = str(ctx.consumer_config(base_url_field, default_base_url) or default_base_url).rstrip("/") + url, query, headers = self._request_parts(ctx, operation, parameters) + request_kwargs: dict[str, Any] = { + "params": query, + "headers": headers, + } + if body is not None: + if isinstance(body, (bytes, bytearray)): + body = body.decode("utf-8", errors="replace") + if isinstance(body, str): + stripped = body.strip() + if stripped and stripped[0] in "{[": + try: + body = json.loads(stripped) + except ValueError: + pass + request_kwargs["json"] = body + async with httpx.AsyncClient(timeout=60.0, follow_redirects=True) as client: + response = await client.request( + operation["method"], + f"{base_url}{url}", + **request_kwargs, + ) + content_type = response.headers.get("content-type", "") + try: + payload: Any = response.json() if "json" in content_type else response.text + except ValueError: + payload = response.text + if response.status_code >= 400: + out = { + "ok": False, + "status_code": response.status_code, + "operation_id": operation_id, + "error": payload, + } + if response.status_code in {404, 405, 410, 422}: + out["stale_openapi_hint"] = ( + "This generated OpenAPI agent may be stale. Ask the user " + "whether they want to refresh it from the latest OpenAPI spec." + ) + return out + return { + "ok": True, + "status_code": response.status_code, + "operation_id": operation_id, + "result": payload, + } + + def _request_parts( + self, + ctx: RunContext, + operation: dict[str, Any], + parameters: dict[str, Any], + ) -> tuple[str, dict[str, Any], dict[str, str]]: + path = operation["path"] + query: dict[str, Any] = {} + headers: dict[str, str] = {} + cookies: dict[str, Any] = {} + for param in operation.get("parameters") or []: + name = param["name"] + if name not in parameters: + if param.get("required"): + raise ValueError(f"missing required parameter {name!r}") + continue + value = parameters[name] + location = param["in"] + if location == "path": + path = path.replace("{" + name + "}", str(value)) + elif location == "query": + query[name] = value + elif location == "header": + headers[name] = str(value) + elif location == "cookie": + cookies[name] = value + unresolved = PATH_PARAMETER_RE.findall(path) + if unresolved: + missing = ", ".join(sorted(set(unresolved))) + raise ValueError("missing required path parameter(s): " + missing) + if cookies: + headers["cookie"] = "; ".join(f"{key}={value}" for key, value in cookies.items()) + auth_headers, auth_query = self._auth_for_operation(ctx, operation) + headers.update(auth_headers) + query.update(auth_query) + return path, query, headers + + def _auth_for_operation(self, ctx: RunContext, operation: dict[str, Any]) -> tuple[dict[str, str], dict[str, Any]]: + requirements = operation.get("security") + if requirements is None: + requirements = ROOT_SECURITY + if requirements == []: + return {}, {} + missing: list[str] = [] + for requirement in requirements or []: + if not isinstance(requirement, dict) or not requirement: + return {}, {} + headers: dict[str, str] = {} + query: dict[str, Any] = {} + ok = True + for scheme_name in requirement: + mapping = SECURITY_FIELDS.get(scheme_name) or {} + secret_name = mapping.get("field") + value = _consumer_secret_optional(ctx, secret_name) if secret_name else "" + if not value: + ok = False + if secret_name: + missing.append(secret_name) + continue + kind = mapping.get("kind") + if kind == "apiKey": + prefix = mapping.get("prefix") or "" + sent_value = f"{prefix}{value}" + if mapping.get("location") == "query": + query[mapping.get("name") or scheme_name] = sent_value + else: + headers[mapping.get("name") or scheme_name] = sent_value + elif kind in {"http", "oauth2"}: + scheme = mapping.get("scheme") or "Bearer" + if scheme.lower() == "basic": + token = base64.b64encode(value.encode("utf-8")).decode("ascii") + headers["authorization"] = f"Basic {token}" + else: + headers["authorization"] = f"{scheme} {value}" + else: + ok = False + if ok: + return headers, query + if missing: + raise ConsumerSetupMissing( + "operation requires consumer setup secret(s): " + + ", ".join(sorted(set(missing))) + ) + return {}, {} + + +def _consumer_secret_optional(ctx: RunContext, name: str | None) -> str: + if not name: + return "" + try: + return ctx.consumer_secret(name) + except ConsumerSetupMissing: + return "" + + +def _runtime_skills_root(ctx: RunContext) -> str: + workspace = getattr(ctx, "_workspace", None) + prefixes = tuple(getattr(workspace, "write_prefixes", ()) or ()) + if not prefixes: + outputs_prefix = getattr(workspace, "outputs_prefix", None) + prefixes = (outputs_prefix or "outputs/",) + prefix = str(prefixes[0]).strip("/") + return f"/{prefix}/{RUNTIME_SKILLS_DIR}" if prefix else f"/{RUNTIME_SKILLS_DIR}" + + +def _seed_runtime_skills(backend: Any, ctx: RunContext) -> str: + if not SOURCE_SKILLS_DIR.exists(): + return "" + runtime_root = _runtime_skills_root(ctx) + uploads: list[tuple[str, bytes]] = [] + for path in SOURCE_SKILLS_DIR.rglob("*"): + if not path.is_file(): + continue + rel = path.relative_to(SOURCE_SKILLS_DIR).as_posix() + uploads.append((runtime_root + rel, path.read_bytes())) + if not uploads: + return "" + backend.upload_files(uploads) + return runtime_root + + +def _message_text(message: Any) -> Any: + content = getattr(message, "content", message) + return content + + +def _message_to_dict(message: Any) -> dict[str, Any]: + if isinstance(message, BaseMessage): + return message.model_dump(mode="json") + if hasattr(message, "model_dump"): + return message.model_dump(mode="json") + if isinstance(message, dict): + return message + return {"content": str(message)} + + +agent = HubspotAssociationsOpenapiAgent() diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..49e2369 --- /dev/null +++ b/openapi.json @@ -0,0 +1,5677 @@ +{ + "components": { + "responses": { + "Error": { + "content": { + "*/*": { + "example": null, + "schema": { + "$ref": "#/components/schemas/Error" + } + } + }, + "description": "An error occurred." + } + }, + "schemas": { + "AssociationSpec": { + "description": "Defines the type, direction, and details of the relationship between two CRM objects.", + "example": null, + "properties": { + "associationCategory": { + "description": "The category of the association, such as \"HUBSPOT_DEFINED\".", + "enum": [ + "HUBSPOT_DEFINED", + "INTEGRATOR_DEFINED", + "USER_DEFINED", + "WORK" + ], + "example": null, + "type": "string" + }, + "associationTypeId": { + "description": "The ID representing the specific type of association.", + "example": null, + "format": "int32", + "type": "integer" + } + }, + "required": [ + "associationCategory", + "associationTypeId" + ], + "type": "object" + }, + "AssociationSpecWithLabel": { + "description": "Defines the type, direction, and details of the relationship between two CRM objects.", + "example": null, + "properties": { + "category": { + "description": "The category of the association, such as HUBSPOT_DEFINED, USER_DEFINED, or INTEGRATOR_DEFINED.", + "enum": [ + "HUBSPOT_DEFINED", + "INTEGRATOR_DEFINED", + "USER_DEFINED", + "WORK" + ], + "example": null, + "type": "string" + }, + "label": { + "description": "A label describing the association between two objects.", + "example": null, + "type": "string" + }, + "typeId": { + "description": "The unique identifier for the type of association.", + "example": null, + "format": "int32", + "type": "integer" + } + }, + "required": [ + "category", + "typeId" + ], + "type": "object" + }, + "BatchInputPublicAssociationMultiArchive": { + "example": null, + "properties": { + "inputs": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicAssociationMultiArchive" + }, + "type": "array" + } + }, + "required": [ + "inputs" + ], + "type": "object" + }, + "BatchInputPublicAssociationMultiPost": { + "example": null, + "properties": { + "inputs": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicAssociationMultiPost" + }, + "type": "array" + } + }, + "required": [ + "inputs" + ], + "type": "object" + }, + "BatchInputPublicDefaultAssociationMultiPost": { + "example": null, + "properties": { + "inputs": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicDefaultAssociationMultiPost" + }, + "type": "array" + } + }, + "required": [ + "inputs" + ], + "type": "object" + }, + "BatchInputPublicFetchAssociationsBatchRequest": { + "example": null, + "properties": { + "inputs": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicFetchAssociationsBatchRequest" + }, + "type": "array" + } + }, + "required": [ + "inputs" + ], + "type": "object" + }, + "BatchResponseLabelsBetweenObjectPair": { + "example": null, + "properties": { + "completedAt": { + "description": "The timestamp when the batch processing was completed, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "description": "An object containing relevant links related to the batch request.", + "example": null, + "type": "object" + }, + "requestedAt": { + "description": "The timestamp when the batch request was initially made, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/LabelsBetweenObjectPair" + }, + "type": "array" + }, + "startedAt": { + "description": "The timestamp when the batch processing began, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "status": { + "description": "The status of the batch processing request: \"PENDING\", \"PROCESSING\", \"CANCELLED\", or \"COMPLETE\".", + "enum": [ + "CANCELED", + "COMPLETE", + "PENDING", + "PROCESSING" + ], + "example": null, + "type": "string" + } + }, + "required": [ + "completedAt", + "results", + "startedAt", + "status" + ], + "type": "object" + }, + "BatchResponseLabelsBetweenObjectPairWithErrors": { + "example": null, + "properties": { + "completedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "errors": { + "example": null, + "items": { + "$ref": "#/components/schemas/StandardError" + }, + "type": "array" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "example": null, + "type": "object" + }, + "numErrors": { + "example": null, + "format": "int32", + "type": "integer" + }, + "requestedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/LabelsBetweenObjectPair" + }, + "type": "array" + }, + "startedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "status": { + "enum": [ + "CANCELED", + "COMPLETE", + "PENDING", + "PROCESSING" + ], + "example": null, + "type": "string" + } + }, + "required": [ + "completedAt", + "results", + "startedAt", + "status" + ], + "type": "object" + }, + "BatchResponsePublicAssociationMultiWithLabel": { + "example": null, + "properties": { + "completedAt": { + "description": "The timestamp when the batch processing was completed, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "description": "An object containing relevant links related to the batch request.", + "example": null, + "type": "object" + }, + "requestedAt": { + "description": "The timestamp when the batch request was initially made, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicAssociationMultiWithLabel" + }, + "type": "array" + }, + "startedAt": { + "description": "The timestamp when the batch processing began, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "status": { + "description": "The status of the batch processing request: \"PENDING\", \"PROCESSING\", \"CANCELED\", or \"COMPLETE\".", + "enum": [ + "CANCELED", + "COMPLETE", + "PENDING", + "PROCESSING" + ], + "example": null, + "type": "string" + } + }, + "required": [ + "completedAt", + "results", + "startedAt", + "status" + ], + "type": "object" + }, + "BatchResponsePublicAssociationMultiWithLabelWithErrors": { + "example": null, + "properties": { + "completedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "errors": { + "example": null, + "items": { + "$ref": "#/components/schemas/StandardError" + }, + "type": "array" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "example": null, + "type": "object" + }, + "numErrors": { + "example": null, + "format": "int32", + "type": "integer" + }, + "requestedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicAssociationMultiWithLabel" + }, + "type": "array" + }, + "startedAt": { + "example": null, + "format": "date-time", + "type": "string" + }, + "status": { + "enum": [ + "CANCELED", + "COMPLETE", + "PENDING", + "PROCESSING" + ], + "example": null, + "type": "string" + } + }, + "required": [ + "completedAt", + "results", + "startedAt", + "status" + ], + "type": "object" + }, + "BatchResponsePublicDefaultAssociation": { + "description": "The response returned after performing a batch operation on associations.", + "example": null, + "properties": { + "completedAt": { + "description": "The timestamp when the batch process was completed, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "errors": { + "example": null, + "items": { + "$ref": "#/components/schemas/StandardError" + }, + "type": "array" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "description": "An object containing relevant links related to the batch request.", + "example": null, + "type": "object" + }, + "numErrors": { + "description": "The number of errors encountered during the batch processing.", + "example": null, + "format": "int32", + "type": "integer" + }, + "requestedAt": { + "description": "The timestamp when the batch process was initiated, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicDefaultAssociation" + }, + "type": "array" + }, + "startedAt": { + "description": "The timestamp when the batch process began execution, in ISO 8601 format.", + "example": null, + "format": "date-time", + "type": "string" + }, + "status": { + "description": "The status of the batch processing request: \"PENDING\", \"PROCESSING\", \"CANCELLED\", or \"COMPLETE\".", + "enum": [ + "CANCELED", + "COMPLETE", + "PENDING", + "PROCESSING" + ], + "example": null, + "type": "string" + } + }, + "required": [ + "completedAt", + "results", + "startedAt", + "status" + ], + "type": "object" + }, + "CollectionResponseMultiAssociatedObjectWithLabelForwardPaging": { + "example": null, + "properties": { + "paging": { + "$ref": "#/components/schemas/ForwardPaging" + }, + "results": { + "example": null, + "items": { + "$ref": "#/components/schemas/MultiAssociatedObjectWithLabel" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" + }, + "DateTime": { + "example": null, + "properties": { + "dateOnly": { + "description": "Indicates whether the DateTime value represents only a date without a time component.", + "example": null, + "type": "boolean" + }, + "timeZoneShift": { + "description": "The integer value representing the shift in minutes from UTC for the DateTime value.", + "example": null, + "format": "int32", + "type": "integer" + }, + "value": { + "description": "The integer value representing a specific point in time.", + "example": null, + "format": "int64", + "type": "integer" + } + }, + "required": [ + "dateOnly", + "timeZoneShift", + "value" + ], + "type": "object" + }, + "Error": { + "example": { + "category": "VALIDATION_ERROR", + "correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf", + "links": { + "knowledge-base": "https://www.hubspot.com/products/service/knowledge-base" + }, + "message": "Invalid input (details will vary based on the error)" + }, + "properties": { + "category": { + "description": "The error category", + "example": null, + "type": "string" + }, + "context": { + "additionalProperties": { + "example": null, + "items": { + "example": null, + "type": "string" + }, + "type": "array" + }, + "description": "Context about the error condition", + "example": "{invalidPropertyName=[propertyValue], missingScopes=[scope1, scope2]}", + "type": "object" + }, + "correlationId": { + "description": "A unique identifier for the request. Include this value with any error reports or support tickets", + "example": "aeb5f871-7f07-4993-9211-075dc63e7cbf", + "format": "uuid", + "type": "string" + }, + "errors": { + "description": "further information about the error", + "example": null, + "items": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "type": "array" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "description": "A map of link names to associated URIs containing documentation about the error or recommended remediation steps", + "example": null, + "type": "object" + }, + "message": { + "description": "A human readable message describing the error along with remediation steps where appropriate", + "example": "An error occurred", + "type": "string" + }, + "subCategory": { + "description": "A specific category that contains more specific detail about the error", + "example": null, + "type": "string" + } + }, + "required": [ + "category", + "correlationId", + "message" + ], + "type": "object" + }, + "ErrorDetail": { + "example": null, + "properties": { + "code": { + "description": "The status code associated with the error detail", + "example": null, + "type": "string" + }, + "context": { + "additionalProperties": { + "example": null, + "items": { + "example": null, + "type": "string" + }, + "type": "array" + }, + "description": "Context about the error condition", + "example": "{missingScopes=[scope1, scope2]}", + "type": "object" + }, + "in": { + "description": "The name of the field or parameter in which the error was found.", + "example": null, + "type": "string" + }, + "message": { + "description": "A human readable message describing the error along with remediation steps where appropriate", + "example": null, + "type": "string" + }, + "subCategory": { + "description": "A specific category that contains more specific detail about the error", + "example": null, + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "ForwardPaging": { + "example": null, + "properties": { + "next": { + "$ref": "#/components/schemas/NextPage" + } + }, + "type": "object" + }, + "LabelsBetweenObjectPair": { + "description": "The relationship descriptors applicable between two object types.", + "example": null, + "properties": { + "fromObjectId": { + "description": "The ID of the source object in the association.", + "example": null, + "type": "string" + }, + "fromObjectTypeId": { + "description": "The type ID of the source object in the association.", + "example": null, + "type": "string" + }, + "labels": { + "description": "An array of labels associated with the relationship between the objects.", + "example": null, + "items": { + "example": null, + "type": "string" + }, + "type": "array" + }, + "toObjectId": { + "description": "The ID of the target object in the association.", + "example": null, + "type": "string" + }, + "toObjectTypeId": { + "description": "The type ID of the target object in the association.", + "example": null, + "type": "string" + } + }, + "required": [ + "fromObjectId", + "fromObjectTypeId", + "labels", + "toObjectId", + "toObjectTypeId" + ], + "type": "object" + }, + "MultiAssociatedObjectWithLabel": { + "description": "Represents an object that is associated with multiple other objects, with optional context.", + "example": null, + "properties": { + "associationTypes": { + "example": null, + "items": { + "$ref": "#/components/schemas/AssociationSpecWithLabel" + }, + "type": "array" + }, + "toObjectId": { + "description": "The unique identifier for the target object in the association.", + "example": null, + "type": "string" + } + }, + "required": [ + "associationTypes", + "toObjectId" + ], + "type": "object" + }, + "NextPage": { + "description": "Specifies the paging information needed to retrieve the next set of results in a paginated API response", + "example": null, + "properties": { + "after": { + "description": "A paging cursor token for retrieving subsequent pages.", + "example": null, + "type": "string" + }, + "link": { + "description": "A URL that can be used to retrieve the next page results.", + "example": null, + "type": "string" + } + }, + "required": [ + "after" + ], + "type": "object" + }, + "Paging": { + "example": null, + "properties": { + "next": { + "$ref": "#/components/schemas/NextPage" + }, + "prev": { + "$ref": "#/components/schemas/PreviousPage" + } + }, + "type": "object" + }, + "PreviousPage": { + "description": "specifies the paging information needed to retrieve the previous set of results in a paginated API response", + "example": null, + "properties": { + "before": { + "description": "A paging cursor token for retrieving previous pages.", + "example": null, + "type": "string" + }, + "link": { + "description": "A URL that can be used to retrieve the previous pages' results.", + "example": null, + "type": "string" + } + }, + "required": [ + "before" + ], + "type": "object" + }, + "PublicAssociationMultiArchive": { + "example": null, + "properties": { + "from": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "to": { + "example": null, + "items": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "type": "array" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "PublicAssociationMultiPost": { + "example": null, + "properties": { + "from": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "to": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "types": { + "example": null, + "items": { + "$ref": "#/components/schemas/AssociationSpec" + }, + "type": "array" + } + }, + "required": [ + "from", + "to", + "types" + ], + "type": "object" + }, + "PublicAssociationMultiWithLabel": { + "example": null, + "properties": { + "from": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "paging": { + "$ref": "#/components/schemas/Paging" + }, + "to": { + "example": null, + "items": { + "$ref": "#/components/schemas/MultiAssociatedObjectWithLabel" + }, + "type": "array" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "PublicDefaultAssociation": { + "example": null, + "properties": { + "associationSpec": { + "$ref": "#/components/schemas/AssociationSpec" + }, + "from": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "to": { + "$ref": "#/components/schemas/PublicObjectId" + } + }, + "required": [ + "associationSpec", + "from", + "to" + ], + "type": "object" + }, + "PublicDefaultAssociationMultiPost": { + "example": null, + "properties": { + "from": { + "$ref": "#/components/schemas/PublicObjectId" + }, + "to": { + "$ref": "#/components/schemas/PublicObjectId" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "PublicFetchAssociationsBatchRequest": { + "example": null, + "properties": { + "after": { + "description": "A paging cursor token used to retrieve the next set of results in a paginated response.", + "example": null, + "type": "string" + }, + "id": { + "description": "The unique identifier for the object whose associations are being fetched.", + "example": null, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "PublicObjectId": { + "description": "Contains the Id of a Public Object", + "example": null, + "properties": { + "id": { + "description": "ID of the object", + "example": null, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "ReportCreationResponse": { + "example": null, + "properties": { + "enqueueTime": { + "$ref": "#/components/schemas/DateTime" + }, + "userEmail": { + "description": "Email of the user", + "example": null, + "type": "string" + }, + "userId": { + "description": "ID of the user", + "example": null, + "format": "int32", + "type": "integer" + } + }, + "required": [ + "enqueueTime", + "userEmail", + "userId" + ], + "type": "object" + }, + "StandardError": { + "description": "Represents a standard error response in the HubSpot API, providing detailed information about an error that occurred during an API request.", + "example": null, + "properties": { + "category": { + "description": "The main category of the error.", + "example": null, + "type": "string" + }, + "context": { + "additionalProperties": { + "example": null, + "items": { + "example": null, + "type": "string" + }, + "type": "array" + }, + "description": "Additional context-specific information related to the error.", + "example": null, + "type": "object" + }, + "errors": { + "description": "The detailed error objects.", + "example": null, + "items": { + "$ref": "#/components/schemas/ErrorDetail" + }, + "type": "array" + }, + "id": { + "description": "A unique ID for the error instance.", + "example": null, + "type": "string" + }, + "links": { + "additionalProperties": { + "example": null, + "type": "string" + }, + "description": "URLs linking to documentation or resources associated with the error.", + "example": null, + "type": "object" + }, + "message": { + "description": "A human-readable string describing the error and possible remediation steps.", + "example": null, + "type": "string" + }, + "status": { + "description": "The HTTP status code associated with the error.", + "example": null, + "type": "string" + }, + "subCategory": { + "description": "A more specific error category within each main category.", + "example": null, + "properties": {}, + "type": "object" + } + }, + "required": [ + "category", + "context", + "errors", + "links", + "message", + "status" + ], + "type": "object" + } + }, + "securitySchemes": { + "developer_hapikey": { + "in": "query", + "name": "hapikey", + "type": "apiKey" + }, + "oauth2": { + "flows": { + "authorizationCode": { + "authorizationUrl": "https://app.hubspot.com/oauth/authorize", + "scopes": { + "crm.objects.appointments.read": "", + "crm.objects.appointments.sensitive.read.v2": "", + "crm.objects.appointments.sensitive.write.v2": "", + "crm.objects.appointments.write": "", + "crm.objects.calls.read": "", + "crm.objects.carts.read": "", + "crm.objects.carts.write": "", + "crm.objects.commercepayments.read": "", + "crm.objects.commercepayments.write": "", + "crm.objects.companies.highly_sensitive.read.v2": "", + "crm.objects.companies.highly_sensitive.write.v2": "", + "crm.objects.companies.read": "", + "crm.objects.companies.sensitive.read.v2": "", + "crm.objects.companies.sensitive.write.v2": "", + "crm.objects.companies.write": "", + "crm.objects.contacts.highly_sensitive.read.v2": "", + "crm.objects.contacts.highly_sensitive.write.v2": "", + "crm.objects.contacts.read": "", + "crm.objects.contacts.sensitive.read.v2": "", + "crm.objects.contacts.sensitive.write.v2": "", + "crm.objects.contacts.write": "", + "crm.objects.courses.read": "", + "crm.objects.courses.write": "", + "crm.objects.custom.highly_sensitive.read.v2": "", + "crm.objects.custom.highly_sensitive.write.v2": "", + "crm.objects.custom.read": "", + "crm.objects.custom.sensitive.read.v2": "", + "crm.objects.custom.sensitive.write.v2": "", + "crm.objects.custom.write": "", + "crm.objects.deals.highly_sensitive.read.v2": "", + "crm.objects.deals.highly_sensitive.write.v2": "", + "crm.objects.deals.read": "", + "crm.objects.deals.sensitive.read.v2": "", + "crm.objects.deals.sensitive.write.v2": "", + "crm.objects.deals.write": "", + "crm.objects.emails.read": "", + "crm.objects.goals.read": "", + "crm.objects.goals.write": "", + "crm.objects.invoices.read": "", + "crm.objects.invoices.write": "", + "crm.objects.leads.read": "", + "crm.objects.leads.write": "", + "crm.objects.line_items.read": "", + "crm.objects.line_items.write": "", + "crm.objects.listings.read": "", + "crm.objects.listings.write": "", + "crm.objects.meetings.read": "", + "crm.objects.notes.read": "", + "crm.objects.orders.read": "", + "crm.objects.orders.write": "", + "crm.objects.partner-clients.read": "", + "crm.objects.partner-clients.write": "", + "crm.objects.partner-services.read": "", + "crm.objects.partner-services.write": "", + "crm.objects.products.read": "", + "crm.objects.products.write": "", + "crm.objects.projects.highly_sensitive.read": "", + "crm.objects.projects.highly_sensitive.write": "", + "crm.objects.projects.read": "", + "crm.objects.projects.sensitive.read": "", + "crm.objects.projects.sensitive.write": "", + "crm.objects.projects.write": "", + "crm.objects.quotes.read": "", + "crm.objects.quotes.write": "", + "crm.objects.services.read": "", + "crm.objects.services.write": "", + "crm.objects.subscriptions.read": "", + "crm.objects.subscriptions.write": "", + "crm.objects.tasks.read": "", + "crm.objects.users.read": "", + "crm.objects.users.write": "", + "e-commerce": "", + "media_bridge.read": "", + "oauth": "", + "tickets": "", + "tickets.highly_sensitive.v2": "", + "tickets.sensitive.v2": "" + }, + "tokenUrl": "https://api.hubapi.com/oauth/v1/token" + } + }, + "type": "oauth2" + }, + "private_apps": { + "in": "header", + "name": "private-app", + "type": "apiKey" + }, + "private_apps_legacy": { + "in": "header", + "name": "private-app-legacy", + "type": "apiKey" + } + } + }, + "info": { + "description": "Basepom for all HubSpot Projects", + "title": "Associations", + "version": "v4", + "x-hubspot-api-use-case": "When an existing contact has moved to a new company, update their associated company to keep your CRM up to date.", + "x-hubspot-introduction": "Use the associations API to create, retrieve, update, or delete associations between records, or between records and activities. ", + "x-hubspot-product-tier-requirements": { + "cms": "FREE", + "commerce": "FREE", + "crmHub": "FREE", + "dataHub": "FREE", + "marketing": "FREE", + "sales": "FREE", + "service": "FREE" + }, + "x-hubspot-related-documentation": [ + { + "name": "Associations guide", + "url": "https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4" + } + ] + }, + "openapi": "3.0.1", + "paths": { + "/crm/v4/associations/usage/high-usage-report/{userId}": { + "post": { + "description": "Requests a report of all objects in the portal which have a high usage of associations", + "operationId": "post-/crm/v4/associations/usage/high-usage-report/{userId}_request", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "userId", + "required": true, + "schema": { + "example": null, + "format": "int32", + "type": "integer" + }, + "style": "simple" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/ReportCreationResponse" + } + } + }, + "description": "successful operation" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Report high usage", + "tags": [ + "Report" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/archive": { + "post": { + "description": "Batch delete associations for objects", + "operationId": "post-/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/archive_archive", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "", + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchInputPublicAssociationMultiArchive" + } + } + }, + "required": true + }, + "responses": { + "204": { + "content": {}, + "description": "No content" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Remove associations", + "tags": [ + "Batch" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/associate/default": { + "post": { + "description": "Create the default (most generic) association type between two object types", + "operationId": "post-/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/associate/default_createDefault", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "", + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchInputPublicDefaultAssociationMultiPost" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponsePublicDefaultAssociation" + } + } + }, + "description": "successful operation" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": " Create Default Associations", + "tags": [ + "Batch" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create": { + "post": { + "description": "Batch create associations for objects", + "operationId": "post-/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/create_create", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "", + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchInputPublicAssociationMultiPost" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponseLabelsBetweenObjectPair" + } + } + }, + "description": "successful operation" + }, + "207": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponseLabelsBetweenObjectPairWithErrors" + } + } + }, + "description": "multiple statuses" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Associate records (labelled)", + "tags": [ + "Batch" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/labels/archive": { + "post": { + "description": "Batch delete specific association labels for objects. Deleting an unlabeled association will also delete all labeled associations between those two objects", + "operationId": "post-/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/labels/archive_archiveLabels", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "", + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchInputPublicAssociationMultiPost" + } + } + }, + "required": true + }, + "responses": { + "204": { + "content": {}, + "description": "No content" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Delete Specific Labels", + "tags": [ + "Batch" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/read": { + "post": { + "description": "Batch read associations for objects to specific object type. The 'after' field in a returned paging object can be added alongside the 'id' to retrieve the next page of associations from that objectId. The 'link' field is deprecated and should be ignored. Note: The 'paging' field will only be present if there are more pages and absent otherwise.", + "operationId": "post-/crm/v4/associations/{fromObjectType}/{toObjectType}/batch/read_getPage", + "parameters": [ + { + "description": "", + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "", + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchInputPublicFetchAssociationsBatchRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponsePublicAssociationMultiWithLabel" + } + } + }, + "description": "successful operation" + }, + "207": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponsePublicAssociationMultiWithLabelWithErrors" + } + } + }, + "description": "multiple statuses" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Retrieve associations", + "tags": [ + "Batch" + ], + "x-hubspot-rate-limit-exemptions": [ + "ten-secondly" + ] + } + }, + "/crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}": { + "put": { + "description": "Create the default (most generic) association type between two object types", + "operationId": "put-/crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}_createDefault", + "parameters": [ + { + "explode": false, + "in": "path", + "name": "fromObjectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "fromObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/BatchResponsePublicDefaultAssociation" + } + } + }, + "description": "successful operation" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "oauth" + ] + }, + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Associate records (default)", + "tags": [ + "Basic" + ] + } + }, + "/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}": { + "get": { + "description": "Retrieve all associations between a specific record and an object type. Limit 500 per call.", + "operationId": "get-/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}_getPage", + "parameters": [ + { + "explode": false, + "in": "path", + "name": "objectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "objectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "description": "The paging cursor token of the last successfully read resource will be returned as the `paging.next.after` JSON property of a paged response containing more results.", + "explode": true, + "in": "query", + "name": "after", + "required": false, + "schema": { + "example": null, + "type": "string" + }, + "style": "form" + }, + { + "description": "The maximum number of results to display per page.", + "explode": true, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 500, + "example": null, + "format": "int32", + "type": "integer" + }, + "style": "form" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/CollectionResponseMultiAssociatedObjectWithLabelForwardPaging" + } + } + }, + "description": "successful operation" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "oauth" + ] + }, + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Retrieve all associations by object type", + "tags": [ + "Basic" + ] + } + }, + "/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}": { + "delete": { + "description": "deletes all associations between two records.", + "operationId": "delete-/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}_archive", + "parameters": [ + { + "explode": false, + "in": "path", + "name": "objectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "objectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "responses": { + "204": { + "content": {}, + "description": "No content" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "oauth" + ] + }, + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Delete associations between two records", + "tags": [ + "Basic" + ] + }, + "put": { + "description": "Set association labels between two records.", + "operationId": "put-/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}_create", + "parameters": [ + { + "explode": false, + "in": "path", + "name": "objectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "objectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectId", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + }, + { + "explode": false, + "in": "path", + "name": "toObjectType", + "required": true, + "schema": { + "example": null, + "type": "string" + }, + "style": "simple" + } + ], + "requestBody": { + "content": { + "application/json": { + "example": null, + "schema": { + "example": null, + "items": { + "$ref": "#/components/schemas/AssociationSpec" + }, + "type": "array" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "example": null, + "schema": { + "$ref": "#/components/schemas/LabelsBetweenObjectPair" + } + } + }, + "description": "successful operation" + }, + "default": { + "$ref": "#/components/responses/Error", + "description": "" + } + }, + "security": [ + { + "oauth2": [ + "oauth" + ] + }, + { + "oauth2": [ + "crm.objects.deals.read" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.read" + ] + }, + { + "oauth2": [ + "crm.objects.services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.write" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.tasks.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "media_bridge.read" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.write" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.write" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.write" + ] + }, + { + "oauth2": [ + "crm.objects.calls.read" + ] + }, + { + "oauth2": [ + "crm.objects.meetings.read" + ] + }, + { + "oauth2": [ + "crm.objects.custom.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.users.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.read" + ] + }, + { + "oauth2": [ + "crm.objects.orders.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-services.write" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.write" + ] + }, + { + "oauth2": [ + "tickets" + ] + }, + { + "oauth2": [ + "crm.objects.commercepayments.read" + ] + }, + { + "oauth2": [ + "crm.objects.products.write" + ] + }, + { + "oauth2": [ + "crm.objects.services.write" + ] + }, + { + "oauth2": [ + "crm.objects.subscriptions.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.read" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.invoices.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.highly_sensitive.read" + ] + }, + { + "oauth2": [ + "tickets.sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.write" + ] + }, + { + "oauth2": [ + "e-commerce" + ] + }, + { + "oauth2": [ + "crm.objects.appointments.read" + ] + }, + { + "oauth2": [ + "crm.objects.projects.read" + ] + }, + { + "oauth2": [ + "crm.objects.companies.sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.deals.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.companies.highly_sensitive.write.v2" + ] + }, + { + "oauth2": [ + "crm.objects.custom.highly_sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.goals.write" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.write" + ] + }, + { + "oauth2": [ + "crm.objects.goals.read" + ] + }, + { + "oauth2": [ + "crm.objects.line_items.read" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.write" + ] + }, + { + "oauth2": [ + "crm.objects.projects.write" + ] + }, + { + "oauth2": [ + "crm.objects.deals.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.projects.sensitive.write" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.write" + ] + }, + { + "oauth2": [ + "tickets.highly_sensitive.v2" + ] + }, + { + "oauth2": [ + "crm.objects.leads.read" + ] + }, + { + "oauth2": [ + "crm.objects.leads.write" + ] + }, + { + "oauth2": [ + "crm.objects.carts.read" + ] + }, + { + "oauth2": [ + "crm.objects.emails.read" + ] + }, + { + "oauth2": [ + "crm.objects.quotes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.write" + ] + }, + { + "oauth2": [ + "crm.objects.partner-clients.read" + ] + }, + { + "oauth2": [ + "crm.objects.notes.read" + ] + }, + { + "oauth2": [ + "crm.objects.courses.read" + ] + }, + { + "oauth2": [ + "crm.objects.listings.read" + ] + }, + { + "oauth2": [ + "crm.objects.contacts.sensitive.read.v2" + ] + }, + { + "oauth2": [ + "crm.objects.products.read" + ] + } + ], + "summary": "Associate records (labelled)", + "tags": [ + "Basic" + ] + } + } + }, + "servers": [ + { + "url": "https://api.hubapi.com" + } + ], + "tags": [ + { + "name": "Basic" + }, + { + "name": "Batch" + }, + { + "name": "Report" + } + ], + "x-hubspot-available-client-libraries": [ + "Node", + "Python", + "Ruby", + "PHP" + ], + "x-hubspot-product-tier-requirements": { + "cms": "FREE", + "commerce": "FREE", + "crmHub": "FREE", + "dataHub": "FREE", + "marketing": "FREE", + "sales": "FREE", + "service": "FREE" + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..086fbda --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +# a2a-pack is installed by the platform base image. +deepagents>=0.5.0 +langchain>=0.3 +langchain-openai>=0.2 +langchain-core>=0.3 +langgraph>=0.6 +httpx>=0.27