@commandable/integration-data 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials-index.d.ts.map +1 -1
- package/dist/credentials-index.js +119 -0
- package/dist/credentials-index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +33 -0
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +36 -4
- package/dist/loader.js.map +1 -1
- package/integrations/__tests__/liveHarness.ts +16 -3
- package/integrations/airtable/.env.test +9 -0
- package/integrations/airtable/.env.test.example +11 -0
- package/integrations/airtable/README.md +27 -0
- package/integrations/airtable/__tests__/get_handlers.test.ts +43 -5
- package/integrations/confluence/.env.test +25 -0
- package/integrations/confluence/.env.test.example +36 -0
- package/integrations/confluence/README.md +28 -0
- package/integrations/confluence/__tests__/get_handlers.test.ts +121 -0
- package/integrations/confluence/__tests__/usage_parity.test.ts +14 -0
- package/integrations/confluence/__tests__/write_handlers.test.ts +131 -0
- package/integrations/confluence/credentials.json +39 -0
- package/integrations/confluence/credentials_hint.md +4 -0
- package/integrations/confluence/credentials_hint_api_token.md +9 -0
- package/integrations/confluence/credentials_hint_oauth_token.md +8 -0
- package/integrations/confluence/handlers/add_comment.js +19 -0
- package/integrations/confluence/handlers/add_label.js +16 -0
- package/integrations/confluence/handlers/create_page.js +22 -0
- package/integrations/confluence/handlers/delete_page.js +17 -0
- package/integrations/confluence/handlers/get_comments.js +33 -0
- package/integrations/confluence/handlers/get_page_children.js +30 -0
- package/integrations/confluence/handlers/get_space.js +22 -0
- package/integrations/confluence/handlers/list_spaces.js +39 -0
- package/integrations/confluence/handlers/read_page.js +49 -0
- package/integrations/confluence/handlers/search_pages.js +42 -0
- package/integrations/confluence/handlers/update_page.js +42 -0
- package/integrations/confluence/manifest.json +85 -0
- package/integrations/confluence/prompt.md +55 -0
- package/integrations/confluence/schemas/add_comment.json +22 -0
- package/integrations/confluence/schemas/add_label.json +19 -0
- package/integrations/confluence/schemas/create_page.json +33 -0
- package/integrations/confluence/schemas/delete_page.json +23 -0
- package/integrations/confluence/schemas/empty.json +6 -0
- package/integrations/confluence/schemas/get_comments.json +24 -0
- package/integrations/confluence/schemas/get_page_children.json +28 -0
- package/integrations/confluence/schemas/get_space.json +18 -0
- package/integrations/confluence/schemas/list_spaces.json +36 -0
- package/integrations/confluence/schemas/read_page.json +28 -0
- package/integrations/confluence/schemas/search_pages.json +26 -0
- package/integrations/confluence/schemas/update_page.json +31 -0
- package/integrations/github/.env.test +16 -0
- package/integrations/github/.env.test.example +17 -0
- package/integrations/github/README.md +75 -0
- package/integrations/github/__tests__/get_handlers.test.ts +5 -5
- package/integrations/github/__tests__/write_handlers.test.ts +176 -58
- package/integrations/github/handlers/create_file.js +46 -0
- package/integrations/github/handlers/delete_file.js +14 -1
- package/integrations/github/handlers/edit_file.js +52 -0
- package/integrations/github/handlers/edit_files.js +107 -0
- package/integrations/github/manifest.json +74 -47
- package/integrations/github/prompt.md +36 -0
- package/integrations/github/schemas/create_file.json +13 -0
- package/integrations/github/schemas/delete_file.json +2 -2
- package/integrations/github/schemas/edit_file.json +26 -0
- package/integrations/github/schemas/edit_files.json +39 -0
- package/integrations/google-calendar/.env.test.example +11 -0
- package/integrations/google-calendar/README.md +41 -0
- package/integrations/google-calendar/__tests__/write_and_admin_handlers.test.ts +7 -7
- package/integrations/google-calendar/manifest.json +27 -17
- package/integrations/google-docs/README.md +30 -0
- package/integrations/google-drive/README.md +26 -0
- package/integrations/google-gmail/.env.test.example +11 -0
- package/integrations/google-gmail/README.md +49 -0
- package/integrations/google-gmail/handlers/create_draft_email.js +1 -1
- package/integrations/google-gmail/handlers/read_email.js +1 -1
- package/integrations/google-gmail/handlers/send_email.js +1 -1
- package/integrations/google-gmail/manifest.json +36 -25
- package/integrations/google-sheet/README.md +27 -0
- package/integrations/google-slides/README.md +28 -0
- package/integrations/hubspot/.env.test.example +20 -0
- package/integrations/hubspot/README.md +48 -0
- package/integrations/hubspot/__tests__/get_handlers.test.ts +151 -0
- package/integrations/hubspot/__tests__/usage_parity.test.ts +10 -0
- package/integrations/hubspot/__tests__/write_handlers.test.ts +244 -0
- package/integrations/hubspot/credentials.json +48 -0
- package/integrations/hubspot/credentials_hint.md +20 -0
- package/integrations/hubspot/credentials_hint_oauth_token.md +16 -0
- package/integrations/hubspot/handlers/archive_company.js +13 -0
- package/integrations/hubspot/handlers/archive_contact.js +13 -0
- package/integrations/hubspot/handlers/archive_deal.js +13 -0
- package/integrations/hubspot/handlers/archive_ticket.js +13 -0
- package/integrations/hubspot/handlers/create_association.js +18 -0
- package/integrations/hubspot/handlers/create_company.js +13 -0
- package/integrations/hubspot/handlers/create_contact.js +14 -0
- package/integrations/hubspot/handlers/create_deal.js +16 -0
- package/integrations/hubspot/handlers/create_note.js +44 -0
- package/integrations/hubspot/handlers/create_task.js +48 -0
- package/integrations/hubspot/handlers/create_ticket.js +15 -0
- package/integrations/hubspot/handlers/get_associations.js +14 -0
- package/integrations/hubspot/handlers/get_company.js +18 -0
- package/integrations/hubspot/handlers/get_contact.js +18 -0
- package/integrations/hubspot/handlers/get_deal.js +18 -0
- package/integrations/hubspot/handlers/get_ticket.js +20 -0
- package/integrations/hubspot/handlers/list_owners.js +12 -0
- package/integrations/hubspot/handlers/list_pipelines.js +5 -0
- package/integrations/hubspot/handlers/list_properties.js +11 -0
- package/integrations/hubspot/handlers/remove_association.js +22 -0
- package/integrations/hubspot/handlers/search_companies.js +43 -0
- package/integrations/hubspot/handlers/search_contacts.js +43 -0
- package/integrations/hubspot/handlers/search_deals.js +43 -0
- package/integrations/hubspot/handlers/search_notes.js +43 -0
- package/integrations/hubspot/handlers/search_tasks.js +43 -0
- package/integrations/hubspot/handlers/search_tickets.js +43 -0
- package/integrations/hubspot/handlers/update_company.js +13 -0
- package/integrations/hubspot/handlers/update_contact.js +14 -0
- package/integrations/hubspot/handlers/update_deal.js +16 -0
- package/integrations/hubspot/handlers/update_task.js +17 -0
- package/integrations/hubspot/handlers/update_ticket.js +15 -0
- package/integrations/hubspot/manifest.json +230 -0
- package/integrations/hubspot/prompt.md +69 -0
- package/integrations/hubspot/schemas/archive_company.json +13 -0
- package/integrations/hubspot/schemas/archive_contact.json +13 -0
- package/integrations/hubspot/schemas/archive_deal.json +9 -0
- package/integrations/hubspot/schemas/archive_ticket.json +9 -0
- package/integrations/hubspot/schemas/create_association.json +24 -0
- package/integrations/hubspot/schemas/create_company.json +14 -0
- package/integrations/hubspot/schemas/create_contact.json +15 -0
- package/integrations/hubspot/schemas/create_deal.json +20 -0
- package/integrations/hubspot/schemas/create_note.json +37 -0
- package/integrations/hubspot/schemas/create_task.json +51 -0
- package/integrations/hubspot/schemas/create_ticket.json +16 -0
- package/integrations/hubspot/schemas/empty.json +6 -0
- package/integrations/hubspot/schemas/get_associations.json +30 -0
- package/integrations/hubspot/schemas/get_company.json +27 -0
- package/integrations/hubspot/schemas/get_contact.json +27 -0
- package/integrations/hubspot/schemas/get_deal.json +20 -0
- package/integrations/hubspot/schemas/get_ticket.json +20 -0
- package/integrations/hubspot/schemas/list_owners.json +25 -0
- package/integrations/hubspot/schemas/list_pipelines.json +13 -0
- package/integrations/hubspot/schemas/list_properties.json +17 -0
- package/integrations/hubspot/schemas/remove_association.json +24 -0
- package/integrations/hubspot/schemas/search_companies.json +56 -0
- package/integrations/hubspot/schemas/search_contacts.json +56 -0
- package/integrations/hubspot/schemas/search_deals.json +43 -0
- package/integrations/hubspot/schemas/search_notes.json +43 -0
- package/integrations/hubspot/schemas/search_tasks.json +43 -0
- package/integrations/hubspot/schemas/search_tickets.json +43 -0
- package/integrations/hubspot/schemas/update_company.json +20 -0
- package/integrations/hubspot/schemas/update_contact.json +21 -0
- package/integrations/hubspot/schemas/update_deal.json +19 -0
- package/integrations/hubspot/schemas/update_task.json +31 -0
- package/integrations/hubspot/schemas/update_ticket.json +18 -0
- package/integrations/jira/.env.test +46 -0
- package/integrations/jira/.env.test.example +41 -0
- package/integrations/jira/README.md +46 -0
- package/integrations/jira/__tests__/get_handlers.test.ts +193 -0
- package/integrations/jira/__tests__/usage_parity.test.ts +14 -0
- package/integrations/jira/__tests__/write_handlers.test.ts +157 -0
- package/integrations/jira/credentials.json +39 -0
- package/integrations/jira/credentials_hint.md +4 -0
- package/integrations/jira/credentials_hint_api_token.md +6 -0
- package/integrations/jira/credentials_hint_oauth_token.md +6 -0
- package/integrations/jira/handlers/add_comment.js +9 -0
- package/integrations/jira/handlers/assign_issue.js +11 -0
- package/integrations/jira/handlers/create_issue.js +37 -0
- package/integrations/jira/handlers/create_sprint.js +19 -0
- package/integrations/jira/handlers/delete_issue.js +10 -0
- package/integrations/jira/handlers/get_backlog_issues.js +13 -0
- package/integrations/jira/handlers/get_board.js +6 -0
- package/integrations/jira/handlers/get_issue.js +63 -0
- package/integrations/jira/handlers/get_issue_comments.js +31 -0
- package/integrations/jira/handlers/get_myself.js +14 -0
- package/integrations/jira/handlers/get_project.js +28 -0
- package/integrations/jira/handlers/get_sprint.js +5 -0
- package/integrations/jira/handlers/get_sprint_issues.js +13 -0
- package/integrations/jira/handlers/get_transitions.js +23 -0
- package/integrations/jira/handlers/list_boards.js +34 -0
- package/integrations/jira/handlers/list_projects.js +29 -0
- package/integrations/jira/handlers/list_sprints.js +29 -0
- package/integrations/jira/handlers/move_issues_to_sprint.js +11 -0
- package/integrations/jira/handlers/search_issues.js +43 -0
- package/integrations/jira/handlers/search_users.js +21 -0
- package/integrations/jira/handlers/transition_issue.js +44 -0
- package/integrations/jira/handlers/update_issue.js +40 -0
- package/integrations/jira/handlers/update_sprint.js +20 -0
- package/integrations/jira/manifest.json +204 -0
- package/integrations/jira/prompt.md +80 -0
- package/integrations/jira/schemas/add_comment.json +16 -0
- package/integrations/jira/schemas/assign_issue.json +16 -0
- package/integrations/jira/schemas/create_issue.json +49 -0
- package/integrations/jira/schemas/create_sprint.json +29 -0
- package/integrations/jira/schemas/delete_issue.json +12 -0
- package/integrations/jira/schemas/empty.json +6 -0
- package/integrations/jira/schemas/get_backlog_issues.json +33 -0
- package/integrations/jira/schemas/get_board.json +13 -0
- package/integrations/jira/schemas/get_issue.json +23 -0
- package/integrations/jira/schemas/get_issue_comments.json +23 -0
- package/integrations/jira/schemas/get_project.json +17 -0
- package/integrations/jira/schemas/get_sprint.json +13 -0
- package/integrations/jira/schemas/get_sprint_issues.json +33 -0
- package/integrations/jira/schemas/get_transitions.json +12 -0
- package/integrations/jira/schemas/list_boards.json +27 -0
- package/integrations/jira/schemas/list_projects.json +22 -0
- package/integrations/jira/schemas/list_sprints.json +29 -0
- package/integrations/jira/schemas/move_issues_to_sprint.json +19 -0
- package/integrations/jira/schemas/search_issues.json +28 -0
- package/integrations/jira/schemas/search_users.json +18 -0
- package/integrations/jira/schemas/transition_issue.json +38 -0
- package/integrations/jira/schemas/update_issue.json +47 -0
- package/integrations/jira/schemas/update_sprint.json +33 -0
- package/integrations/new_integration_prompt.md +173 -2
- package/integrations/notion/.env.test +10 -0
- package/integrations/notion/.env.test.example +13 -0
- package/integrations/notion/README.md +42 -0
- package/integrations/notion/manifest.json +64 -35
- package/integrations/trello/.env.test +6 -0
- package/integrations/trello/.env.test.example +9 -0
- package/integrations/trello/README.md +50 -0
- package/package.json +7 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const params = new URLSearchParams()
|
|
3
|
+
if (typeof input.archived === 'boolean') params.set('archived', String(input.archived))
|
|
4
|
+
|
|
5
|
+
const suffix = params.toString() ? `?${params.toString()}` : ''
|
|
6
|
+
const res = await integration.fetch(
|
|
7
|
+
`/crm/v3/properties/${encodeURIComponent(input.objectType)}${suffix}`
|
|
8
|
+
)
|
|
9
|
+
return await res.json()
|
|
10
|
+
}
|
|
11
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const body = {
|
|
3
|
+
inputs: [
|
|
4
|
+
{
|
|
5
|
+
from: { id: String(input.fromObjectId) },
|
|
6
|
+
to: { id: String(input.toObjectId) },
|
|
7
|
+
},
|
|
8
|
+
],
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const res = await integration.fetch(
|
|
12
|
+
`/crm/v4/associations/${encodeURIComponent(input.fromObjectType)}/${encodeURIComponent(
|
|
13
|
+
input.toObjectType
|
|
14
|
+
)}/batch/archive`,
|
|
15
|
+
{
|
|
16
|
+
method: 'POST',
|
|
17
|
+
body,
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
return await res.json()
|
|
21
|
+
}
|
|
22
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/companies/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/contacts/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/deals/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/notes/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/tasks/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const filterGroups = []
|
|
3
|
+
if (Array.isArray(input.filters) && input.filters.length > 0) {
|
|
4
|
+
const filters = input.filters.map((f) => {
|
|
5
|
+
const base = {
|
|
6
|
+
propertyName: f.propertyName,
|
|
7
|
+
operator: f.operator,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (f.operator === 'BETWEEN' && typeof f.value === 'string' && f.value.includes(',')) {
|
|
11
|
+
const [low, high] = f.value.split(',', 2).map((s) => s.trim())
|
|
12
|
+
return { ...base, value: low, highValue: high }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (f.operator === 'HAS_PROPERTY' || f.operator === 'NOT_HAS_PROPERTY') {
|
|
16
|
+
return base
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (f.value !== undefined) {
|
|
20
|
+
return { ...base, value: f.value }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return base
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
filterGroups.push({ filters })
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const body = {
|
|
30
|
+
query: input.query,
|
|
31
|
+
filterGroups: filterGroups.length ? filterGroups : undefined,
|
|
32
|
+
properties: input.properties,
|
|
33
|
+
limit: input.limit,
|
|
34
|
+
after: input.after,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const res = await integration.fetch(`/crm/v3/objects/tickets/search`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
})
|
|
41
|
+
return await res.json()
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const props = { ...(input.properties || {}) }
|
|
3
|
+
if (input.name !== undefined) props.name = input.name
|
|
4
|
+
if (input.domain !== undefined) props.domain = input.domain
|
|
5
|
+
|
|
6
|
+
const body = { properties: props }
|
|
7
|
+
const res = await integration.fetch(`/crm/v3/objects/companies/${encodeURIComponent(input.id)}`, {
|
|
8
|
+
method: 'PATCH',
|
|
9
|
+
body,
|
|
10
|
+
})
|
|
11
|
+
return await res.json()
|
|
12
|
+
}
|
|
13
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const props = { ...(input.properties || {}) }
|
|
3
|
+
if (input.firstname !== undefined) props.firstname = input.firstname
|
|
4
|
+
if (input.lastname !== undefined) props.lastname = input.lastname
|
|
5
|
+
if (input.email !== undefined) props.email = input.email
|
|
6
|
+
|
|
7
|
+
const body = { properties: props }
|
|
8
|
+
const res = await integration.fetch(`/crm/v3/objects/contacts/${encodeURIComponent(input.id)}`, {
|
|
9
|
+
method: 'PATCH',
|
|
10
|
+
body,
|
|
11
|
+
})
|
|
12
|
+
return await res.json()
|
|
13
|
+
}
|
|
14
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const props = { ...(input.properties || {}) }
|
|
3
|
+
if (input.dealname !== undefined) props.dealname = input.dealname
|
|
4
|
+
if (input.amount !== undefined) props.amount = String(input.amount)
|
|
5
|
+
if (input.pipeline !== undefined) props.pipeline = input.pipeline
|
|
6
|
+
if (input.dealstage !== undefined) props.dealstage = input.dealstage
|
|
7
|
+
if (input.closedate !== undefined) props.closedate = String(input.closedate)
|
|
8
|
+
|
|
9
|
+
const body = { properties: props }
|
|
10
|
+
const res = await integration.fetch(`/crm/v3/objects/deals/${encodeURIComponent(input.id)}`, {
|
|
11
|
+
method: 'PATCH',
|
|
12
|
+
body,
|
|
13
|
+
})
|
|
14
|
+
return await res.json()
|
|
15
|
+
}
|
|
16
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const props = { ...(input.properties || {}) }
|
|
3
|
+
|
|
4
|
+
if (input.subject !== undefined) props.hs_task_subject = input.subject
|
|
5
|
+
if (input.body !== undefined) props.hs_task_body = input.body
|
|
6
|
+
if (input.status !== undefined) props.hs_task_status = input.status
|
|
7
|
+
if (input.priority !== undefined) props.hs_task_priority = input.priority
|
|
8
|
+
if (input.dueTimestamp !== undefined) props.hs_timestamp = String(input.dueTimestamp)
|
|
9
|
+
if (input.hubspot_owner_id !== undefined) props.hubspot_owner_id = String(input.hubspot_owner_id)
|
|
10
|
+
|
|
11
|
+
const res = await integration.fetch(`/crm/v3/objects/tasks/${encodeURIComponent(input.id)}`, {
|
|
12
|
+
method: 'PATCH',
|
|
13
|
+
body: { properties: props },
|
|
14
|
+
})
|
|
15
|
+
return await res.json()
|
|
16
|
+
}
|
|
17
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
async (input) => {
|
|
2
|
+
const props = { ...(input.properties || {}) }
|
|
3
|
+
if (input.subject !== undefined) props.subject = input.subject
|
|
4
|
+
if (input.content !== undefined) props.content = input.content
|
|
5
|
+
if (input.hs_pipeline !== undefined) props.hs_pipeline = input.hs_pipeline
|
|
6
|
+
if (input.hs_pipeline_stage !== undefined) props.hs_pipeline_stage = input.hs_pipeline_stage
|
|
7
|
+
|
|
8
|
+
const body = { properties: props }
|
|
9
|
+
const res = await integration.fetch(`/crm/v3/objects/tickets/${encodeURIComponent(input.id)}`, {
|
|
10
|
+
method: 'PATCH',
|
|
11
|
+
body,
|
|
12
|
+
})
|
|
13
|
+
return await res.json()
|
|
14
|
+
}
|
|
15
|
+
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hubspot",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"tools": [
|
|
5
|
+
{
|
|
6
|
+
"name": "search_contacts",
|
|
7
|
+
"description": "Search for contacts. Use query for simple free-text search, and filters for precise property-based filtering. Returns a compact list of matching contacts.",
|
|
8
|
+
"inputSchema": "schemas/search_contacts.json",
|
|
9
|
+
"handler": "handlers/search_contacts.js",
|
|
10
|
+
"scope": "read"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "get_contact",
|
|
14
|
+
"description": "Get a contact by ID. Use properties to request specific fields, and associations to include linked object IDs (e.g. companies, deals, tickets).",
|
|
15
|
+
"inputSchema": "schemas/get_contact.json",
|
|
16
|
+
"handler": "handlers/get_contact.js",
|
|
17
|
+
"scope": "read"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "create_contact",
|
|
21
|
+
"description": "Create a contact. Provide common fields (firstname/lastname/email) and/or a properties map for other HubSpot contact properties.",
|
|
22
|
+
"inputSchema": "schemas/create_contact.json",
|
|
23
|
+
"handler": "handlers/create_contact.js",
|
|
24
|
+
"scope": "write"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "update_contact",
|
|
28
|
+
"description": "Update a contact by ID. Provide any fields to update as common fields and/or in the properties map. Fields not provided are unchanged.",
|
|
29
|
+
"inputSchema": "schemas/update_contact.json",
|
|
30
|
+
"handler": "handlers/update_contact.js",
|
|
31
|
+
"scope": "write"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "archive_contact",
|
|
35
|
+
"description": "Archive (delete) a contact by ID. This moves the record to the recycle bin.",
|
|
36
|
+
"inputSchema": "schemas/archive_contact.json",
|
|
37
|
+
"handler": "handlers/archive_contact.js",
|
|
38
|
+
"scope": "write"
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
{
|
|
42
|
+
"name": "search_companies",
|
|
43
|
+
"description": "Search for companies. Use query for free-text search and filters for property-based filtering. Returns a compact list of matching companies.",
|
|
44
|
+
"inputSchema": "schemas/search_companies.json",
|
|
45
|
+
"handler": "handlers/search_companies.js",
|
|
46
|
+
"scope": "read"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "get_company",
|
|
50
|
+
"description": "Get a company by ID. Use properties to request specific fields, and associations to include linked object IDs (e.g. contacts, deals, tickets).",
|
|
51
|
+
"inputSchema": "schemas/get_company.json",
|
|
52
|
+
"handler": "handlers/get_company.js",
|
|
53
|
+
"scope": "read"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "create_company",
|
|
57
|
+
"description": "Create a company. Provide name/domain and/or a properties map for other HubSpot company properties.",
|
|
58
|
+
"inputSchema": "schemas/create_company.json",
|
|
59
|
+
"handler": "handlers/create_company.js",
|
|
60
|
+
"scope": "write"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "update_company",
|
|
64
|
+
"description": "Update a company by ID. Provide any fields to update as common fields and/or in the properties map. Fields not provided are unchanged.",
|
|
65
|
+
"inputSchema": "schemas/update_company.json",
|
|
66
|
+
"handler": "handlers/update_company.js",
|
|
67
|
+
"scope": "write"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "archive_company",
|
|
71
|
+
"description": "Archive (delete) a company by ID. This moves the record to the recycle bin.",
|
|
72
|
+
"inputSchema": "schemas/archive_company.json",
|
|
73
|
+
"handler": "handlers/archive_company.js",
|
|
74
|
+
"scope": "write"
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
{
|
|
78
|
+
"name": "list_owners",
|
|
79
|
+
"description": "List CRM owners (users) available in the HubSpot account. Useful for assigning owners to records via hubspot_owner_id.",
|
|
80
|
+
"inputSchema": "schemas/list_owners.json",
|
|
81
|
+
"handler": "handlers/list_owners.js",
|
|
82
|
+
"scope": "read"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "list_properties",
|
|
86
|
+
"description": "List properties for an object type (e.g. contacts, companies, deals, tickets). Use this to discover valid property names for filtering and updates.",
|
|
87
|
+
"inputSchema": "schemas/list_properties.json",
|
|
88
|
+
"handler": "handlers/list_properties.js",
|
|
89
|
+
"scope": "read"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"name": "list_pipelines",
|
|
93
|
+
"description": "List pipelines and stages for an object type (commonly deals or tickets). Use this to find valid pipeline and stage IDs before creating/updating records.",
|
|
94
|
+
"inputSchema": "schemas/list_pipelines.json",
|
|
95
|
+
"handler": "handlers/list_pipelines.js",
|
|
96
|
+
"scope": "read"
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
{
|
|
100
|
+
"name": "get_associations",
|
|
101
|
+
"description": "Get associations from a CRM record to another object type. Returns the associated record IDs (paginated).",
|
|
102
|
+
"inputSchema": "schemas/get_associations.json",
|
|
103
|
+
"handler": "handlers/get_associations.js",
|
|
104
|
+
"scope": "read"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "create_association",
|
|
108
|
+
"description": "Create a default (unlabeled) association between two CRM records. Example: associate a contact with a company or a deal with a contact.",
|
|
109
|
+
"inputSchema": "schemas/create_association.json",
|
|
110
|
+
"handler": "handlers/create_association.js",
|
|
111
|
+
"scope": "write"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "remove_association",
|
|
115
|
+
"description": "Remove an association between two CRM records. This uses HubSpot's association batch archive endpoint under the hood.",
|
|
116
|
+
"inputSchema": "schemas/remove_association.json",
|
|
117
|
+
"handler": "handlers/remove_association.js",
|
|
118
|
+
"scope": "write"
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
{
|
|
122
|
+
"name": "search_deals",
|
|
123
|
+
"description": "Search for deals. Use query for free-text search and filters for property-based filtering (e.g. pipeline, dealstage, amount).",
|
|
124
|
+
"inputSchema": "schemas/search_deals.json",
|
|
125
|
+
"handler": "handlers/search_deals.js",
|
|
126
|
+
"scope": "read"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "get_deal",
|
|
130
|
+
"description": "Get a deal by ID. Use properties to request specific fields, and associations to include linked object IDs.",
|
|
131
|
+
"inputSchema": "schemas/get_deal.json",
|
|
132
|
+
"handler": "handlers/get_deal.js",
|
|
133
|
+
"scope": "read"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "create_deal",
|
|
137
|
+
"description": "Create a deal. Provide dealname/amount/pipeline/dealstage and/or a properties map for other HubSpot deal properties.",
|
|
138
|
+
"inputSchema": "schemas/create_deal.json",
|
|
139
|
+
"handler": "handlers/create_deal.js",
|
|
140
|
+
"scope": "write"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"name": "update_deal",
|
|
144
|
+
"description": "Update a deal by ID. Common updates include moving stages via dealstage. Fields not provided are unchanged.",
|
|
145
|
+
"inputSchema": "schemas/update_deal.json",
|
|
146
|
+
"handler": "handlers/update_deal.js",
|
|
147
|
+
"scope": "write"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"name": "archive_deal",
|
|
151
|
+
"description": "Archive (delete) a deal by ID. This moves the record to the recycle bin.",
|
|
152
|
+
"inputSchema": "schemas/archive_deal.json",
|
|
153
|
+
"handler": "handlers/archive_deal.js",
|
|
154
|
+
"scope": "write"
|
|
155
|
+
},
|
|
156
|
+
|
|
157
|
+
{
|
|
158
|
+
"name": "search_tickets",
|
|
159
|
+
"description": "Search for tickets. Use query for free-text search and filters for property-based filtering (e.g. hs_pipeline, hs_pipeline_stage, priority).",
|
|
160
|
+
"inputSchema": "schemas/search_tickets.json",
|
|
161
|
+
"handler": "handlers/search_tickets.js",
|
|
162
|
+
"scope": "read"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "get_ticket",
|
|
166
|
+
"description": "Get a ticket by ID. Use properties to request specific fields, and associations to include linked object IDs.",
|
|
167
|
+
"inputSchema": "schemas/get_ticket.json",
|
|
168
|
+
"handler": "handlers/get_ticket.js",
|
|
169
|
+
"scope": "read"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "create_ticket",
|
|
173
|
+
"description": "Create a ticket. Provide subject/content/pipeline/stage and/or a properties map for other HubSpot ticket properties.",
|
|
174
|
+
"inputSchema": "schemas/create_ticket.json",
|
|
175
|
+
"handler": "handlers/create_ticket.js",
|
|
176
|
+
"scope": "write"
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "update_ticket",
|
|
180
|
+
"description": "Update a ticket by ID. Common updates include changing hs_pipeline_stage. Fields not provided are unchanged.",
|
|
181
|
+
"inputSchema": "schemas/update_ticket.json",
|
|
182
|
+
"handler": "handlers/update_ticket.js",
|
|
183
|
+
"scope": "write"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"name": "archive_ticket",
|
|
187
|
+
"description": "Archive (delete) a ticket by ID. This moves the record to the recycle bin.",
|
|
188
|
+
"inputSchema": "schemas/archive_ticket.json",
|
|
189
|
+
"handler": "handlers/archive_ticket.js",
|
|
190
|
+
"scope": "write"
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
{
|
|
194
|
+
"name": "search_notes",
|
|
195
|
+
"description": "Search notes. Use query for free-text search and filters for precise property-based filtering.",
|
|
196
|
+
"inputSchema": "schemas/search_notes.json",
|
|
197
|
+
"handler": "handlers/search_notes.js",
|
|
198
|
+
"scope": "read"
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"name": "create_note",
|
|
202
|
+
"description": "Create a note and (optionally) associate it to one or more CRM records (contacts, companies, deals, tickets). Provide body text; the handler sets hs_note_body and hs_timestamp automatically unless overridden.",
|
|
203
|
+
"inputSchema": "schemas/create_note.json",
|
|
204
|
+
"handler": "handlers/create_note.js",
|
|
205
|
+
"scope": "write"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"name": "search_tasks",
|
|
209
|
+
"description": "Search tasks. Use query for free-text search and filters for precise property-based filtering.",
|
|
210
|
+
"inputSchema": "schemas/search_tasks.json",
|
|
211
|
+
"handler": "handlers/search_tasks.js",
|
|
212
|
+
"scope": "read"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"name": "create_task",
|
|
216
|
+
"description": "Create a task and (optionally) associate it to one or more CRM records. Provide subject/body/status/priority and a due timestamp; the handler maps these to HubSpot task properties.",
|
|
217
|
+
"inputSchema": "schemas/create_task.json",
|
|
218
|
+
"handler": "handlers/create_task.js",
|
|
219
|
+
"scope": "write"
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"name": "update_task",
|
|
223
|
+
"description": "Update a task by ID. Common updates include setting hs_task_status to COMPLETED.",
|
|
224
|
+
"inputSchema": "schemas/update_task.json",
|
|
225
|
+
"handler": "handlers/update_task.js",
|
|
226
|
+
"scope": "write"
|
|
227
|
+
}
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
## HubSpot guidance
|
|
2
|
+
|
|
3
|
+
This integration uses HubSpot CRM v3 object endpoints and CRM v4 association endpoints.
|
|
4
|
+
|
|
5
|
+
- Prefer `search_*` tools for discovery (they support free-text `query` and structured `filters`).
|
|
6
|
+
- Use `get_*` tools when you already have an object ID and want full details / associations.
|
|
7
|
+
|
|
8
|
+
### Search filters
|
|
9
|
+
|
|
10
|
+
All `search_*` tools accept:
|
|
11
|
+
|
|
12
|
+
- `query`: free-text search (optional)
|
|
13
|
+
- `filters`: property-based filtering. Each filter is `{ propertyName, operator, value? }`.
|
|
14
|
+
|
|
15
|
+
Common operators:
|
|
16
|
+
|
|
17
|
+
- `EQ`, `NEQ`
|
|
18
|
+
- `LT`, `LTE`, `GT`, `GTE` (numbers or millisecond timestamps)
|
|
19
|
+
- `CONTAINS_TOKEN` (tokenized contains)
|
|
20
|
+
- `HAS_PROPERTY`, `NOT_HAS_PROPERTY` (value ignored)
|
|
21
|
+
- `BETWEEN` (pass `value` as a string `"low,high"`; timestamps in ms recommended)
|
|
22
|
+
|
|
23
|
+
### Common property names (quick reference)
|
|
24
|
+
|
|
25
|
+
Contacts:
|
|
26
|
+
- `firstname`, `lastname`, `email`
|
|
27
|
+
|
|
28
|
+
Companies:
|
|
29
|
+
- `name`, `domain`
|
|
30
|
+
|
|
31
|
+
Deals:
|
|
32
|
+
- `dealname`, `amount`, `pipeline`, `dealstage`, `closedate`
|
|
33
|
+
|
|
34
|
+
Tickets:
|
|
35
|
+
- `subject`, `content`, `hs_pipeline`, `hs_pipeline_stage`
|
|
36
|
+
|
|
37
|
+
### Pipelines and stages (deals/tickets)
|
|
38
|
+
|
|
39
|
+
Pipelines and stages are stored as IDs (not human-friendly names). Recommended workflow:
|
|
40
|
+
|
|
41
|
+
1. Call `list_pipelines` with `objectType: "deals"` or `objectType: "tickets"`.
|
|
42
|
+
2. Pick a pipeline ID and stage ID from the response.
|
|
43
|
+
3. Use those IDs when calling `create_deal` / `update_deal` (via `pipeline` / `dealstage`) or `create_ticket` / `update_ticket` (via `hs_pipeline` / `hs_pipeline_stage`).
|
|
44
|
+
|
|
45
|
+
### Associations
|
|
46
|
+
|
|
47
|
+
- Use `get_associations` to list linked records (returns associated IDs).
|
|
48
|
+
- Use `create_association` to link two records (default/unlabeled association).
|
|
49
|
+
- Use `remove_association` to unlink records.
|
|
50
|
+
|
|
51
|
+
### Engagement objects
|
|
52
|
+
|
|
53
|
+
Notes:
|
|
54
|
+
- Content: `hs_note_body`
|
|
55
|
+
- Timestamp: `hs_timestamp` (milliseconds)
|
|
56
|
+
|
|
57
|
+
Tasks:
|
|
58
|
+
- Subject: `hs_task_subject`
|
|
59
|
+
- Body: `hs_task_body`
|
|
60
|
+
- Status: `hs_task_status` (`NOT_STARTED` or `COMPLETED`)
|
|
61
|
+
- Priority: `hs_task_priority` (`LOW`, `MEDIUM`, `HIGH`)
|
|
62
|
+
- Due timestamp: `hs_timestamp` (milliseconds)
|
|
63
|
+
|
|
64
|
+
The `create_note` and `create_task` tools can also associate the engagement to CRM records in the same call.
|
|
65
|
+
|
|
66
|
+
### Pagination
|
|
67
|
+
|
|
68
|
+
HubSpot uses cursor-based pagination. When a response includes `paging.next.after`, pass that value back as `after` in your next call.
|
|
69
|
+
|