@graph8/sdk 0.251.0 → 0.260.0
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/README.md +9 -2
- package/dist/cli.js +216 -0
- package/dist/index.d.mts +104 -7
- package/dist/index.d.ts +104 -7
- package/dist/index.js +44 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +44 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +102 -7
- package/dist/react.d.ts +102 -7
- package/dist/react.js +62 -11
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +53 -12
- package/dist/react.mjs.map +1 -1
- package/dist/types/README.md +7 -0
- package/dist/types/agency.d.ts +20 -0
- package/dist/types/agentSetup.d.ts +57 -0
- package/dist/types/api.d.ts +127 -0
- package/dist/types/appClient.d.ts +99 -0
- package/dist/types/appPlatform.d.ts +269 -0
- package/dist/types/appTokens.d.ts +125 -0
- package/dist/types/apps.d.ts +130 -0
- package/dist/types/audiences.d.ts +88 -0
- package/dist/types/calendar.d.ts +55 -0
- package/dist/types/campaigns.d.ts +61 -0
- package/dist/types/chat.d.ts +35 -0
- package/dist/types/cli.d.ts +14 -0
- package/dist/types/companies.d.ts +123 -0
- package/dist/types/contacts.d.ts +200 -0
- package/dist/types/copilot.d.ts +31 -0
- package/dist/types/core.d.ts +1052 -0
- package/dist/types/deals.d.ts +215 -0
- package/dist/types/enrich.d.ts +51 -0
- package/dist/types/fields.d.ts +84 -0
- package/dist/types/forms.d.ts +16 -0
- package/dist/types/http.d.ts +141 -0
- package/dist/types/inbox.d.ts +123 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/intent.d.ts +196 -0
- package/dist/types/lists.d.ts +44 -0
- package/dist/types/mailboxes.d.ts +240 -0
- package/dist/types/marketplace.d.ts +62 -0
- package/dist/types/meetings.d.ts +70 -0
- package/dist/types/newsletter.d.ts +212 -0
- package/dist/types/notes.d.ts +57 -0
- package/dist/types/objects.d.ts +281 -0
- package/dist/types/pipelines.d.ts +135 -0
- package/dist/types/quotes.d.ts +143 -0
- package/dist/types/react.d.ts +978 -0
- package/dist/types/search.d.ts +99 -0
- package/dist/types/sequences.d.ts +255 -0
- package/dist/types/signals.d.ts +28 -0
- package/dist/types/skills.d.ts +176 -0
- package/dist/types/snippet.d.ts +24 -0
- package/dist/types/studio.d.ts +161 -0
- package/dist/types/tasks.d.ts +101 -0
- package/dist/types/types.d.ts +45 -0
- package/dist/types/utils.d.ts +21 -0
- package/dist/types/version.d.ts +10 -0
- package/dist/types/visitors.d.ts +29 -0
- package/dist/types/voice.d.ts +304 -0
- package/dist/types/webhooks.d.ts +71 -0
- package/dist/types/workflows.d.ts +229 -0
- package/docs/agents.md +748 -0
- package/docs/api/README.md +165 -0
- package/docs/api/accounts.d.ts +396 -0
- package/docs/api/accounts.md +644 -0
- package/docs/api/adCampaigns.d.ts +707 -0
- package/docs/api/adCampaigns.md +1091 -0
- package/docs/api/adCreatives.d.ts +996 -0
- package/docs/api/adCreatives.md +1708 -0
- package/docs/api/agency.d.ts +556 -0
- package/docs/api/agency.md +845 -0
- package/docs/api/agent.d.ts +330 -0
- package/docs/api/agent.md +514 -0
- package/docs/api/agents.d.ts +1622 -0
- package/docs/api/agents.md +2860 -0
- package/docs/api/aiInbox.d.ts +1984 -0
- package/docs/api/aiInbox.md +3490 -0
- package/docs/api/analytics.d.ts +1273 -0
- package/docs/api/analytics.md +2095 -0
- package/docs/api/apiKeys.d.ts +252 -0
- package/docs/api/apiKeys.md +318 -0
- package/docs/api/appDeployments.d.ts +236 -0
- package/docs/api/appDeployments.md +471 -0
- package/docs/api/appDomains.d.ts +171 -0
- package/docs/api/appDomains.md +281 -0
- package/docs/api/appLogs.d.ts +120 -0
- package/docs/api/appLogs.md +159 -0
- package/docs/api/appObjects.d.ts +415 -0
- package/docs/api/appObjects.md +568 -0
- package/docs/api/appPages.d.ts +557 -0
- package/docs/api/appPages.md +796 -0
- package/docs/api/appPlatformTokens.d.ts +123 -0
- package/docs/api/appPlatformTokens.md +172 -0
- package/docs/api/appointments.d.ts +2361 -0
- package/docs/api/appointments.md +3917 -0
- package/docs/api/apps.d.ts +822 -0
- package/docs/api/apps.md +1342 -0
- package/docs/api/assertUpsert.d.ts +286 -0
- package/docs/api/assertUpsert.md +370 -0
- package/docs/api/audienceSyncs.d.ts +259 -0
- package/docs/api/audienceSyncs.md +395 -0
- package/docs/api/brandKit.d.ts +686 -0
- package/docs/api/brandKit.md +1133 -0
- package/docs/api/bugReports.d.ts +181 -0
- package/docs/api/bugReports.md +268 -0
- package/docs/api/by-path.md +3260 -0
- package/docs/api/calendarInvites.d.ts +117 -0
- package/docs/api/calendarInvites.md +148 -0
- package/docs/api/campaignWorkflows.d.ts +152 -0
- package/docs/api/campaignWorkflows.md +200 -0
- package/docs/api/campaigns.d.ts +721 -0
- package/docs/api/campaigns.md +1236 -0
- package/docs/api/channels.d.ts +171 -0
- package/docs/api/channels.md +235 -0
- package/docs/api/cliCampaigns.d.ts +205 -0
- package/docs/api/cliCampaigns.md +256 -0
- package/docs/api/cliPipelines.d.ts +324 -0
- package/docs/api/cliPipelines.md +562 -0
- package/docs/api/clickHouse.d.ts +115 -0
- package/docs/api/clickHouse.md +138 -0
- package/docs/api/companies.d.ts +1636 -0
- package/docs/api/companies.md +2211 -0
- package/docs/api/companyIntelligence.d.ts +299 -0
- package/docs/api/companyIntelligence.md +488 -0
- package/docs/api/contacts.d.ts +2173 -0
- package/docs/api/contacts.md +3143 -0
- package/docs/api/content.d.ts +968 -0
- package/docs/api/content.md +1667 -0
- package/docs/api/contentGridSkills.d.ts +177 -0
- package/docs/api/contentGridSkills.md +271 -0
- package/docs/api/copilot.d.ts +1017 -0
- package/docs/api/copilot.md +1765 -0
- package/docs/api/crmSyncs.d.ts +215 -0
- package/docs/api/crmSyncs.md +301 -0
- package/docs/api/customerSuccess.d.ts +491 -0
- package/docs/api/customerSuccess.md +776 -0
- package/docs/api/deals.d.ts +1696 -0
- package/docs/api/deals.md +2432 -0
- package/docs/api/deliverability.d.ts +418 -0
- package/docs/api/deliverability.md +677 -0
- package/docs/api/desk.d.ts +1765 -0
- package/docs/api/desk.md +3007 -0
- package/docs/api/dialer.d.ts +1185 -0
- package/docs/api/dialer.md +2166 -0
- package/docs/api/dialerAnalytics.d.ts +187 -0
- package/docs/api/dialerAnalytics.md +257 -0
- package/docs/api/documents.d.ts +895 -0
- package/docs/api/documents.md +1440 -0
- package/docs/api/duplicates.d.ts +195 -0
- package/docs/api/duplicates.md +315 -0
- package/docs/api/eSign.d.ts +38 -0
- package/docs/api/eSign.md +54 -0
- package/docs/api/eSignature.d.ts +242 -0
- package/docs/api/eSignature.md +341 -0
- package/docs/api/enrichment.d.ts +3207 -0
- package/docs/api/enrichment.md +5225 -0
- package/docs/api/events.d.ts +115 -0
- package/docs/api/events.md +105 -0
- package/docs/api/fields.d.ts +482 -0
- package/docs/api/fields.md +566 -0
- package/docs/api/forms.d.ts +1012 -0
- package/docs/api/forms.md +1542 -0
- package/docs/api/gtmCampaigns.d.ts +662 -0
- package/docs/api/gtmCampaigns.md +1044 -0
- package/docs/api/gtmContext.d.ts +1187 -0
- package/docs/api/gtmContext.md +2112 -0
- package/docs/api/gtmDeliverability.d.ts +60 -0
- package/docs/api/gtmDeliverability.md +63 -0
- package/docs/api/gtmKnowledgeBase.d.ts +76 -0
- package/docs/api/gtmKnowledgeBase.md +91 -0
- package/docs/api/gtmLaunchHelpers.d.ts +123 -0
- package/docs/api/gtmLaunchHelpers.md +148 -0
- package/docs/api/gtmLibrary.d.ts +448 -0
- package/docs/api/gtmLibrary.md +780 -0
- package/docs/api/health.d.ts +39 -0
- package/docs/api/health.md +58 -0
- package/docs/api/imageLibrary.d.ts +341 -0
- package/docs/api/imageLibrary.md +569 -0
- package/docs/api/imports.d.ts +157 -0
- package/docs/api/imports.md +174 -0
- package/docs/api/inbox.d.ts +709 -0
- package/docs/api/inbox.md +1067 -0
- package/docs/api/install.d.ts +213 -0
- package/docs/api/install.md +317 -0
- package/docs/api/installedApps.d.ts +131 -0
- package/docs/api/installedApps.md +241 -0
- package/docs/api/integrationStatus.d.ts +142 -0
- package/docs/api/integrationStatus.md +205 -0
- package/docs/api/integrations.d.ts +2327 -0
- package/docs/api/integrations.md +3791 -0
- package/docs/api/intent.d.ts +482 -0
- package/docs/api/intent.md +858 -0
- package/docs/api/knowledge.d.ts +501 -0
- package/docs/api/knowledge.md +843 -0
- package/docs/api/knowledgeBase.d.ts +84 -0
- package/docs/api/knowledgeBase.md +96 -0
- package/docs/api/landingPages.d.ts +1411 -0
- package/docs/api/landingPages.md +2488 -0
- package/docs/api/leads.d.ts +133 -0
- package/docs/api/leads.md +180 -0
- package/docs/api/library.d.ts +217 -0
- package/docs/api/library.md +338 -0
- package/docs/api/linkedIn.d.ts +227 -0
- package/docs/api/linkedIn.md +289 -0
- package/docs/api/linkedInOutreach.d.ts +727 -0
- package/docs/api/linkedInOutreach.md +990 -0
- package/docs/api/lists.d.ts +1106 -0
- package/docs/api/lists.md +1609 -0
- package/docs/api/logs.d.ts +71 -0
- package/docs/api/logs.md +70 -0
- package/docs/api/mailboxes.d.ts +1050 -0
- package/docs/api/mailboxes.md +1690 -0
- package/docs/api/marketingIntelligence.d.ts +256 -0
- package/docs/api/marketingIntelligence.md +454 -0
- package/docs/api/marketplace.d.ts +3173 -0
- package/docs/api/marketplace.md +5953 -0
- package/docs/api/mcp.d.ts +69 -0
- package/docs/api/mcp.md +69 -0
- package/docs/api/me.d.ts +54 -0
- package/docs/api/me.md +56 -0
- package/docs/api/meetings.d.ts +539 -0
- package/docs/api/meetings.md +747 -0
- package/docs/api/newsletter.d.ts +1613 -0
- package/docs/api/newsletter.md +2746 -0
- package/docs/api/notes.d.ts +517 -0
- package/docs/api/notes.md +888 -0
- package/docs/api/notifications.d.ts +94 -0
- package/docs/api/notifications.md +105 -0
- package/docs/api/objects.d.ts +621 -0
- package/docs/api/objects.md +1098 -0
- package/docs/api/openSearch.d.ts +234 -0
- package/docs/api/openSearch.md +297 -0
- package/docs/api/ops.d.ts +299 -0
- package/docs/api/ops.md +339 -0
- package/docs/api/orgGovernance.d.ts +393 -0
- package/docs/api/orgGovernance.md +623 -0
- package/docs/api/orgVideos.d.ts +184 -0
- package/docs/api/orgVideos.md +252 -0
- package/docs/api/organizationSettings.d.ts +626 -0
- package/docs/api/organizationSettings.md +911 -0
- package/docs/api/phoneNumbers.d.ts +484 -0
- package/docs/api/phoneNumbers.md +777 -0
- package/docs/api/profile.d.ts +329 -0
- package/docs/api/profile.md +540 -0
- package/docs/api/programmaticPages.d.ts +400 -0
- package/docs/api/programmaticPages.md +626 -0
- package/docs/api/providerDomains.d.ts +866 -0
- package/docs/api/providerDomains.md +1446 -0
- package/docs/api/providerUsage.d.ts +129 -0
- package/docs/api/providerUsage.md +186 -0
- package/docs/api/public.d.ts +69 -0
- package/docs/api/public.md +78 -0
- package/docs/api/publicCopilot.d.ts +67 -0
- package/docs/api/publicCopilot.md +80 -0
- package/docs/api/publicSignals.d.ts +66 -0
- package/docs/api/publicSignals.md +71 -0
- package/docs/api/publicVisitors.d.ts +97 -0
- package/docs/api/publicVisitors.md +118 -0
- package/docs/api/quotes.d.ts +1564 -0
- package/docs/api/quotes.md +2553 -0
- package/docs/api/radar.d.ts +808 -0
- package/docs/api/radar.md +1431 -0
- package/docs/api/radarReports.d.ts +208 -0
- package/docs/api/radarReports.md +306 -0
- package/docs/api/recordRoles.d.ts +143 -0
- package/docs/api/recordRoles.md +175 -0
- package/docs/api/repos.d.ts +146 -0
- package/docs/api/repos.md +211 -0
- package/docs/api/research.d.ts +295 -0
- package/docs/api/research.md +534 -0
- package/docs/api/revenue.d.ts +402 -0
- package/docs/api/revenue.md +608 -0
- package/docs/api/revenueAnalytics.d.ts +147 -0
- package/docs/api/revenueAnalytics.md +212 -0
- package/docs/api/revenueLifecycle.d.ts +207 -0
- package/docs/api/revenueLifecycle.md +274 -0
- package/docs/api/revenueRecords.d.ts +372 -0
- package/docs/api/revenueRecords.md +563 -0
- package/docs/api/roles.d.ts +431 -0
- package/docs/api/roles.md +812 -0
- package/docs/api/salesCoach.d.ts +877 -0
- package/docs/api/salesCoach.md +1540 -0
- package/docs/api/sandbox.d.ts +210 -0
- package/docs/api/sandbox.md +380 -0
- package/docs/api/scans.d.ts +104 -0
- package/docs/api/scans.md +136 -0
- package/docs/api/scheduleBuy.d.ts +293 -0
- package/docs/api/scheduleBuy.md +431 -0
- package/docs/api/scraping.d.ts +266 -0
- package/docs/api/scraping.md +383 -0
- package/docs/api/sdrAnalytics.d.ts +138 -0
- package/docs/api/sdrAnalytics.md +246 -0
- package/docs/api/search.d.ts +598 -0
- package/docs/api/search.md +866 -0
- package/docs/api/seo.d.ts +447 -0
- package/docs/api/seo.md +660 -0
- package/docs/api/sequenceLifecycle.d.ts +439 -0
- package/docs/api/sequenceLifecycle.md +513 -0
- package/docs/api/sequences.d.ts +1936 -0
- package/docs/api/sequences.md +3232 -0
- package/docs/api/settings.d.ts +448 -0
- package/docs/api/settings.md +731 -0
- package/docs/api/signals.d.ts +1441 -0
- package/docs/api/signals.md +2526 -0
- package/docs/api/signatures.d.ts +719 -0
- package/docs/api/signatures.md +1247 -0
- package/docs/api/skills.d.ts +230 -0
- package/docs/api/skills.md +466 -0
- package/docs/api/snippet.d.ts +85 -0
- package/docs/api/snippet.md +106 -0
- package/docs/api/socialPublishing.d.ts +824 -0
- package/docs/api/socialPublishing.md +1245 -0
- package/docs/api/studioDocuments.d.ts +244 -0
- package/docs/api/studioDocuments.md +348 -0
- package/docs/api/support.d.ts +90 -0
- package/docs/api/support.md +76 -0
- package/docs/api/suppressions.d.ts +241 -0
- package/docs/api/suppressions.md +343 -0
- package/docs/api/surveys.d.ts +847 -0
- package/docs/api/surveys.md +1223 -0
- package/docs/api/tasks.d.ts +813 -0
- package/docs/api/tasks.md +1344 -0
- package/docs/api/teamMembers.d.ts +668 -0
- package/docs/api/teamMembers.md +1040 -0
- package/docs/api/teams.d.ts +784 -0
- package/docs/api/teams.md +1395 -0
- package/docs/api/usage.d.ts +277 -0
- package/docs/api/usage.md +389 -0
- package/docs/api/visitors.d.ts +690 -0
- package/docs/api/visitors.md +1075 -0
- package/docs/api/voice.d.ts +4661 -0
- package/docs/api/voice.md +7905 -0
- package/docs/api/webAnalytics.d.ts +964 -0
- package/docs/api/webAnalytics.md +1452 -0
- package/docs/api/webChat.d.ts +1704 -0
- package/docs/api/webChat.md +2048 -0
- package/docs/api/webhooks.d.ts +251 -0
- package/docs/api/webhooks.md +386 -0
- package/docs/api/websiteEditor.d.ts +324 -0
- package/docs/api/websiteEditor.md +517 -0
- package/docs/api/work.d.ts +2298 -0
- package/docs/api/work.md +3096 -0
- package/docs/api/workbench.d.ts +2962 -0
- package/docs/api/workbench.md +4884 -0
- package/docs/api/workflows.d.ts +1218 -0
- package/docs/api/workflows.md +2302 -0
- package/docs/sdk-clients.md +4339 -0
- package/package.json +10 -3
|
@@ -0,0 +1,3490 @@
|
|
|
1
|
+
<!-- Generated by sdk/js/scripts/generate-agent-docs.ts from developer-contract/openapi.json. Regenerated on every build. -->
|
|
2
|
+
|
|
3
|
+
# `g8.api.aiInbox`: AI Inbox
|
|
4
|
+
|
|
5
|
+
79 operations (32 read, 26 write, 10 destructive, 1 billable, 10 external).
|
|
6
|
+
|
|
7
|
+
No hand-written client covers this area. Call it through `g8.api.aiInbox.*` as shown below, or by operationId with `g8.api.call(operationId, input)`.
|
|
8
|
+
|
|
9
|
+
Every example below assumes this setup (server-side, API key):
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { g8 } from "@graph8/sdk";
|
|
13
|
+
|
|
14
|
+
g8.init({ apiKey: process.env.G8_API_KEY! });
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Example values are placeholders that match each field's type. Only required fields are shown. Every example is type-checked against the SDK in CI.
|
|
18
|
+
|
|
19
|
+
Exact TypeScript types for every operation on this page, and every schema they use: [aiInbox.d.ts](aiInbox.d.ts).
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
| Call | HTTP | Tier | Scope | Summary |
|
|
24
|
+
|---|---|---|---|---|
|
|
25
|
+
| [`activateInboxMailboxes`](#op-activateinboxmailboxes) | `POST /api/v1/inbox/mailboxes/activate` | external | `inbox:run` | Activate Inbox Mailboxes |
|
|
26
|
+
| [`addChannelComment`](#op-addchannelcomment) | `POST /api/v1/inbox/channels/{channel_id}/comments` | write | `inbox:write` | Add Channel Comment |
|
|
27
|
+
| [`addChannelTag`](#op-addchanneltag) | `POST /api/v1/inbox/channels/{channel_id}/tags` | write | `inbox:write` | Add Channel Tag |
|
|
28
|
+
| [`addMailboxToWorkspace`](#op-addmailboxtoworkspace) | `POST /api/v1/inbox/workspaces/{workspace_id}/mailboxes` | write | `inbox:write` | Add Mailbox To Workspace |
|
|
29
|
+
| [`assignChannel`](#op-assignchannel) | `POST /api/v1/inbox/channels/{channel_id}/assign` | write | `inbox:write` | Assign Channel |
|
|
30
|
+
| [`blockInboxSender`](#op-blockinboxsender) | `POST /api/v1/inbox/blocked-senders` | write | `inbox:write` | Block Inbox Sender |
|
|
31
|
+
| [`clearMeetingTranscriptLink`](#op-clearmeetingtranscriptlink) | `DELETE /api/v1/inbox/meetings/{meeting_id}/transcript-link` | destructive | `meetings:delete` | Clear Meeting Transcript Link |
|
|
32
|
+
| [`composeInboxEmail`](#op-composeinboxemail) | `POST /api/v1/inbox/emails/compose` | external | `inbox:run` | Compose Inbox Email |
|
|
33
|
+
| [`composeInboxLinkedinMessage`](#op-composeinboxlinkedinmessage) | `POST /api/v1/inbox/linkedin/compose` | external | `inbox:run` | Compose Inbox Linkedin Message |
|
|
34
|
+
| [`composeInboxSms`](#op-composeinboxsms) | `POST /api/v1/inbox/sms/compose` | external | `inbox:run` | Compose Inbox Sms |
|
|
35
|
+
| [`createInboxAgent`](#op-createinboxagent) | `POST /api/v1/inbox/agents` | write | `inbox:write` | Create Inbox Agent |
|
|
36
|
+
| [`createInboxTag`](#op-createinboxtag) | `POST /api/v1/inbox/tags` | write | `inbox:write` | Create Inbox Tag |
|
|
37
|
+
| [`createMeetingTask`](#op-createmeetingtask) | `POST /api/v1/inbox/meetings/{meeting_id}/tasks` | write | `meetings:write` | Create Meeting Task |
|
|
38
|
+
| [`deactivateInboxMailboxes`](#op-deactivateinboxmailboxes) | `POST /api/v1/inbox/mailboxes/deactivate` | write | `inbox:write` | Deactivate Inbox Mailboxes |
|
|
39
|
+
| [`deleteInboxEmailDraft`](#op-deleteinboxemaildraft) | `DELETE /api/v1/inbox/drafts/emails/{draft_id}` | destructive | `inbox:delete` | Delete Inbox Email Draft |
|
|
40
|
+
| [`deleteInboxLinkedinDraft`](#op-deleteinboxlinkedindraft) | `DELETE /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/draft` | destructive | `inbox:delete` | Delete Inbox Linkedin Draft |
|
|
41
|
+
| [`deleteInboxTag`](#op-deleteinboxtag) | `DELETE /api/v1/inbox/tags/{tag_id}` | destructive | `inbox:delete` | Delete Inbox Tag |
|
|
42
|
+
| [`deleteMeetingTask`](#op-deletemeetingtask) | `DELETE /api/v1/inbox/meetings/tasks/{task_id}` | destructive | `meetings:delete` | Delete Meeting Task |
|
|
43
|
+
| [`disableInboxLinkedinAccount`](#op-disableinboxlinkedinaccount) | `POST /api/v1/inbox/linkedin/accounts/{account_id}/disable` | write | `inbox:write` | Disable Inbox Linkedin Account |
|
|
44
|
+
| [`downloadInboxAttachment`](#op-downloadinboxattachment) | `GET /api/v1/inbox/attachments/{token}` | read | `inbox:read` | Download Inbox Attachment |
|
|
45
|
+
| [`enableInboxLinkedinAccount`](#op-enableinboxlinkedinaccount) | `POST /api/v1/inbox/linkedin/accounts/{account_id}/enable` | external | `inbox:run` | Enable Inbox Linkedin Account |
|
|
46
|
+
| [`generateInboxDraft`](#op-generateinboxdraft) | `POST /api/v1/inbox/drafts/generate` | billable | `inbox:run` | Generate Inbox Draft |
|
|
47
|
+
| [`getAssigneeEligibility`](#op-getassigneeeligibility) | `GET /api/v1/inbox/channels/{channel_id}/assignee-eligibility` | read | `inbox:read` | Get Assignee Eligibility |
|
|
48
|
+
| [`getInboxCallResult`](#op-getinboxcallresult) | `GET /api/v1/inbox/call-results/{call_id}` | read | `inbox:read` | Get Inbox Call Result |
|
|
49
|
+
| [`getInboxChannel`](#op-getinboxchannel) | `GET /api/v1/inbox/channels/{channel_id}` | read | `inbox:read` | Get Inbox Channel |
|
|
50
|
+
| [`getInboxEmailSettings`](#op-getinboxemailsettings) | `GET /api/v1/inbox/email-settings` | read | `inbox:read` | Get Inbox Email Settings |
|
|
51
|
+
| [`getInboxLinkedinAccount`](#op-getinboxlinkedinaccount) | `GET /api/v1/inbox/linkedin/accounts/{account_id}` | read | `inbox:read` | Get Inbox Linkedin Account |
|
|
52
|
+
| [`getInboxLinkedinConversation`](#op-getinboxlinkedinconversation) | `GET /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}` | read | `inbox:read` | Get Inbox Linkedin Conversation |
|
|
53
|
+
| [`getInboxLinkedinConversationDetail`](#op-getinboxlinkedinconversationdetail) | `GET /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/detail` | read | `inbox:read` | Get Inbox Linkedin Conversation Detail |
|
|
54
|
+
| [`getInboxMailboxSync`](#op-getinboxmailboxsync) | `GET /api/v1/inbox/mailboxes/{mailbox}/sync` | read | `inbox:read` | Get Inbox Mailbox Sync |
|
|
55
|
+
| [`getInboxTagAgent`](#op-getinboxtagagent) | `GET /api/v1/inbox/tags/{tag_id}/agent` | read | `inbox:read` | Get Inbox Tag Agent |
|
|
56
|
+
| [`getInboxWorkspace`](#op-getinboxworkspace) | `GET /api/v1/inbox/workspaces/{workspace_id}` | read | `inbox:read` | Get Inbox Workspace |
|
|
57
|
+
| [`getSequenceChannels`](#op-getsequencechannels) | `GET /api/v1/inbox/workspaces/sequence-channels/{sequence_id}` | read | `inbox:read` | Get Sequence Channels |
|
|
58
|
+
| [`getWorkspaceUnreadCounts`](#op-getworkspaceunreadcounts) | `GET /api/v1/inbox/workspaces/unread-counts` | read | `inbox:read` | Get Workspace Unread Counts |
|
|
59
|
+
| [`linkInboxEmailToSequence`](#op-linkinboxemailtosequence) | `POST /api/v1/inbox/emails/{email_id}/link-sequence` | write | `inbox:write` | Link Inbox Email To Sequence |
|
|
60
|
+
| [`linkMeetingTranscript`](#op-linkmeetingtranscript) | `POST /api/v1/inbox/meetings/{meeting_id}/transcript-link` | write | `meetings:write` | Link Meeting Transcript |
|
|
61
|
+
| [`listAllInboxMailboxes`](#op-listallinboxmailboxes) | `GET /api/v1/inbox/mailboxes/all` | read | `inbox:read` | List All Inbox Mailboxes |
|
|
62
|
+
| [`listAssignableMeetingUsers`](#op-listassignablemeetingusers) | `GET /api/v1/inbox/meetings/{meeting_id}/assignable-users` | read | `meetings:read` | List Assignable Meeting Users |
|
|
63
|
+
| [`listChannelComments`](#op-listchannelcomments) | `GET /api/v1/inbox/channels/{channel_id}/comments` | read | `inbox:read` | List Channel Comments |
|
|
64
|
+
| [`listInboxBlockedSenders`](#op-listinboxblockedsenders) | `GET /api/v1/inbox/blocked-senders` | read | `inbox:read` | List Inbox Blocked Senders |
|
|
65
|
+
| [`listInboxEmailSequenceCandidates`](#op-listinboxemailsequencecandidates) | `GET /api/v1/inbox/emails/{email_id}/sequence-candidates` | read | `inbox:read` | List Inbox Email Sequence Candidates |
|
|
66
|
+
| [`listInboxEmailSettingsTimezones`](#op-listinboxemailsettingstimezones) | `GET /api/v1/inbox/email-settings/timezones` | read | `inbox:read` | List Inbox Email Settings Timezones |
|
|
67
|
+
| [`listInboxEmailsBySequence`](#op-listinboxemailsbysequence) | `GET /api/v1/inbox/emails/by-sequence/{sequence_id}` | read | `inbox:read` | List Inbox Emails By Sequence |
|
|
68
|
+
| [`listInboxLinkedinAccounts`](#op-listinboxlinkedinaccounts) | `GET /api/v1/inbox/linkedin/accounts` | read | `inbox:read` | List Inbox Linkedin Accounts |
|
|
69
|
+
| [`listInboxMailboxes`](#op-listinboxmailboxes) | `GET /api/v1/inbox/mailboxes` | read | `inbox:read` | List Inbox Mailboxes |
|
|
70
|
+
| [`listInboxMailboxesPaginated`](#op-listinboxmailboxespaginated) | `GET /api/v1/inbox/mailboxes/paginated` | read | `inbox:read` | List Inbox Mailboxes Paginated |
|
|
71
|
+
| [`listInboxUsers`](#op-listinboxusers) | `GET /api/v1/inbox/users` | read | `inbox:read` | List Inbox Users |
|
|
72
|
+
| [`listInboxWorkspaces`](#op-listinboxworkspaces) | `GET /api/v1/inbox/workspaces` | read | `inbox:read` | List Inbox Workspaces |
|
|
73
|
+
| [`listMailboxAssociatedSequences`](#op-listmailboxassociatedsequences) | `POST /api/v1/inbox/mailboxes/associated-sequences` | read | `inbox:read` | List Mailbox Associated Sequences |
|
|
74
|
+
| [`listMeetingTasks`](#op-listmeetingtasks) | `GET /api/v1/inbox/meetings/{meeting_id}/tasks` | read | `meetings:read` | List Meeting Tasks |
|
|
75
|
+
| [`listMyMeetingTasks`](#op-listmymeetingtasks) | `GET /api/v1/inbox/meetings/my-tasks` | read | `meetings:read` | List My Meeting Tasks |
|
|
76
|
+
| [`markInboxEmailRead`](#op-markinboxemailread) | `POST /api/v1/inbox/emails/{email_id}/mark-read` | write | `inbox:write` | Mark Inbox Email Read |
|
|
77
|
+
| [`markInboxLinkedinConversationRead`](#op-markinboxlinkedinconversationread) | `POST /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/read` | write | `inbox:write` | Mark Inbox Linkedin Conversation Read |
|
|
78
|
+
| [`markInboxLinkedinConversationUnread`](#op-markinboxlinkedinconversationunread) | `POST /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/unread` | write | `inbox:write` | Mark Inbox Linkedin Conversation Unread |
|
|
79
|
+
| [`markInboxSmsRead`](#op-markinboxsmsread) | `POST /api/v1/inbox/sms/{thread_id}/mark-read` | write | `inbox:write` | Mark Inbox Sms Read |
|
|
80
|
+
| [`markMeetingNoTranscriptExpected`](#op-markmeetingnotranscriptexpected) | `POST /api/v1/inbox/meetings/{meeting_id}/no-transcript` | write | `meetings:write` | Mark Meeting No Transcript Expected |
|
|
81
|
+
| [`removeChannelTag`](#op-removechanneltag) | `DELETE /api/v1/inbox/channels/{channel_id}/tags` | destructive | `inbox:delete` | Remove Channel Tag |
|
|
82
|
+
| [`revalidateInboxMailbox`](#op-revalidateinboxmailbox) | `POST /api/v1/inbox/mailboxes/{mailbox}/revalidate` | write | `inbox:write` | Revalidate Inbox Mailbox |
|
|
83
|
+
| [`searchInboxCallResults`](#op-searchinboxcallresults) | `POST /api/v1/inbox/call-results/search` | read | `inbox:read` | Search Inbox Call Results |
|
|
84
|
+
| [`searchInboxLinkedinConversations`](#op-searchinboxlinkedinconversations) | `POST /api/v1/inbox/linkedin/conversations/search` | read | `inbox:read` | Search Inbox Linkedin Conversations |
|
|
85
|
+
| [`setChannelAiPause`](#op-setchannelaipause) | `POST /api/v1/inbox/channels/{channel_id}/ai-pause` | write | `inbox:write` | Set Channel Ai Pause |
|
|
86
|
+
| [`setInboxEmailSequence`](#op-setinboxemailsequence) | `POST /api/v1/inbox/emails/{email_id}/sequence` | write | `inbox:write` | Set Inbox Email Sequence |
|
|
87
|
+
| [`setInboxEmailSettings`](#op-setinboxemailsettings) | `PUT /api/v1/inbox/email-settings` | write | `inbox:write` | Set Inbox Email Settings |
|
|
88
|
+
| [`setInboxMailboxVisibility`](#op-setinboxmailboxvisibility) | `PATCH /api/v1/inbox/mailboxes/{mailbox}/visibility` | write | `inbox:write` | Set Inbox Mailbox Visibility |
|
|
89
|
+
| [`setMeetingSensitivity`](#op-setmeetingsensitivity) | `PATCH /api/v1/inbox/meetings/{meeting_id}/sensitivity` | destructive | `meetings:delete` | Set Meeting Sensitivity |
|
|
90
|
+
| [`startInboxMailboxSync`](#op-startinboxmailboxsync) | `POST /api/v1/inbox/mailboxes/{mailbox}/sync` | external | `inbox:run` | Start Inbox Mailbox Sync |
|
|
91
|
+
| [`stopInboxMailboxSync`](#op-stopinboxmailboxsync) | `DELETE /api/v1/inbox/mailboxes/{mailbox}/sync` | destructive | `inbox:delete` | Stop Inbox Mailbox Sync |
|
|
92
|
+
| [`syncInboxLinkedinAccounts`](#op-syncinboxlinkedinaccounts) | `POST /api/v1/inbox/linkedin/accounts/sync` | external | `inbox:run` | Sync Inbox Linkedin Accounts |
|
|
93
|
+
| [`toggleInboxMailboxes`](#op-toggleinboxmailboxes) | `PATCH /api/v1/inbox/mailboxes/bulk` | external | `inbox:run` | Toggle Inbox Mailboxes |
|
|
94
|
+
| [`unassignChannel`](#op-unassignchannel) | `DELETE /api/v1/inbox/channels/{channel_id}/assign` | destructive | `inbox:delete` | Unassign Channel |
|
|
95
|
+
| [`unblockInboxSender`](#op-unblockinboxsender) | `DELETE /api/v1/inbox/blocked-senders/{blocked_sender_id}` | destructive | `inbox:delete` | Unblock Inbox Sender |
|
|
96
|
+
| [`updateInboxLinkedinAccount`](#op-updateinboxlinkedinaccount) | `PUT /api/v1/inbox/linkedin/accounts/{account_id}` | external | `inbox:run` | Update Inbox Linkedin Account |
|
|
97
|
+
| [`updateInboxMailboxSettings`](#op-updateinboxmailboxsettings) | `PATCH /api/v1/inbox/mailboxes/{mailbox}/settings` | external | `inbox:run` | Update Inbox Mailbox Settings |
|
|
98
|
+
| [`updateInboxTag`](#op-updateinboxtag) | `PUT /api/v1/inbox/tags/{tag_id}` | write | `inbox:write` | Update Inbox Tag |
|
|
99
|
+
| [`updateMeetingTask`](#op-updatemeetingtask) | `PATCH /api/v1/inbox/meetings/tasks/{task_id}` | write | `meetings:write` | Update Meeting Task |
|
|
100
|
+
| [`uploadInboxDraftAttachment`](#op-uploadinboxdraftattachment) | `POST /api/v1/inbox/drafts/attachments` | write | `inbox:write` | Upload Inbox Draft Attachment |
|
|
101
|
+
| [`uploadInboxNoteAttachment`](#op-uploadinboxnoteattachment) | `POST /api/v1/inbox/notes/attachments` | write | `inbox:write` | Upload Inbox Note Attachment |
|
|
102
|
+
| [`validateInboxLinkedinAccount`](#op-validateinboxlinkedinaccount) | `POST /api/v1/inbox/linkedin/validate-account` | read | `inbox:read` | Validate Inbox Linkedin Account |
|
|
103
|
+
| [`validateInboxSendMailbox`](#op-validateinboxsendmailbox) | `POST /api/v1/inbox/emails/validate-mailbox` | read | `inbox:read` | Validate Inbox Send Mailbox |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
<a id="op-activateinboxmailboxes"></a>
|
|
108
|
+
|
|
109
|
+
### `g8.api.aiInbox.activateInboxMailboxes(input)`
|
|
110
|
+
|
|
111
|
+
**Activate Inbox Mailboxes**
|
|
112
|
+
|
|
113
|
+
- HTTP: `POST /api/v1/inbox/mailboxes/activate`
|
|
114
|
+
- operationId: `activate_inbox_mailboxes_inbox_mailboxes_activate_post` (also callable as `g8.api.call("activate_inbox_mailboxes_inbox_mailboxes_activate_post", input)`)
|
|
115
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
116
|
+
- API-key scope: `inbox:run`
|
|
117
|
+
|
|
118
|
+
Start polling SEVERAL mailboxes, each with its own provider.
|
|
119
|
+
|
|
120
|
+
NOT ATOMIC, and the failure shape is the thing to know: the app returns
|
|
121
|
+
400 if ANY mailbox fails, but the ones that succeeded REMAIN ACTIVATED.
|
|
122
|
+
The 400 body carries `successful` and `failed`, so read them rather than
|
|
123
|
+
assuming the call did nothing.
|
|
124
|
+
|
|
125
|
+
Reaches outside graph8 for the same reason the single-mailbox start does.
|
|
126
|
+
|
|
127
|
+
**Input**
|
|
128
|
+
|
|
129
|
+
| Field | Type | Required | Description |
|
|
130
|
+
|---|---|---|---|
|
|
131
|
+
| `body` | `MailboxActivateRequest` | yes | Request body; fields below. |
|
|
132
|
+
|
|
133
|
+
Body fields (`MailboxActivateRequest`):
|
|
134
|
+
|
|
135
|
+
| Field | Type | Required | Description |
|
|
136
|
+
|---|---|---|---|
|
|
137
|
+
| `body.mailboxes` | `Array<MailboxJobItem>` | yes | min items 1 |
|
|
138
|
+
| `body.auto_respond` | `boolean \| null` | no | Let the AI answer on these mailboxes. Omit to leave each mailbox as it is. |
|
|
139
|
+
| `body.campaign_id` | `string \| null` | no | Sequence id to attribute synced threads to. Applies to every mailbox listed. |
|
|
140
|
+
| `body.campaign_name` | `string \| null` | no | |
|
|
141
|
+
| `body.last_unread_limit` | `integer \| null` | no | How many unread threads the first sync reaches back for. |
|
|
142
|
+
|
|
143
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
144
|
+
|
|
145
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
146
|
+
|
|
147
|
+
**Example**
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
151
|
+
const result = await g8.api.aiInbox.activateInboxMailboxes({
|
|
152
|
+
body: { mailboxes: [{ mailbox: "example", provider: "google_mailbox" }] },
|
|
153
|
+
});
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
<a id="op-addchannelcomment"></a>
|
|
159
|
+
|
|
160
|
+
### `g8.api.aiInbox.addChannelComment(input)`
|
|
161
|
+
|
|
162
|
+
**Add Channel Comment**
|
|
163
|
+
|
|
164
|
+
- HTTP: `POST /api/v1/inbox/channels/{channel_id}/comments`
|
|
165
|
+
- operationId: `add_channel_comment_inbox_channels__channel_id__comments_post` (also callable as `g8.api.call("add_channel_comment_inbox_channels__channel_id__comments_post", input)`)
|
|
166
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
167
|
+
- API-key scope: `inbox:write`
|
|
168
|
+
|
|
169
|
+
Leave an INTERNAL note. Not a reply - the customer never sees it.
|
|
170
|
+
|
|
171
|
+
MENTIONING SOMEONE CREATES THEM A TASK in the Work app. The two mention
|
|
172
|
+
lists are additive rather than alternatives: an id with no matching email
|
|
173
|
+
still gets the task, it just gets no notification, so send both to get the
|
|
174
|
+
bell as well.
|
|
175
|
+
|
|
176
|
+
Attachments must already be uploaded; only their token and key are
|
|
177
|
+
load-bearing, because the server re-validates and never trusts a
|
|
178
|
+
client-sent name, size or type.
|
|
179
|
+
|
|
180
|
+
**Input**
|
|
181
|
+
|
|
182
|
+
| Field | Type | Required | Description |
|
|
183
|
+
|---|---|---|---|
|
|
184
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
185
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
186
|
+
| `body` | `CommentCreateRequest` | yes | Request body; fields below. |
|
|
187
|
+
|
|
188
|
+
Body fields (`CommentCreateRequest`):
|
|
189
|
+
|
|
190
|
+
| Field | Type | Required | Description |
|
|
191
|
+
|---|---|---|---|
|
|
192
|
+
| `body.content` | `string` | yes | min length 1, max length 5000 |
|
|
193
|
+
| `body.attachments` | `Array<CommentAttachmentRef>` | no | |
|
|
194
|
+
| `body.mentioned_user_emails` | `Array<string>` | no | The same users by email. Additive - this is what drives the notification. |
|
|
195
|
+
| `body.mentioned_user_ids` | `Array<string>` | no | Mentioned users by id. Each gets a Work task. |
|
|
196
|
+
|
|
197
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
198
|
+
|
|
199
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
200
|
+
|
|
201
|
+
**Example**
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
const result = await g8.api.aiInbox.addChannelComment({
|
|
205
|
+
path: { channel_id: "id" },
|
|
206
|
+
query: { channel_type: "email" },
|
|
207
|
+
body: { content: "example" },
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
<a id="op-addchanneltag"></a>
|
|
214
|
+
|
|
215
|
+
### `g8.api.aiInbox.addChannelTag(input)`
|
|
216
|
+
|
|
217
|
+
**Add Channel Tag**
|
|
218
|
+
|
|
219
|
+
- HTTP: `POST /api/v1/inbox/channels/{channel_id}/tags`
|
|
220
|
+
- operationId: `add_channel_tag_inbox_channels__channel_id__tags_post` (also callable as `g8.api.call("add_channel_tag_inbox_channels__channel_id__tags_post", input)`)
|
|
221
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
222
|
+
- API-key scope: `inbox:write`
|
|
223
|
+
|
|
224
|
+
Attach an existing tag to a conversation.
|
|
225
|
+
|
|
226
|
+
The tag must already exist - this links, it does not create.
|
|
227
|
+
|
|
228
|
+
**Input**
|
|
229
|
+
|
|
230
|
+
| Field | Type | Required | Description |
|
|
231
|
+
|---|---|---|---|
|
|
232
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
233
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
234
|
+
| `body` | `developer_api__interfaces__dtos__inbox_collab__TagRequest` | yes | Request body; fields below. |
|
|
235
|
+
| `query.linkedin_account_id` | `integer \| null` | no | LinkedIn account id. Required only for `heyreach`, where the id is account-scoped and ambiguous without it. |
|
|
236
|
+
|
|
237
|
+
Body fields (`developer_api__interfaces__dtos__inbox_collab__TagRequest`):
|
|
238
|
+
|
|
239
|
+
| Field | Type | Required | Description |
|
|
240
|
+
|---|---|---|---|
|
|
241
|
+
| `body.tag_id` | `string` | yes | The tag to attach. It must already exist. |
|
|
242
|
+
|
|
243
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
244
|
+
|
|
245
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
246
|
+
|
|
247
|
+
**Example**
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const result = await g8.api.aiInbox.addChannelTag({
|
|
251
|
+
path: { channel_id: "id" },
|
|
252
|
+
query: { channel_type: "email" },
|
|
253
|
+
body: { tag_id: "id" },
|
|
254
|
+
});
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
<a id="op-addmailboxtoworkspace"></a>
|
|
260
|
+
|
|
261
|
+
### `g8.api.aiInbox.addMailboxToWorkspace(input)`
|
|
262
|
+
|
|
263
|
+
**Add Mailbox To Workspace**
|
|
264
|
+
|
|
265
|
+
- HTTP: `POST /api/v1/inbox/workspaces/{workspace_id}/mailboxes`
|
|
266
|
+
- operationId: `add_mailbox_to_workspace_inbox_workspaces__workspace_id__mailboxes_post` (also callable as `g8.api.call("add_mailbox_to_workspace_inbox_workspaces__workspace_id__mailboxes_post", input)`)
|
|
267
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
268
|
+
- API-key scope: `inbox:write`
|
|
269
|
+
|
|
270
|
+
Put a mailbox into a workspace.
|
|
271
|
+
|
|
272
|
+
IDEMPOTENT: adding a mailbox that is already a member is a no-op, and the
|
|
273
|
+
response says which happened rather than failing.
|
|
274
|
+
|
|
275
|
+
This one handler wants a `PropelAuthUser` rather than the shared principal,
|
|
276
|
+
so it gets one from `build_api_principal` - resolved from the validated
|
|
277
|
+
key, never client-supplied.
|
|
278
|
+
|
|
279
|
+
**Input**
|
|
280
|
+
|
|
281
|
+
| Field | Type | Required | Description |
|
|
282
|
+
|---|---|---|---|
|
|
283
|
+
| `path.workspace_id` | `string` | yes | Workspace id (UUID). |
|
|
284
|
+
| `body` | `Body_add_mailbox_to_workspace_inbox_workspaces__workspace_id__mailboxes_post` | yes | Request body; fields below. |
|
|
285
|
+
|
|
286
|
+
Body fields (`Body_add_mailbox_to_workspace_inbox_workspaces__workspace_id__mailboxes_post`):
|
|
287
|
+
|
|
288
|
+
| Field | Type | Required | Description |
|
|
289
|
+
|---|---|---|---|
|
|
290
|
+
| `body.mailbox_id` | `integer` | yes | Integer `mailboxes.id` - the database primary key, NOT the cron-job string id. The app is explicit about the difference and so is this. |
|
|
291
|
+
|
|
292
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
293
|
+
|
|
294
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
295
|
+
|
|
296
|
+
**Example**
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
const result = await g8.api.aiInbox.addMailboxToWorkspace({ path: { workspace_id: "id" }, body: { mailbox_id: 123 } });
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
<a id="op-assignchannel"></a>
|
|
305
|
+
|
|
306
|
+
### `g8.api.aiInbox.assignChannel(input)`
|
|
307
|
+
|
|
308
|
+
**Assign Channel**
|
|
309
|
+
|
|
310
|
+
- HTTP: `POST /api/v1/inbox/channels/{channel_id}/assign`
|
|
311
|
+
- operationId: `assign_channel_inbox_channels__channel_id__assign_post` (also callable as `g8.api.call("assign_channel_inbox_channels__channel_id__assign_post", input)`)
|
|
312
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
313
|
+
- API-key scope: `inbox:write`
|
|
314
|
+
|
|
315
|
+
Give a conversation to one or more people.
|
|
316
|
+
|
|
317
|
+
Ownership is SHARED, not singular: assigning ADDS people rather than
|
|
318
|
+
replacing whoever is already there. Take someone off with
|
|
319
|
+
`DELETE /inbox/channels/{id}/assign`.
|
|
320
|
+
|
|
321
|
+
**Input**
|
|
322
|
+
|
|
323
|
+
| Field | Type | Required | Description |
|
|
324
|
+
|---|---|---|---|
|
|
325
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
326
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
327
|
+
| `body` | `AssignmentCreateRequest` | yes | Request body; fields below. |
|
|
328
|
+
| `query.linkedin_account_id` | `integer \| null` | no | LinkedIn account id. Required only for `heyreach`, where the id is account-scoped and ambiguous without it. |
|
|
329
|
+
|
|
330
|
+
Body fields (`AssignmentCreateRequest`):
|
|
331
|
+
|
|
332
|
+
| Field | Type | Required | Description |
|
|
333
|
+
|---|---|---|---|
|
|
334
|
+
| `body.assignee_emails` | `Array<string>` | yes | Who owns this conversation. Check eligibility first. min items 1, max items 20 |
|
|
335
|
+
|
|
336
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
337
|
+
|
|
338
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
339
|
+
|
|
340
|
+
**Example**
|
|
341
|
+
|
|
342
|
+
```ts
|
|
343
|
+
const result = await g8.api.aiInbox.assignChannel({
|
|
344
|
+
path: { channel_id: "id" },
|
|
345
|
+
query: { channel_type: "email" },
|
|
346
|
+
body: { assignee_emails: ["jane@acme.com"] },
|
|
347
|
+
});
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
<a id="op-blockinboxsender"></a>
|
|
353
|
+
|
|
354
|
+
### `g8.api.aiInbox.blockInboxSender(input)`
|
|
355
|
+
|
|
356
|
+
**Block Inbox Sender**
|
|
357
|
+
|
|
358
|
+
- HTTP: `POST /api/v1/inbox/blocked-senders`
|
|
359
|
+
- operationId: `block_inbox_sender_inbox_blocked_senders_post` (also callable as `g8.api.call("block_inbox_sender_inbox_blocked_senders_post", input)`)
|
|
360
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
361
|
+
- API-key scope: `inbox:write`
|
|
362
|
+
|
|
363
|
+
Stop a sender reaching ONE mailbox.
|
|
364
|
+
|
|
365
|
+
Scoped to the mailbox named in the body, not to the organisation: the same
|
|
366
|
+
sender still reaches every other mailbox until blocked there too. This is
|
|
367
|
+
an INGESTION filter - it is not a suppression, and it does not stop
|
|
368
|
+
graph8 emailing them (see `/contacts/suppressions` for that).
|
|
369
|
+
|
|
370
|
+
**Input**
|
|
371
|
+
|
|
372
|
+
| Field | Type | Required | Description |
|
|
373
|
+
|---|---|---|---|
|
|
374
|
+
| `body` | `BlockedSenderCreateRequest` | yes | Request body; fields below. |
|
|
375
|
+
|
|
376
|
+
Body fields (`BlockedSenderCreateRequest`):
|
|
377
|
+
|
|
378
|
+
| Field | Type | Required | Description |
|
|
379
|
+
|---|---|---|---|
|
|
380
|
+
| `body.mailbox` | `string` | yes | The mailbox to block them on. |
|
|
381
|
+
| `body.sender_email` | `string` | yes | The address to block. |
|
|
382
|
+
| `body.reason` | `string \| null` | no | |
|
|
383
|
+
|
|
384
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
385
|
+
|
|
386
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
387
|
+
|
|
388
|
+
**Example**
|
|
389
|
+
|
|
390
|
+
```ts
|
|
391
|
+
const result = await g8.api.aiInbox.blockInboxSender({ body: { mailbox: "example", sender_email: "jane@acme.com" } });
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
<a id="op-clearmeetingtranscriptlink"></a>
|
|
397
|
+
|
|
398
|
+
### `g8.api.aiInbox.clearMeetingTranscriptLink(input)`
|
|
399
|
+
|
|
400
|
+
**Clear Meeting Transcript Link**
|
|
401
|
+
|
|
402
|
+
- HTTP: `DELETE /api/v1/inbox/meetings/{meeting_id}/transcript-link`
|
|
403
|
+
- operationId: `clear_meeting_transcript_link_inbox_meetings__meeting_id__transcript_link_delete` (also callable as `g8.api.call("clear_meeting_transcript_link_inbox_meetings__meeting_id__transcript_link_delete", input)`)
|
|
404
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
405
|
+
- API-key scope: `meetings:delete`
|
|
406
|
+
|
|
407
|
+
Detach the transcript from a meeting.
|
|
408
|
+
|
|
409
|
+
Breaks the LINK, not the transcript: the recording and its text survive
|
|
410
|
+
and can be attached to the right meeting instead.
|
|
411
|
+
|
|
412
|
+
**Input**
|
|
413
|
+
|
|
414
|
+
| Field | Type | Required | Description |
|
|
415
|
+
|---|---|---|---|
|
|
416
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
417
|
+
|
|
418
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
419
|
+
|
|
420
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
421
|
+
|
|
422
|
+
**Example**
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
426
|
+
const result = await g8.api.aiInbox.clearMeetingTranscriptLink({ path: { meeting_id: "id" } });
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
<a id="op-composeinboxemail"></a>
|
|
432
|
+
|
|
433
|
+
### `g8.api.aiInbox.composeInboxEmail(input)`
|
|
434
|
+
|
|
435
|
+
**Compose Inbox Email**
|
|
436
|
+
|
|
437
|
+
- HTTP: `POST /api/v1/inbox/emails/compose`
|
|
438
|
+
- operationId: `compose_inbox_email_inbox_emails_compose_post` (also callable as `g8.api.call("compose_inbox_email_inbox_emails_compose_post", input)`)
|
|
439
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
440
|
+
- API-key scope: `inbox:run`
|
|
441
|
+
|
|
442
|
+
COMPOSE AN EMAIL. WITH `save_as_draft` FALSE THIS REACHES A REAL PERSON.
|
|
443
|
+
|
|
444
|
+
The one call that does everything the compose window does:
|
|
445
|
+
|
|
446
|
+
* new thread, sent now - `to`, `from_mailbox`, `subject`, `content`
|
|
447
|
+
* new thread, saved as a draft - the same plus `save_as_draft: true`
|
|
448
|
+
* reply into a thread - add `reply_to_email_id`
|
|
449
|
+
* edit an existing draft - add `draft_id`
|
|
450
|
+
* send a draft you saved - `draft_id` plus `save_as_draft: false`
|
|
451
|
+
|
|
452
|
+
`save_as_draft` DEFAULTS TO FALSE, which means SEND. That is the app's own
|
|
453
|
+
default and it is kept rather than made safer here, because two ends
|
|
454
|
+
disagreeing about what an omitted field does is worse than a default you
|
|
455
|
+
can read.
|
|
456
|
+
|
|
457
|
+
Classified `external` (`inbox:run`) because it can deliver. Sending as a
|
|
458
|
+
mailbox the caller is not authorised for is a 403 from the sender
|
|
459
|
+
authorisation gate, not a silent success - check first with
|
|
460
|
+
`POST /inbox/emails/validate-mailbox`.
|
|
461
|
+
|
|
462
|
+
Distinct from `POST /inbox/emails/{email_id}/send`, which can only reply
|
|
463
|
+
into a thread that already exists.
|
|
464
|
+
|
|
465
|
+
**Input**
|
|
466
|
+
|
|
467
|
+
| Field | Type | Required | Description |
|
|
468
|
+
|---|---|---|---|
|
|
469
|
+
| `body` | `EmailComposeRequest` | yes | Request body; fields below. |
|
|
470
|
+
|
|
471
|
+
Body fields (`EmailComposeRequest`):
|
|
472
|
+
|
|
473
|
+
| Field | Type | Required | Description |
|
|
474
|
+
|---|---|---|---|
|
|
475
|
+
| `body.content` | `string` | yes | Body, HTML. |
|
|
476
|
+
| `body.from_mailbox` | `string` | yes | The mailbox to send AS. Must already be syncing - check with `POST /inbox/emails/validate-mailbox` first. |
|
|
477
|
+
| `body.to` | `Array<string>` | yes | Recipients. These are real addresses. min items 1 |
|
|
478
|
+
| `body.assigned_users` | `Array<string>` | no | Emails to assign the resulting thread to. |
|
|
479
|
+
| `body.attachments` | `Array<Record<string, unknown>>` | no | Already-uploaded attachment references. The server re-validates each one. |
|
|
480
|
+
| `body.bcc` | `Array<string>` | no | |
|
|
481
|
+
| `body.cc` | `Array<string>` | no | |
|
|
482
|
+
| `body.draft_id` | `string \| null` | no | Edit or send an existing draft. |
|
|
483
|
+
| `body.include_signature` | `boolean` | no | default `true` |
|
|
484
|
+
| `body.reply_to_email_id` | `string \| null` | no | Thread to reply into. Omit to start a new conversation. |
|
|
485
|
+
| `body.save_as_draft` | `boolean` | no | FALSE SENDS THE MESSAGE. True stores a draft and contacts nobody. default `false` |
|
|
486
|
+
| `body.subject` | `string \| null` | no | Auto-filled as `Re: {original}` on a reply if omitted. |
|
|
487
|
+
| `body.tag_ids` | `Array<string>` | no | Tags to attach to the thread. |
|
|
488
|
+
|
|
489
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
490
|
+
|
|
491
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
492
|
+
|
|
493
|
+
**Example**
|
|
494
|
+
|
|
495
|
+
```ts
|
|
496
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
497
|
+
const result = await g8.api.aiInbox.composeInboxEmail({
|
|
498
|
+
body: { content: "example", from_mailbox: "example", to: ["+15555550100"] },
|
|
499
|
+
});
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
<a id="op-composeinboxlinkedinmessage"></a>
|
|
505
|
+
|
|
506
|
+
### `g8.api.aiInbox.composeInboxLinkedinMessage(input)`
|
|
507
|
+
|
|
508
|
+
**Compose Inbox Linkedin Message**
|
|
509
|
+
|
|
510
|
+
- HTTP: `POST /api/v1/inbox/linkedin/compose`
|
|
511
|
+
- operationId: `compose_inbox_linkedin_message_inbox_linkedin_compose_post` (also callable as `g8.api.call("compose_inbox_linkedin_message_inbox_linkedin_compose_post", input)`)
|
|
512
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
513
|
+
- API-key scope: `inbox:run`
|
|
514
|
+
|
|
515
|
+
COMPOSE A LINKEDIN MESSAGE. WITH `save_as_draft` FALSE IT REACHES A PERSON.
|
|
516
|
+
|
|
517
|
+
ONE DRAFT PER CONVERSATION: saving over an existing draft replaces it, and
|
|
518
|
+
sending deletes whatever draft was there. `save_as_draft` defaults to
|
|
519
|
+
FALSE, which means send.
|
|
520
|
+
|
|
521
|
+
Classified `external` (`inbox:run`). The account must be synced and
|
|
522
|
+
enabled for the inbox - check with `POST /inbox/linkedin/validate-account`.
|
|
523
|
+
|
|
524
|
+
**Input**
|
|
525
|
+
|
|
526
|
+
| Field | Type | Required | Description |
|
|
527
|
+
|---|---|---|---|
|
|
528
|
+
| `body` | `LinkedInComposeRequest` | yes | Request body; fields below. |
|
|
529
|
+
|
|
530
|
+
Body fields (`LinkedInComposeRequest`):
|
|
531
|
+
|
|
532
|
+
| Field | Type | Required | Description |
|
|
533
|
+
|---|---|---|---|
|
|
534
|
+
| `body.conversation_id` | `string` | yes | An existing conversation on that account. |
|
|
535
|
+
| `body.linkedin_account_id` | `integer` | yes | The sending account. Integer id. |
|
|
536
|
+
| `body.message` | `string` | yes | |
|
|
537
|
+
| `body.assigned_users` | `Array<string>` | no | |
|
|
538
|
+
| `body.save_as_draft` | `boolean` | no | FALSE SENDS THE MESSAGE. True stores a draft. default `false` |
|
|
539
|
+
| `body.tag_ids` | `Array<string>` | no | |
|
|
540
|
+
|
|
541
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
542
|
+
|
|
543
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
544
|
+
|
|
545
|
+
**Example**
|
|
546
|
+
|
|
547
|
+
```ts
|
|
548
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
549
|
+
const result = await g8.api.aiInbox.composeInboxLinkedinMessage({
|
|
550
|
+
body: {
|
|
551
|
+
conversation_id: "id",
|
|
552
|
+
linkedin_account_id: 123,
|
|
553
|
+
message: "example",
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
<a id="op-composeinboxsms"></a>
|
|
561
|
+
|
|
562
|
+
### `g8.api.aiInbox.composeInboxSms(input)`
|
|
563
|
+
|
|
564
|
+
**Compose Inbox Sms**
|
|
565
|
+
|
|
566
|
+
- HTTP: `POST /api/v1/inbox/sms/compose`
|
|
567
|
+
- operationId: `compose_inbox_sms_inbox_sms_compose_post` (also callable as `g8.api.call("compose_inbox_sms_inbox_sms_compose_post", input)`)
|
|
568
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
569
|
+
- API-key scope: `inbox:run`
|
|
570
|
+
|
|
571
|
+
COMPOSE AN SMS. WITH `save_as_draft` FALSE THIS REACHES A REAL PHONE.
|
|
572
|
+
|
|
573
|
+
Sends through the organisation's own number and files the message into the
|
|
574
|
+
SMS thread, so the conversation stays in one place. `save_as_draft`
|
|
575
|
+
defaults to FALSE, which means send.
|
|
576
|
+
|
|
577
|
+
Classified `external` (`inbox:run`). `from_number` must be a number this
|
|
578
|
+
organisation owns - checked before anything is saved or sent, a 400
|
|
579
|
+
otherwise (see the module docstring for why the check lives here).
|
|
580
|
+
|
|
581
|
+
**Input**
|
|
582
|
+
|
|
583
|
+
| Field | Type | Required | Description |
|
|
584
|
+
|---|---|---|---|
|
|
585
|
+
| `body` | `SmsComposeRequest` | yes | Request body; fields below. |
|
|
586
|
+
|
|
587
|
+
Body fields (`SmsComposeRequest`):
|
|
588
|
+
|
|
589
|
+
| Field | Type | Required | Description |
|
|
590
|
+
|---|---|---|---|
|
|
591
|
+
| `body.body` | `string` | yes | Message text. |
|
|
592
|
+
| `body.from_number` | `string` | yes | A number this organisation owns, E.164. |
|
|
593
|
+
| `body.to_number` | `string` | yes | The recipient's number, E.164. A real phone. |
|
|
594
|
+
| `body.draft_id` | `string \| null` | no | |
|
|
595
|
+
| `body.save_as_draft` | `boolean` | no | FALSE SENDS THE MESSAGE. True stores a draft. default `false` |
|
|
596
|
+
| `body.thread_id` | `string \| null` | no | Existing SMS thread to continue. |
|
|
597
|
+
|
|
598
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
599
|
+
|
|
600
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
601
|
+
|
|
602
|
+
**Example**
|
|
603
|
+
|
|
604
|
+
```ts
|
|
605
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
606
|
+
const result = await g8.api.aiInbox.composeInboxSms({
|
|
607
|
+
body: { body: "example", from_number: "example", to_number: "example" },
|
|
608
|
+
});
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
<a id="op-createinboxagent"></a>
|
|
614
|
+
|
|
615
|
+
### `g8.api.aiInbox.createInboxAgent(input)`
|
|
616
|
+
|
|
617
|
+
**Create Inbox Agent**
|
|
618
|
+
|
|
619
|
+
- HTTP: `POST /api/v1/inbox/agents`
|
|
620
|
+
- operationId: `create_inbox_agent_inbox_agents_post` (also callable as `g8.api.call("create_inbox_agent_inbox_agents_post", input)`)
|
|
621
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
622
|
+
- API-key scope: `inbox:write`
|
|
623
|
+
|
|
624
|
+
Create an AI Inbox agent - the named responder tags and email settings
|
|
625
|
+
point at.
|
|
626
|
+
|
|
627
|
+
NOT the Copilot Agent Runtime at `/agent/*`, which runs and approves
|
|
628
|
+
autonomous work. Different object, similar name; the context notes record
|
|
629
|
+
that this pair has already misled an audit.
|
|
630
|
+
|
|
631
|
+
Names are unique per organisation: a repeat is a 400, not a second agent.
|
|
632
|
+
|
|
633
|
+
**Input**
|
|
634
|
+
|
|
635
|
+
| Field | Type | Required | Description |
|
|
636
|
+
|---|---|---|---|
|
|
637
|
+
| `body` | `InboxAgentCreateRequest` | yes | Request body; fields below. |
|
|
638
|
+
|
|
639
|
+
Body fields (`InboxAgentCreateRequest`):
|
|
640
|
+
|
|
641
|
+
| Field | Type | Required | Description |
|
|
642
|
+
|---|---|---|---|
|
|
643
|
+
| `body.name` | `string` | yes | Unique within the organisation. |
|
|
644
|
+
|
|
645
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
646
|
+
|
|
647
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
648
|
+
|
|
649
|
+
**Example**
|
|
650
|
+
|
|
651
|
+
```ts
|
|
652
|
+
const result = await g8.api.aiInbox.createInboxAgent({ body: { name: "Example" } });
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
---
|
|
656
|
+
|
|
657
|
+
<a id="op-createinboxtag"></a>
|
|
658
|
+
|
|
659
|
+
### `g8.api.aiInbox.createInboxTag(input)`
|
|
660
|
+
|
|
661
|
+
**Create Inbox Tag**
|
|
662
|
+
|
|
663
|
+
- HTTP: `POST /api/v1/inbox/tags`
|
|
664
|
+
- operationId: `create_inbox_tag_inbox_tags_post` (also callable as `g8.api.call("create_inbox_tag_inbox_tags_post", input)`)
|
|
665
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
666
|
+
- API-key scope: `inbox:write`
|
|
667
|
+
|
|
668
|
+
Create an inbox tag - a conversation label, not a CRM contact tag.
|
|
669
|
+
|
|
670
|
+
The read of these objects ships as `GET /workflows/inbox-tags`. With
|
|
671
|
+
`ai_can_apply` true and `rules` set, the auto-tagger may apply this tag to
|
|
672
|
+
threads on its own; with `agent_id` set, the agent answers threads carrying
|
|
673
|
+
it.
|
|
674
|
+
|
|
675
|
+
**Input**
|
|
676
|
+
|
|
677
|
+
| Field | Type | Required | Description |
|
|
678
|
+
|---|---|---|---|
|
|
679
|
+
| `body` | `TagCreateRequest` | yes | Request body; fields below. |
|
|
680
|
+
|
|
681
|
+
Body fields (`TagCreateRequest`):
|
|
682
|
+
|
|
683
|
+
| Field | Type | Required | Description |
|
|
684
|
+
|---|---|---|---|
|
|
685
|
+
| `body.name` | `string` | yes | Tag name, unique per organisation. min length 1 |
|
|
686
|
+
| `body.agent_id` | `string \| null` | no | AI Inbox agent that answers threads carrying this tag. |
|
|
687
|
+
| `body.ai_can_apply` | `boolean` | no | Whether the auto-tagger may apply this tag on its own. default `false` |
|
|
688
|
+
| `body.color` | `string \| null` | no | |
|
|
689
|
+
| `body.description` | `string \| null` | no | |
|
|
690
|
+
| `body.priority` | `integer \| null` | no | 1-100. min 1, max 100 |
|
|
691
|
+
| `body.rules` | `Array<string> \| null` | no | Plain-language rules the auto-tagger applies this tag by. |
|
|
692
|
+
|
|
693
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
694
|
+
|
|
695
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
696
|
+
|
|
697
|
+
**Example**
|
|
698
|
+
|
|
699
|
+
```ts
|
|
700
|
+
const result = await g8.api.aiInbox.createInboxTag({ body: { name: "Example" } });
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
705
|
+
<a id="op-createmeetingtask"></a>
|
|
706
|
+
|
|
707
|
+
### `g8.api.aiInbox.createMeetingTask(input)`
|
|
708
|
+
|
|
709
|
+
**Create Meeting Task**
|
|
710
|
+
|
|
711
|
+
- HTTP: `POST /api/v1/inbox/meetings/{meeting_id}/tasks`
|
|
712
|
+
- operationId: `create_meeting_task_inbox_meetings__meeting_id__tasks_post` (also callable as `g8.api.call("create_meeting_task_inbox_meetings__meeting_id__tasks_post", input)`)
|
|
713
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
714
|
+
- API-key scope: `meetings:write`
|
|
715
|
+
|
|
716
|
+
Create a follow-up on this meeting.
|
|
717
|
+
|
|
718
|
+
The meeting and its transcript are filled in from the meeting itself, so
|
|
719
|
+
the task stays traceable to what was said. The assignee must be a
|
|
720
|
+
PARTICIPANT - checked server-side, because a client-side filter is not a
|
|
721
|
+
permission.
|
|
722
|
+
|
|
723
|
+
**Input**
|
|
724
|
+
|
|
725
|
+
| Field | Type | Required | Description |
|
|
726
|
+
|---|---|---|---|
|
|
727
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
728
|
+
| `body` | `MeetingTaskCreateRequest` | yes | Request body; fields below. |
|
|
729
|
+
|
|
730
|
+
Body fields (`MeetingTaskCreateRequest`):
|
|
731
|
+
|
|
732
|
+
| Field | Type | Required | Description |
|
|
733
|
+
|---|---|---|---|
|
|
734
|
+
| `body.title` | `string` | yes | What needs doing. |
|
|
735
|
+
| `body.assignee_user_id` | `string \| null` | no | The assignee's user id, from `GET /inbox/meetings/{meeting_id}/assignable-users`. Must be a meeting participant. |
|
|
736
|
+
| `body.description` | `string \| null` | no | |
|
|
737
|
+
| `body.due_date` | `string (date-time) \| null` | no | |
|
|
738
|
+
| `body.priority` | `integer` | no | Lower is more urgent. The app's default is 2. default `2` |
|
|
739
|
+
|
|
740
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
741
|
+
|
|
742
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
743
|
+
|
|
744
|
+
**Example**
|
|
745
|
+
|
|
746
|
+
```ts
|
|
747
|
+
const result = await g8.api.aiInbox.createMeetingTask({ path: { meeting_id: "id" }, body: { title: "Example" } });
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
<a id="op-deactivateinboxmailboxes"></a>
|
|
753
|
+
|
|
754
|
+
### `g8.api.aiInbox.deactivateInboxMailboxes(input)`
|
|
755
|
+
|
|
756
|
+
**Deactivate Inbox Mailboxes**
|
|
757
|
+
|
|
758
|
+
- HTTP: `POST /api/v1/inbox/mailboxes/deactivate`
|
|
759
|
+
- operationId: `deactivate_inbox_mailboxes_inbox_mailboxes_deactivate_post` (also callable as `g8.api.call("deactivate_inbox_mailboxes_inbox_mailboxes_deactivate_post", input)`)
|
|
760
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
761
|
+
- API-key scope: `inbox:write`
|
|
762
|
+
|
|
763
|
+
Stop polling several mailboxes at once.
|
|
764
|
+
|
|
765
|
+
Takes the same body as activate - the campaign and auto-respond fields are
|
|
766
|
+
simply ignored on this path, which is the app's own shape and is left
|
|
767
|
+
alone rather than split into a narrower model that would drift from it.
|
|
768
|
+
|
|
769
|
+
**Input**
|
|
770
|
+
|
|
771
|
+
| Field | Type | Required | Description |
|
|
772
|
+
|---|---|---|---|
|
|
773
|
+
| `body` | `MailboxActivateRequest` | yes | Request body; fields below. |
|
|
774
|
+
|
|
775
|
+
Body fields (`MailboxActivateRequest`):
|
|
776
|
+
|
|
777
|
+
| Field | Type | Required | Description |
|
|
778
|
+
|---|---|---|---|
|
|
779
|
+
| `body.mailboxes` | `Array<MailboxJobItem>` | yes | min items 1 |
|
|
780
|
+
| `body.auto_respond` | `boolean \| null` | no | Let the AI answer on these mailboxes. Omit to leave each mailbox as it is. |
|
|
781
|
+
| `body.campaign_id` | `string \| null` | no | Sequence id to attribute synced threads to. Applies to every mailbox listed. |
|
|
782
|
+
| `body.campaign_name` | `string \| null` | no | |
|
|
783
|
+
| `body.last_unread_limit` | `integer \| null` | no | How many unread threads the first sync reaches back for. |
|
|
784
|
+
|
|
785
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
786
|
+
|
|
787
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
788
|
+
|
|
789
|
+
**Example**
|
|
790
|
+
|
|
791
|
+
```ts
|
|
792
|
+
const result = await g8.api.aiInbox.deactivateInboxMailboxes({
|
|
793
|
+
body: { mailboxes: [{ mailbox: "example", provider: "google_mailbox" }] },
|
|
794
|
+
});
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
---
|
|
798
|
+
|
|
799
|
+
<a id="op-deleteinboxemaildraft"></a>
|
|
800
|
+
|
|
801
|
+
### `g8.api.aiInbox.deleteInboxEmailDraft(input)`
|
|
802
|
+
|
|
803
|
+
**Delete Inbox Email Draft**
|
|
804
|
+
|
|
805
|
+
- HTTP: `DELETE /api/v1/inbox/drafts/emails/{draft_id}`
|
|
806
|
+
- operationId: `delete_inbox_email_draft_inbox_drafts_emails__draft_id__delete` (also callable as `g8.api.call("delete_inbox_email_draft_inbox_drafts_emails__draft_id__delete", input)`)
|
|
807
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
808
|
+
- API-key scope: `inbox:delete`
|
|
809
|
+
|
|
810
|
+
Delete a saved email draft by its id, wherever it sits.
|
|
811
|
+
|
|
812
|
+
Not `DELETE /inbox/emails/{email_id}/draft`, which discards the AI's
|
|
813
|
+
latest suggestion on a thread: this removes ONE draft by id, and if it was
|
|
814
|
+
the only message in its thread the thread goes too. Refused with 403 unless
|
|
815
|
+
the caller may send from the draft's mailbox - deleting a draft carries the
|
|
816
|
+
same authority as sending it. Files attached to the draft are deleted.
|
|
817
|
+
|
|
818
|
+
**Input**
|
|
819
|
+
|
|
820
|
+
| Field | Type | Required | Description |
|
|
821
|
+
|---|---|---|---|
|
|
822
|
+
| `path.draft_id` | `string` | yes | The draft's message id, from `POST /inbox/emails/compose`. |
|
|
823
|
+
|
|
824
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
825
|
+
|
|
826
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
827
|
+
|
|
828
|
+
**Example**
|
|
829
|
+
|
|
830
|
+
```ts
|
|
831
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
832
|
+
const result = await g8.api.aiInbox.deleteInboxEmailDraft({ path: { draft_id: "id" } });
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
---
|
|
836
|
+
|
|
837
|
+
<a id="op-deleteinboxlinkedindraft"></a>
|
|
838
|
+
|
|
839
|
+
### `g8.api.aiInbox.deleteInboxLinkedinDraft(input)`
|
|
840
|
+
|
|
841
|
+
**Delete Inbox Linkedin Draft**
|
|
842
|
+
|
|
843
|
+
- HTTP: `DELETE /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/draft`
|
|
844
|
+
- operationId: `delete_inbox_linkedin_draft_inbox_linkedin_accounts__account_id__conversations__conversation_id__draft_delete` (also callable as `g8.api.call("delete_inbox_linkedin_draft_inbox_linkedin_accounts__account_id__conversations__conversation_id__draft_delete", input)`)
|
|
845
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
846
|
+
- API-key scope: `inbox:delete`
|
|
847
|
+
|
|
848
|
+
Delete the saved draft on a LinkedIn conversation (there is at most one).
|
|
849
|
+
404 when there is none. Nothing is sent.
|
|
850
|
+
|
|
851
|
+
**Input**
|
|
852
|
+
|
|
853
|
+
| Field | Type | Required | Description |
|
|
854
|
+
|---|---|---|---|
|
|
855
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
856
|
+
| `path.conversation_id` | `string` | yes | LinkedIn conversation id. |
|
|
857
|
+
|
|
858
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
859
|
+
|
|
860
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
861
|
+
|
|
862
|
+
**Example**
|
|
863
|
+
|
|
864
|
+
```ts
|
|
865
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
866
|
+
const result = await g8.api.aiInbox.deleteInboxLinkedinDraft({ path: { account_id: 123, conversation_id: "id" } });
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
---
|
|
870
|
+
|
|
871
|
+
<a id="op-deleteinboxtag"></a>
|
|
872
|
+
|
|
873
|
+
### `g8.api.aiInbox.deleteInboxTag(input)`
|
|
874
|
+
|
|
875
|
+
**Delete Inbox Tag**
|
|
876
|
+
|
|
877
|
+
- HTTP: `DELETE /api/v1/inbox/tags/{tag_id}`
|
|
878
|
+
- operationId: `delete_inbox_tag_inbox_tags__tag_id__delete` (also callable as `g8.api.call("delete_inbox_tag_inbox_tags__tag_id__delete", input)`)
|
|
879
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
880
|
+
- API-key scope: `inbox:delete`
|
|
881
|
+
|
|
882
|
+
Delete an inbox tag. Threads lose the label; nothing else is removed.
|
|
883
|
+
|
|
884
|
+
**Input**
|
|
885
|
+
|
|
886
|
+
| Field | Type | Required | Description |
|
|
887
|
+
|---|---|---|---|
|
|
888
|
+
| `path.tag_id` | `string` | yes | Tag id. |
|
|
889
|
+
|
|
890
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
891
|
+
|
|
892
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
893
|
+
|
|
894
|
+
**Example**
|
|
895
|
+
|
|
896
|
+
```ts
|
|
897
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
898
|
+
const result = await g8.api.aiInbox.deleteInboxTag({ path: { tag_id: "id" } });
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
---
|
|
902
|
+
|
|
903
|
+
<a id="op-deletemeetingtask"></a>
|
|
904
|
+
|
|
905
|
+
### `g8.api.aiInbox.deleteMeetingTask(input)`
|
|
906
|
+
|
|
907
|
+
**Delete Meeting Task**
|
|
908
|
+
|
|
909
|
+
- HTTP: `DELETE /api/v1/inbox/meetings/tasks/{task_id}`
|
|
910
|
+
- operationId: `delete_meeting_task_inbox_meetings_tasks__task_id__delete` (also callable as `g8.api.call("delete_meeting_task_inbox_meetings_tasks__task_id__delete", input)`)
|
|
911
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
912
|
+
- API-key scope: `meetings:delete`
|
|
913
|
+
|
|
914
|
+
Delete a meeting follow-up. The meeting and its transcript survive.
|
|
915
|
+
|
|
916
|
+
**Input**
|
|
917
|
+
|
|
918
|
+
| Field | Type | Required | Description |
|
|
919
|
+
|---|---|---|---|
|
|
920
|
+
| `path.task_id` | `string` | yes | Meeting task id. |
|
|
921
|
+
|
|
922
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
923
|
+
|
|
924
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
925
|
+
|
|
926
|
+
**Example**
|
|
927
|
+
|
|
928
|
+
```ts
|
|
929
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
930
|
+
const result = await g8.api.aiInbox.deleteMeetingTask({ path: { task_id: "id" } });
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
---
|
|
934
|
+
|
|
935
|
+
<a id="op-disableinboxlinkedinaccount"></a>
|
|
936
|
+
|
|
937
|
+
### `g8.api.aiInbox.disableInboxLinkedinAccount(input)`
|
|
938
|
+
|
|
939
|
+
**Disable Inbox Linkedin Account**
|
|
940
|
+
|
|
941
|
+
- HTTP: `POST /api/v1/inbox/linkedin/accounts/{account_id}/disable`
|
|
942
|
+
- operationId: `disable_inbox_linkedin_account_inbox_linkedin_accounts__account_id__disable_post` (also callable as `g8.api.call("disable_inbox_linkedin_account_inbox_linkedin_accounts__account_id__disable_post", input)`)
|
|
943
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
944
|
+
- API-key scope: `inbox:write`
|
|
945
|
+
|
|
946
|
+
Take a LinkedIn account out of the inbox. Stops the AI answering on it;
|
|
947
|
+
its configuration is kept for when it is enabled again.
|
|
948
|
+
|
|
949
|
+
**Input**
|
|
950
|
+
|
|
951
|
+
| Field | Type | Required | Description |
|
|
952
|
+
|---|---|---|---|
|
|
953
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
954
|
+
|
|
955
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
956
|
+
|
|
957
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
958
|
+
|
|
959
|
+
**Example**
|
|
960
|
+
|
|
961
|
+
```ts
|
|
962
|
+
const result = await g8.api.aiInbox.disableInboxLinkedinAccount({ path: { account_id: 123 } });
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
---
|
|
966
|
+
|
|
967
|
+
<a id="op-downloadinboxattachment"></a>
|
|
968
|
+
|
|
969
|
+
### `g8.api.aiInbox.downloadInboxAttachment(input)`
|
|
970
|
+
|
|
971
|
+
**Download Inbox Attachment**
|
|
972
|
+
|
|
973
|
+
- HTTP: `GET /api/v1/inbox/attachments/{token}`
|
|
974
|
+
- operationId: `download_inbox_attachment_inbox_attachments__token__get` (also callable as `g8.api.call("download_inbox_attachment_inbox_attachments__token__get", input)`)
|
|
975
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
976
|
+
- API-key scope: `inbox:read`
|
|
977
|
+
|
|
978
|
+
Download a draft or internal-note attachment. Not enveloped: bytes are bytes.
|
|
979
|
+
|
|
980
|
+
The token only opens a file of THIS organisation: it is bound to the org
|
|
981
|
+
that uploaded it, and a token from anywhere else is a flat 404. Served
|
|
982
|
+
with `Content-Disposition: attachment` and `nosniff`, never inline.
|
|
983
|
+
|
|
984
|
+
**Input**
|
|
985
|
+
|
|
986
|
+
| Field | Type | Required | Description |
|
|
987
|
+
|---|---|---|---|
|
|
988
|
+
| `path.token` | `string` | yes | The `token` returned by `POST /inbox/drafts/attachments` or `POST /inbox/notes/attachments`. |
|
|
989
|
+
|
|
990
|
+
**Returns**: no JSON body is declared for the success response.
|
|
991
|
+
|
|
992
|
+
**Example**
|
|
993
|
+
|
|
994
|
+
```ts
|
|
995
|
+
const result = await g8.api.aiInbox.downloadInboxAttachment({ path: { token: "example" } });
|
|
996
|
+
```
|
|
997
|
+
|
|
998
|
+
---
|
|
999
|
+
|
|
1000
|
+
<a id="op-enableinboxlinkedinaccount"></a>
|
|
1001
|
+
|
|
1002
|
+
### `g8.api.aiInbox.enableInboxLinkedinAccount(input)`
|
|
1003
|
+
|
|
1004
|
+
**Enable Inbox Linkedin Account**
|
|
1005
|
+
|
|
1006
|
+
- HTTP: `POST /api/v1/inbox/linkedin/accounts/{account_id}/enable`
|
|
1007
|
+
- operationId: `enable_inbox_linkedin_account_inbox_linkedin_accounts__account_id__enable_post` (also callable as `g8.api.call("enable_inbox_linkedin_account_inbox_linkedin_accounts__account_id__enable_post", input)`)
|
|
1008
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
1009
|
+
- API-key scope: `inbox:run`
|
|
1010
|
+
|
|
1011
|
+
Bring a LinkedIn account's conversations into the inbox.
|
|
1012
|
+
|
|
1013
|
+
If the account's configuration already has `auto_respond` on, enabling it
|
|
1014
|
+
is what lets the AI start messaging people from it - so this is classified
|
|
1015
|
+
`external`, the same tier as the configuration update.
|
|
1016
|
+
|
|
1017
|
+
**Input**
|
|
1018
|
+
|
|
1019
|
+
| Field | Type | Required | Description |
|
|
1020
|
+
|---|---|---|---|
|
|
1021
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
1022
|
+
|
|
1023
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1024
|
+
|
|
1025
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1026
|
+
|
|
1027
|
+
**Example**
|
|
1028
|
+
|
|
1029
|
+
```ts
|
|
1030
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
1031
|
+
const result = await g8.api.aiInbox.enableInboxLinkedinAccount({ path: { account_id: 123 } });
|
|
1032
|
+
```
|
|
1033
|
+
|
|
1034
|
+
---
|
|
1035
|
+
|
|
1036
|
+
<a id="op-generateinboxdraft"></a>
|
|
1037
|
+
|
|
1038
|
+
### `g8.api.aiInbox.generateInboxDraft(input)`
|
|
1039
|
+
|
|
1040
|
+
**Generate Inbox Draft**
|
|
1041
|
+
|
|
1042
|
+
- HTTP: `POST /api/v1/inbox/drafts/generate`
|
|
1043
|
+
- operationId: `generate_inbox_draft_inbox_drafts_generate_post` (also callable as `g8.api.call("generate_inbox_draft_inbox_drafts_generate_post", input)`)
|
|
1044
|
+
- Tier: `billable`: spends credits; the SDK never blindly retries it; confirm cost before bulk use
|
|
1045
|
+
- API-key scope: `inbox:run`
|
|
1046
|
+
|
|
1047
|
+
Write or rewrite a message with the model. THIS SPENDS CREDITS.
|
|
1048
|
+
|
|
1049
|
+
DELIVERS NOTHING. It returns text; sending it is a separate, `external`
|
|
1050
|
+
call. Classified `billable` (`inbox:run`) because it charges - 402 when
|
|
1051
|
+
the organisation has no credits left.
|
|
1052
|
+
|
|
1053
|
+
ONE CHARGE PER CALL, including a multi-operation call: pass a LIST in
|
|
1054
|
+
`operation` to apply several transforms in a single generation rather than
|
|
1055
|
+
paying per transform.
|
|
1056
|
+
|
|
1057
|
+
`generate_from_scratch` is the only operation that does not need
|
|
1058
|
+
`message_html`; give it either a `conversation_id` + `channel_type` to
|
|
1059
|
+
ground the reply in the thread, or free-text `instructions` to write
|
|
1060
|
+
something with no thread at all.
|
|
1061
|
+
|
|
1062
|
+
Wider than the already-published `GET /inbox/{reply_id}/draft`, which only
|
|
1063
|
+
ever generates from scratch on an existing thread.
|
|
1064
|
+
|
|
1065
|
+
**Input**
|
|
1066
|
+
|
|
1067
|
+
| Field | Type | Required | Description |
|
|
1068
|
+
|---|---|---|---|
|
|
1069
|
+
| `body` | `AiDraftGenerateRequest` | yes | Request body; fields below. |
|
|
1070
|
+
|
|
1071
|
+
Body fields (`AiDraftGenerateRequest`):
|
|
1072
|
+
|
|
1073
|
+
| Field | Type | Required | Description |
|
|
1074
|
+
|---|---|---|---|
|
|
1075
|
+
| `body.operation` | `"change_tone" \| "fix_grammar_spelling" \| "change_objective" \| "expand" \| "shorten" \| "change_persona" \| "generate_from_scratch" \| Array<"change_tone" \| "fix_grammar_spelling" \| "change_objective" \| "expand" \| "shorten" \| "change_persona" \| "generate_from_scratch">` | yes | One operation, or several applied together in a single charged call. |
|
|
1076
|
+
| `body.channel_type` | `"email" \| "heyreach" \| "sms" \| null` | no | Required alongside `conversation_id`. `heyreach` is the LinkedIn channel and additionally needs `linkedin_account_id`. |
|
|
1077
|
+
| `body.conversation_id` | `string \| null` | no | Ground the draft in this thread's history. |
|
|
1078
|
+
| `body.instructions` | `string \| null` | no | Free-text prompt. With `generate_from_scratch` this writes a message with no thread at all. |
|
|
1079
|
+
| `body.linkedin_account_id` | `integer \| null` | no | |
|
|
1080
|
+
| `body.message_html` | `string` | no | The text to transform. Required by every operation except `generate_from_scratch`. default `""` |
|
|
1081
|
+
| `body.objective` | `"book_meeting" \| "follow_up" \| "re_engage" \| "provide_value" \| "handle_objection" \| "close_deal" \| null` | no | |
|
|
1082
|
+
| `body.persona` | `"sdr" \| "growth_manager" \| "account_executive" \| "customer_success" \| "founder" \| null` | no | |
|
|
1083
|
+
| `body.tone` | `"professional" \| "friendly" \| "casual" \| "assertive" \| "empathetic" \| "urgent" \| null` | no | |
|
|
1084
|
+
|
|
1085
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1086
|
+
|
|
1087
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1088
|
+
|
|
1089
|
+
**Example**
|
|
1090
|
+
|
|
1091
|
+
```ts
|
|
1092
|
+
// billable: spends credits; the SDK never blindly retries it; confirm cost before bulk use.
|
|
1093
|
+
const result = await g8.api.aiInbox.generateInboxDraft({ body: { operation: "change_tone" } });
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
---
|
|
1097
|
+
|
|
1098
|
+
<a id="op-getassigneeeligibility"></a>
|
|
1099
|
+
|
|
1100
|
+
### `g8.api.aiInbox.getAssigneeEligibility(input)`
|
|
1101
|
+
|
|
1102
|
+
**Get Assignee Eligibility**
|
|
1103
|
+
|
|
1104
|
+
- HTTP: `GET /api/v1/inbox/channels/{channel_id}/assignee-eligibility`
|
|
1105
|
+
- operationId: `get_assignee_eligibility_inbox_channels__channel_id__assignee_eligibility_get` (also callable as `g8.api.call("get_assignee_eligibility_inbox_channels__channel_id__assignee_eligibility_get", input)`)
|
|
1106
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1107
|
+
- API-key scope: `inbox:read`
|
|
1108
|
+
|
|
1109
|
+
Who can be given this conversation, and who cannot.
|
|
1110
|
+
|
|
1111
|
+
Read this before assigning: eligibility depends on the channel and on
|
|
1112
|
+
mailbox access, so a user who appears in `/inbox/users` is not necessarily
|
|
1113
|
+
assignable to THIS thread.
|
|
1114
|
+
|
|
1115
|
+
**Input**
|
|
1116
|
+
|
|
1117
|
+
| Field | Type | Required | Description |
|
|
1118
|
+
|---|---|---|---|
|
|
1119
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
1120
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
1121
|
+
|
|
1122
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1123
|
+
|
|
1124
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1125
|
+
|
|
1126
|
+
**Example**
|
|
1127
|
+
|
|
1128
|
+
```ts
|
|
1129
|
+
const result = await g8.api.aiInbox.getAssigneeEligibility({ path: { channel_id: "id" }, query: { channel_type: "email" } });
|
|
1130
|
+
```
|
|
1131
|
+
|
|
1132
|
+
---
|
|
1133
|
+
|
|
1134
|
+
<a id="op-getinboxcallresult"></a>
|
|
1135
|
+
|
|
1136
|
+
### `g8.api.aiInbox.getInboxCallResult(input)`
|
|
1137
|
+
|
|
1138
|
+
**Get Inbox Call Result**
|
|
1139
|
+
|
|
1140
|
+
- HTTP: `GET /api/v1/inbox/call-results/{call_id}`
|
|
1141
|
+
- operationId: `get_inbox_call_result_inbox_call_results__call_id__get` (also callable as `g8.api.call("get_inbox_call_result_inbox_call_results__call_id__get", input)`)
|
|
1142
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1143
|
+
- API-key scope: `inbox:read`
|
|
1144
|
+
|
|
1145
|
+
One call outcome, with its transcript, disposition and tags.
|
|
1146
|
+
|
|
1147
|
+
**Input**
|
|
1148
|
+
|
|
1149
|
+
| Field | Type | Required | Description |
|
|
1150
|
+
|---|---|---|---|
|
|
1151
|
+
| `path.call_id` | `integer` | yes | Integer call-result id. |
|
|
1152
|
+
|
|
1153
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1154
|
+
|
|
1155
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1156
|
+
|
|
1157
|
+
**Example**
|
|
1158
|
+
|
|
1159
|
+
```ts
|
|
1160
|
+
const result = await g8.api.aiInbox.getInboxCallResult({ path: { call_id: 123 } });
|
|
1161
|
+
```
|
|
1162
|
+
|
|
1163
|
+
---
|
|
1164
|
+
|
|
1165
|
+
<a id="op-getinboxchannel"></a>
|
|
1166
|
+
|
|
1167
|
+
### `g8.api.aiInbox.getInboxChannel(input)`
|
|
1168
|
+
|
|
1169
|
+
**Get Inbox Channel**
|
|
1170
|
+
|
|
1171
|
+
- HTTP: `GET /api/v1/inbox/channels/{channel_id}`
|
|
1172
|
+
- operationId: `get_inbox_channel_inbox_channels__channel_id__get` (also callable as `g8.api.call("get_inbox_channel_inbox_channels__channel_id__get", input)`)
|
|
1173
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1174
|
+
- API-key scope: `inbox:read`
|
|
1175
|
+
|
|
1176
|
+
One conversation in the unified inbox shape - messages, tags and
|
|
1177
|
+
assignees - for any channel.
|
|
1178
|
+
|
|
1179
|
+
The same row `GET /inbox` lists, fetched by id. Visibility is the app's:
|
|
1180
|
+
a thread in a personal mailbox is owner-only, so another person's key gets
|
|
1181
|
+
a 403/404 rather than the thread.
|
|
1182
|
+
|
|
1183
|
+
**Input**
|
|
1184
|
+
|
|
1185
|
+
| Field | Type | Required | Description |
|
|
1186
|
+
|---|---|---|---|
|
|
1187
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
1188
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels. |
|
|
1189
|
+
|
|
1190
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1191
|
+
|
|
1192
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1193
|
+
|
|
1194
|
+
**Example**
|
|
1195
|
+
|
|
1196
|
+
```ts
|
|
1197
|
+
const result = await g8.api.aiInbox.getInboxChannel({ path: { channel_id: "id" }, query: { channel_type: "email" } });
|
|
1198
|
+
```
|
|
1199
|
+
|
|
1200
|
+
---
|
|
1201
|
+
|
|
1202
|
+
<a id="op-getinboxemailsettings"></a>
|
|
1203
|
+
|
|
1204
|
+
### `g8.api.aiInbox.getInboxEmailSettings(input?)`
|
|
1205
|
+
|
|
1206
|
+
**Get Inbox Email Settings**
|
|
1207
|
+
|
|
1208
|
+
- HTTP: `GET /api/v1/inbox/email-settings`
|
|
1209
|
+
- operationId: `get_inbox_email_settings_inbox_email_settings_get` (also callable as `g8.api.call("get_inbox_email_settings_inbox_email_settings_get", input)`)
|
|
1210
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1211
|
+
- API-key scope: `inbox:read`
|
|
1212
|
+
|
|
1213
|
+
The organisation's AI Inbox email settings.
|
|
1214
|
+
|
|
1215
|
+
ORGANISATION-WIDE - there is no per-user copy, so a change here moves the
|
|
1216
|
+
behaviour for everyone. Answers `{"message": "Email settings not found"}`
|
|
1217
|
+
rather than 404 when nothing has been configured yet.
|
|
1218
|
+
|
|
1219
|
+
**Input**: none.
|
|
1220
|
+
|
|
1221
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1222
|
+
|
|
1223
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1224
|
+
|
|
1225
|
+
**Example**
|
|
1226
|
+
|
|
1227
|
+
```ts
|
|
1228
|
+
const result = await g8.api.aiInbox.getInboxEmailSettings();
|
|
1229
|
+
```
|
|
1230
|
+
|
|
1231
|
+
---
|
|
1232
|
+
|
|
1233
|
+
<a id="op-getinboxlinkedinaccount"></a>
|
|
1234
|
+
|
|
1235
|
+
### `g8.api.aiInbox.getInboxLinkedinAccount(input)`
|
|
1236
|
+
|
|
1237
|
+
**Get Inbox Linkedin Account**
|
|
1238
|
+
|
|
1239
|
+
- HTTP: `GET /api/v1/inbox/linkedin/accounts/{account_id}`
|
|
1240
|
+
- operationId: `get_inbox_linkedin_account_inbox_linkedin_accounts__account_id__get` (also callable as `g8.api.call("get_inbox_linkedin_account_inbox_linkedin_accounts__account_id__get", input)`)
|
|
1241
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1242
|
+
- API-key scope: `inbox:read`
|
|
1243
|
+
|
|
1244
|
+
One LinkedIn account's inbox configuration - enabled, auto-respond and
|
|
1245
|
+
its rules, the sequence it is attributed to - plus the cached profile.
|
|
1246
|
+
The read side of `PUT /inbox/linkedin/accounts/{account_id}`; 404 until the
|
|
1247
|
+
account has been synced.
|
|
1248
|
+
|
|
1249
|
+
**Input**
|
|
1250
|
+
|
|
1251
|
+
| Field | Type | Required | Description |
|
|
1252
|
+
|---|---|---|---|
|
|
1253
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
1254
|
+
|
|
1255
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1256
|
+
|
|
1257
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1258
|
+
|
|
1259
|
+
**Example**
|
|
1260
|
+
|
|
1261
|
+
```ts
|
|
1262
|
+
const result = await g8.api.aiInbox.getInboxLinkedinAccount({ path: { account_id: 123 } });
|
|
1263
|
+
```
|
|
1264
|
+
|
|
1265
|
+
---
|
|
1266
|
+
|
|
1267
|
+
<a id="op-getinboxlinkedinconversation"></a>
|
|
1268
|
+
|
|
1269
|
+
### `g8.api.aiInbox.getInboxLinkedinConversation(input)`
|
|
1270
|
+
|
|
1271
|
+
**Get Inbox Linkedin Conversation**
|
|
1272
|
+
|
|
1273
|
+
- HTTP: `GET /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}`
|
|
1274
|
+
- operationId: `get_inbox_linkedin_conversation_inbox_linkedin_accounts__account_id__conversations__conversation_id__get` (also callable as `g8.api.call("get_inbox_linkedin_conversation_inbox_linkedin_accounts__account_id__conversations__conversation_id__get", input)`)
|
|
1275
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1276
|
+
- API-key scope: `inbox:read`
|
|
1277
|
+
|
|
1278
|
+
One LinkedIn conversation, with its whole message history.
|
|
1279
|
+
|
|
1280
|
+
BOTH ids are required and neither is redundant: the same conversation id
|
|
1281
|
+
can appear under two LinkedIn accounts, so the account is what identifies
|
|
1282
|
+
the thread rather than filtering it.
|
|
1283
|
+
|
|
1284
|
+
**Input**
|
|
1285
|
+
|
|
1286
|
+
| Field | Type | Required | Description |
|
|
1287
|
+
|---|---|---|---|
|
|
1288
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
1289
|
+
| `path.conversation_id` | `string` | yes | LinkedIn conversation id. |
|
|
1290
|
+
|
|
1291
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1292
|
+
|
|
1293
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1294
|
+
|
|
1295
|
+
**Example**
|
|
1296
|
+
|
|
1297
|
+
```ts
|
|
1298
|
+
const result = await g8.api.aiInbox.getInboxLinkedinConversation({ path: { account_id: 123, conversation_id: "id" } });
|
|
1299
|
+
```
|
|
1300
|
+
|
|
1301
|
+
---
|
|
1302
|
+
|
|
1303
|
+
<a id="op-getinboxlinkedinconversationdetail"></a>
|
|
1304
|
+
|
|
1305
|
+
### `g8.api.aiInbox.getInboxLinkedinConversationDetail(input)`
|
|
1306
|
+
|
|
1307
|
+
**Get Inbox Linkedin Conversation Detail**
|
|
1308
|
+
|
|
1309
|
+
- HTTP: `GET /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/detail`
|
|
1310
|
+
- operationId: `get_inbox_linkedin_conversation_detail_inbox_linkedin_accounts__account_id__conversations__conversation_id__detail_get` (also callable as `g8.api.call("get_inbox_linkedin_conversation_detail_inbox_linkedin_accounts__account_id__conversations__conversation_id__detail_get", input)`)
|
|
1311
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1312
|
+
- API-key scope: `inbox:read`
|
|
1313
|
+
|
|
1314
|
+
One LinkedIn conversation MERGED with what graph8 holds about it: the
|
|
1315
|
+
AI analysis, the linked contact, tags, the saved draft and assignees.
|
|
1316
|
+
|
|
1317
|
+
`GET .../conversations/{conversation_id}` is the provider's view alone;
|
|
1318
|
+
this is the view the inbox renders.
|
|
1319
|
+
|
|
1320
|
+
**Input**
|
|
1321
|
+
|
|
1322
|
+
| Field | Type | Required | Description |
|
|
1323
|
+
|---|---|---|---|
|
|
1324
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
1325
|
+
| `path.conversation_id` | `string` | yes | LinkedIn conversation id. |
|
|
1326
|
+
|
|
1327
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1328
|
+
|
|
1329
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1330
|
+
|
|
1331
|
+
**Example**
|
|
1332
|
+
|
|
1333
|
+
```ts
|
|
1334
|
+
const result = await g8.api.aiInbox.getInboxLinkedinConversationDetail({ path: { account_id: 123, conversation_id: "id" } });
|
|
1335
|
+
```
|
|
1336
|
+
|
|
1337
|
+
---
|
|
1338
|
+
|
|
1339
|
+
<a id="op-getinboxmailboxsync"></a>
|
|
1340
|
+
|
|
1341
|
+
### `g8.api.aiInbox.getInboxMailboxSync(input)`
|
|
1342
|
+
|
|
1343
|
+
**Get Inbox Mailbox Sync**
|
|
1344
|
+
|
|
1345
|
+
- HTTP: `GET /api/v1/inbox/mailboxes/{mailbox}/sync`
|
|
1346
|
+
- operationId: `get_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_get` (also callable as `g8.api.call("get_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_get", input)`)
|
|
1347
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1348
|
+
- API-key scope: `inbox:read`
|
|
1349
|
+
|
|
1350
|
+
Is this mailbox being polled, and how did the last round go.
|
|
1351
|
+
|
|
1352
|
+
A mailbox that was never connected is not an error - it answers
|
|
1353
|
+
`{"status": "STOPPED"}`.
|
|
1354
|
+
|
|
1355
|
+
NOTE the asymmetry this proxy has to respect: the internal handler takes
|
|
1356
|
+
NO `current_user`, while its siblings do. Supplying one would be a
|
|
1357
|
+
TypeError on every call.
|
|
1358
|
+
|
|
1359
|
+
**Input**
|
|
1360
|
+
|
|
1361
|
+
| Field | Type | Required | Description |
|
|
1362
|
+
|---|---|---|---|
|
|
1363
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
1364
|
+
| `query.provider` | `"google_mailbox" \| "smtp"` | yes | How the mailbox is connected. REQUIRED and not inferred: the same address can be connected either way, and guessing would act on the wrong transport. Closed to a Literal so an unknown value is a 422 naming both, rather than a `ValueError` raised inside the handler. |
|
|
1365
|
+
|
|
1366
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1367
|
+
|
|
1368
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1369
|
+
|
|
1370
|
+
**Example**
|
|
1371
|
+
|
|
1372
|
+
```ts
|
|
1373
|
+
const result = await g8.api.aiInbox.getInboxMailboxSync({
|
|
1374
|
+
path: { mailbox: "example" },
|
|
1375
|
+
query: { provider: "google_mailbox" },
|
|
1376
|
+
});
|
|
1377
|
+
```
|
|
1378
|
+
|
|
1379
|
+
---
|
|
1380
|
+
|
|
1381
|
+
<a id="op-getinboxtagagent"></a>
|
|
1382
|
+
|
|
1383
|
+
### `g8.api.aiInbox.getInboxTagAgent(input)`
|
|
1384
|
+
|
|
1385
|
+
**Get Inbox Tag Agent**
|
|
1386
|
+
|
|
1387
|
+
- HTTP: `GET /api/v1/inbox/tags/{tag_id}/agent`
|
|
1388
|
+
- operationId: `get_inbox_tag_agent_inbox_tags__tag_id__agent_get` (also callable as `g8.api.call("get_inbox_tag_agent_inbox_tags__tag_id__agent_get", input)`)
|
|
1389
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1390
|
+
- API-key scope: `inbox:read`
|
|
1391
|
+
|
|
1392
|
+
Which AI agent answers threads carrying this tag.
|
|
1393
|
+
|
|
1394
|
+
The bridge between a label and a behaviour: tagging a thread with a tag
|
|
1395
|
+
that has an agent is how that agent gets the conversation.
|
|
1396
|
+
|
|
1397
|
+
**Input**
|
|
1398
|
+
|
|
1399
|
+
| Field | Type | Required | Description |
|
|
1400
|
+
|---|---|---|---|
|
|
1401
|
+
| `path.tag_id` | `string` | yes | Tag id. |
|
|
1402
|
+
|
|
1403
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1404
|
+
|
|
1405
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1406
|
+
|
|
1407
|
+
**Example**
|
|
1408
|
+
|
|
1409
|
+
```ts
|
|
1410
|
+
const result = await g8.api.aiInbox.getInboxTagAgent({ path: { tag_id: "id" } });
|
|
1411
|
+
```
|
|
1412
|
+
|
|
1413
|
+
---
|
|
1414
|
+
|
|
1415
|
+
<a id="op-getinboxworkspace"></a>
|
|
1416
|
+
|
|
1417
|
+
### `g8.api.aiInbox.getInboxWorkspace(input)`
|
|
1418
|
+
|
|
1419
|
+
**Get Inbox Workspace**
|
|
1420
|
+
|
|
1421
|
+
- HTTP: `GET /api/v1/inbox/workspaces/{workspace_id}`
|
|
1422
|
+
- operationId: `get_inbox_workspace_inbox_workspaces__workspace_id__get` (also callable as `g8.api.call("get_inbox_workspace_inbox_workspaces__workspace_id__get", input)`)
|
|
1423
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1424
|
+
- API-key scope: `inbox:read`
|
|
1425
|
+
|
|
1426
|
+
One workspace, with its mailboxes.
|
|
1427
|
+
|
|
1428
|
+
**Input**
|
|
1429
|
+
|
|
1430
|
+
| Field | Type | Required | Description |
|
|
1431
|
+
|---|---|---|---|
|
|
1432
|
+
| `path.workspace_id` | `string` | yes | Workspace id (UUID). |
|
|
1433
|
+
|
|
1434
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1435
|
+
|
|
1436
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1437
|
+
|
|
1438
|
+
**Example**
|
|
1439
|
+
|
|
1440
|
+
```ts
|
|
1441
|
+
const result = await g8.api.aiInbox.getInboxWorkspace({ path: { workspace_id: "id" } });
|
|
1442
|
+
```
|
|
1443
|
+
|
|
1444
|
+
---
|
|
1445
|
+
|
|
1446
|
+
<a id="op-getsequencechannels"></a>
|
|
1447
|
+
|
|
1448
|
+
### `g8.api.aiInbox.getSequenceChannels(input)`
|
|
1449
|
+
|
|
1450
|
+
**Get Sequence Channels**
|
|
1451
|
+
|
|
1452
|
+
- HTTP: `GET /api/v1/inbox/workspaces/sequence-channels/{sequence_id}`
|
|
1453
|
+
- operationId: `get_sequence_channels_inbox_workspaces_sequence_channels__sequence_id__get` (also callable as `g8.api.call("get_sequence_channels_inbox_workspaces_sequence_channels__sequence_id__get", input)`)
|
|
1454
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1455
|
+
- API-key scope: `inbox:read`
|
|
1456
|
+
|
|
1457
|
+
The conversations a sequence produced.
|
|
1458
|
+
|
|
1459
|
+
The bridge between a sequence and its replies: what went out, and what
|
|
1460
|
+
came back.
|
|
1461
|
+
|
|
1462
|
+
**Input**
|
|
1463
|
+
|
|
1464
|
+
| Field | Type | Required | Description |
|
|
1465
|
+
|---|---|---|---|
|
|
1466
|
+
| `path.sequence_id` | `string` | yes | Sequence id. |
|
|
1467
|
+
|
|
1468
|
+
**Returns** `ApiResponse_InboxListPayload_`: the envelope `{ data: InboxListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1469
|
+
|
|
1470
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1471
|
+
|
|
1472
|
+
`InboxListPayload` fields:
|
|
1473
|
+
|
|
1474
|
+
| Field | Type | Required | Description |
|
|
1475
|
+
|---|---|---|---|
|
|
1476
|
+
| `items` | `Array<unknown>` | no | |
|
|
1477
|
+
|
|
1478
|
+
**Example**
|
|
1479
|
+
|
|
1480
|
+
```ts
|
|
1481
|
+
const result = await g8.api.aiInbox.getSequenceChannels({ path: { sequence_id: "id" } });
|
|
1482
|
+
```
|
|
1483
|
+
|
|
1484
|
+
---
|
|
1485
|
+
|
|
1486
|
+
<a id="op-getworkspaceunreadcounts"></a>
|
|
1487
|
+
|
|
1488
|
+
### `g8.api.aiInbox.getWorkspaceUnreadCounts(input?)`
|
|
1489
|
+
|
|
1490
|
+
**Get Workspace Unread Counts**
|
|
1491
|
+
|
|
1492
|
+
- HTTP: `GET /api/v1/inbox/workspaces/unread-counts`
|
|
1493
|
+
- operationId: `get_workspace_unread_counts_inbox_workspaces_unread_counts_get` (also callable as `g8.api.call("get_workspace_unread_counts_inbox_workspaces_unread_counts_get", input)`)
|
|
1494
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1495
|
+
- API-key scope: `inbox:read`
|
|
1496
|
+
|
|
1497
|
+
Unread per workspace, in one call.
|
|
1498
|
+
|
|
1499
|
+
Declared BEFORE `/workspaces/{workspace_id}` so the literal wins - the id
|
|
1500
|
+
route would otherwise match `unread-counts` and fail parsing it as a UUID.
|
|
1501
|
+
|
|
1502
|
+
**Input**: none.
|
|
1503
|
+
|
|
1504
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1505
|
+
|
|
1506
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1507
|
+
|
|
1508
|
+
**Example**
|
|
1509
|
+
|
|
1510
|
+
```ts
|
|
1511
|
+
const result = await g8.api.aiInbox.getWorkspaceUnreadCounts();
|
|
1512
|
+
```
|
|
1513
|
+
|
|
1514
|
+
---
|
|
1515
|
+
|
|
1516
|
+
<a id="op-linkinboxemailtosequence"></a>
|
|
1517
|
+
|
|
1518
|
+
### `g8.api.aiInbox.linkInboxEmailToSequence(input)`
|
|
1519
|
+
|
|
1520
|
+
**Link Inbox Email To Sequence**
|
|
1521
|
+
|
|
1522
|
+
- HTTP: `POST /api/v1/inbox/emails/{email_id}/link-sequence`
|
|
1523
|
+
- operationId: `link_inbox_email_to_sequence_inbox_emails__email_id__link_sequence_post` (also callable as `g8.api.call("link_inbox_email_to_sequence_inbox_emails__email_id__link_sequence_post", input)`)
|
|
1524
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
1525
|
+
- API-key scope: `inbox:write`
|
|
1526
|
+
|
|
1527
|
+
Attach a thread to the sequence that produced it AND STOP THE SEQUENCE.
|
|
1528
|
+
|
|
1529
|
+
The second half is the point, not a side effect: linking tells the
|
|
1530
|
+
sequencer this contact replied, which halts their remaining steps. It is
|
|
1531
|
+
how someone who answered stops being chased.
|
|
1532
|
+
|
|
1533
|
+
Only a sequence from `sequence-candidates` is accepted. If the sequencer
|
|
1534
|
+
call fails the link is KEPT - the association is committed first - so a
|
|
1535
|
+
successful response with `already_replied: false` after a provider hiccup
|
|
1536
|
+
can mean the halt did not register. Re-linking is safe.
|
|
1537
|
+
|
|
1538
|
+
**Input**
|
|
1539
|
+
|
|
1540
|
+
| Field | Type | Required | Description |
|
|
1541
|
+
|---|---|---|---|
|
|
1542
|
+
| `path.email_id` | `string` | yes | Email thread id. |
|
|
1543
|
+
| `body` | `LinkSequenceRequest` | yes | Request body; fields below. |
|
|
1544
|
+
|
|
1545
|
+
Body fields (`LinkSequenceRequest`):
|
|
1546
|
+
|
|
1547
|
+
| Field | Type | Required | Description |
|
|
1548
|
+
|---|---|---|---|
|
|
1549
|
+
| `body.contact_id` | `integer` | yes | Integer contact id - the CDP primary key, not an email address. |
|
|
1550
|
+
| `body.sequence_id` | `string` | yes | From `GET /inbox/emails/{email_id}/sequence-candidates`. Only sequences that actually emailed this contact are accepted. |
|
|
1551
|
+
|
|
1552
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1553
|
+
|
|
1554
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1555
|
+
|
|
1556
|
+
**Example**
|
|
1557
|
+
|
|
1558
|
+
```ts
|
|
1559
|
+
const result = await g8.api.aiInbox.linkInboxEmailToSequence({
|
|
1560
|
+
path: { email_id: "jane@acme.com" },
|
|
1561
|
+
body: { contact_id: 123, sequence_id: "id" },
|
|
1562
|
+
});
|
|
1563
|
+
```
|
|
1564
|
+
|
|
1565
|
+
---
|
|
1566
|
+
|
|
1567
|
+
<a id="op-linkmeetingtranscript"></a>
|
|
1568
|
+
|
|
1569
|
+
### `g8.api.aiInbox.linkMeetingTranscript(input)`
|
|
1570
|
+
|
|
1571
|
+
**Link Meeting Transcript**
|
|
1572
|
+
|
|
1573
|
+
- HTTP: `POST /api/v1/inbox/meetings/{meeting_id}/transcript-link`
|
|
1574
|
+
- operationId: `link_meeting_transcript_inbox_meetings__meeting_id__transcript_link_post` (also callable as `g8.api.call("link_meeting_transcript_inbox_meetings__meeting_id__transcript_link_post", input)`)
|
|
1575
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
1576
|
+
- API-key scope: `meetings:write`
|
|
1577
|
+
|
|
1578
|
+
Attach an existing transcript to a meeting.
|
|
1579
|
+
|
|
1580
|
+
Contacts nobody. It corrects the RECORD - which recording belongs to which
|
|
1581
|
+
calendar event - when the automatic match got it wrong or never ran.
|
|
1582
|
+
|
|
1583
|
+
Who may then read that transcript is a separate question, answered by
|
|
1584
|
+
`PATCH /inbox/meetings/{id}/sensitivity`.
|
|
1585
|
+
|
|
1586
|
+
**Input**
|
|
1587
|
+
|
|
1588
|
+
| Field | Type | Required | Description |
|
|
1589
|
+
|---|---|---|---|
|
|
1590
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
1591
|
+
| `body` | `MeetingTranscriptLinkRequest` | yes | Request body; fields below. |
|
|
1592
|
+
|
|
1593
|
+
Body fields (`MeetingTranscriptLinkRequest`):
|
|
1594
|
+
|
|
1595
|
+
| Field | Type | Required | Description |
|
|
1596
|
+
|---|---|---|---|
|
|
1597
|
+
| `body.transcript_id` | `string` | yes | Id of a transcript that already exists in this organisation. |
|
|
1598
|
+
|
|
1599
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1600
|
+
|
|
1601
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1602
|
+
|
|
1603
|
+
**Example**
|
|
1604
|
+
|
|
1605
|
+
```ts
|
|
1606
|
+
const result = await g8.api.aiInbox.linkMeetingTranscript({ path: { meeting_id: "id" }, body: { transcript_id: "id" } });
|
|
1607
|
+
```
|
|
1608
|
+
|
|
1609
|
+
---
|
|
1610
|
+
|
|
1611
|
+
<a id="op-listallinboxmailboxes"></a>
|
|
1612
|
+
|
|
1613
|
+
### `g8.api.aiInbox.listAllInboxMailboxes(input?)`
|
|
1614
|
+
|
|
1615
|
+
**List All Inbox Mailboxes**
|
|
1616
|
+
|
|
1617
|
+
- HTTP: `GET /api/v1/inbox/mailboxes/all`
|
|
1618
|
+
- operationId: `list_all_inbox_mailboxes_inbox_mailboxes_all_get` (also callable as `g8.api.call("list_all_inbox_mailboxes_inbox_mailboxes_all_get", input)`)
|
|
1619
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1620
|
+
- API-key scope: `inbox:read`
|
|
1621
|
+
|
|
1622
|
+
Team AND personal mailboxes in one list, unfiltered.
|
|
1623
|
+
|
|
1624
|
+
A three-segment LITERAL, declared before nothing that would swallow it -
|
|
1625
|
+
there is no `/inbox/mailboxes/{mailbox}` route, only deeper ones - but
|
|
1626
|
+
kept distinct from `GET /inbox/mailboxes` because that route defaults to
|
|
1627
|
+
a narrower set and callers reading only the obvious one would miss
|
|
1628
|
+
mailboxes.
|
|
1629
|
+
|
|
1630
|
+
**Input**
|
|
1631
|
+
|
|
1632
|
+
| Field | Type | Required | Description |
|
|
1633
|
+
|---|---|---|---|
|
|
1634
|
+
| `query.user_email` | `string \| null` | no | Whose personal mailboxes to include. Defaults to this key's human. |
|
|
1635
|
+
|
|
1636
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1637
|
+
|
|
1638
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1639
|
+
|
|
1640
|
+
`InboxOpsListPayload` fields:
|
|
1641
|
+
|
|
1642
|
+
| Field | Type | Required | Description |
|
|
1643
|
+
|---|---|---|---|
|
|
1644
|
+
| `items` | `Array<unknown>` | no | |
|
|
1645
|
+
|
|
1646
|
+
**Example**
|
|
1647
|
+
|
|
1648
|
+
```ts
|
|
1649
|
+
const result = await g8.api.aiInbox.listAllInboxMailboxes();
|
|
1650
|
+
```
|
|
1651
|
+
|
|
1652
|
+
---
|
|
1653
|
+
|
|
1654
|
+
<a id="op-listassignablemeetingusers"></a>
|
|
1655
|
+
|
|
1656
|
+
### `g8.api.aiInbox.listAssignableMeetingUsers(input)`
|
|
1657
|
+
|
|
1658
|
+
**List Assignable Meeting Users**
|
|
1659
|
+
|
|
1660
|
+
- HTTP: `GET /api/v1/inbox/meetings/{meeting_id}/assignable-users`
|
|
1661
|
+
- operationId: `list_assignable_meeting_users_inbox_meetings__meeting_id__assignable_users_get` (also callable as `g8.api.call("list_assignable_meeting_users_inbox_meetings__meeting_id__assignable_users_get", input)`)
|
|
1662
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1663
|
+
- API-key scope: `meetings:read`
|
|
1664
|
+
|
|
1665
|
+
Who a task on this meeting may be given to.
|
|
1666
|
+
|
|
1667
|
+
PARTICIPANTS ONLY, mapped to their team-member records. Read this before
|
|
1668
|
+
creating a task: the server re-validates the assignee against the same
|
|
1669
|
+
list, so an arbitrary colleague is refused rather than silently accepted.
|
|
1670
|
+
|
|
1671
|
+
**Input**
|
|
1672
|
+
|
|
1673
|
+
| Field | Type | Required | Description |
|
|
1674
|
+
|---|---|---|---|
|
|
1675
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
1676
|
+
|
|
1677
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1678
|
+
|
|
1679
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1680
|
+
|
|
1681
|
+
`InboxOpsListPayload` fields:
|
|
1682
|
+
|
|
1683
|
+
| Field | Type | Required | Description |
|
|
1684
|
+
|---|---|---|---|
|
|
1685
|
+
| `items` | `Array<unknown>` | no | |
|
|
1686
|
+
|
|
1687
|
+
**Example**
|
|
1688
|
+
|
|
1689
|
+
```ts
|
|
1690
|
+
const result = await g8.api.aiInbox.listAssignableMeetingUsers({ path: { meeting_id: "id" } });
|
|
1691
|
+
```
|
|
1692
|
+
|
|
1693
|
+
---
|
|
1694
|
+
|
|
1695
|
+
<a id="op-listchannelcomments"></a>
|
|
1696
|
+
|
|
1697
|
+
### `g8.api.aiInbox.listChannelComments(input)`
|
|
1698
|
+
|
|
1699
|
+
**List Channel Comments**
|
|
1700
|
+
|
|
1701
|
+
- HTTP: `GET /api/v1/inbox/channels/{channel_id}/comments`
|
|
1702
|
+
- operationId: `list_channel_comments_inbox_channels__channel_id__comments_get` (also callable as `g8.api.call("list_channel_comments_inbox_channels__channel_id__comments_get", input)`)
|
|
1703
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1704
|
+
- API-key scope: `inbox:read`
|
|
1705
|
+
|
|
1706
|
+
Internal notes on a conversation. The customer never sees these.
|
|
1707
|
+
|
|
1708
|
+
**Input**
|
|
1709
|
+
|
|
1710
|
+
| Field | Type | Required | Description |
|
|
1711
|
+
|---|---|---|---|
|
|
1712
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
1713
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
1714
|
+
|
|
1715
|
+
**Returns** `ApiResponse_InboxListPayload_`: the envelope `{ data: InboxListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1716
|
+
|
|
1717
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1718
|
+
|
|
1719
|
+
`InboxListPayload` fields:
|
|
1720
|
+
|
|
1721
|
+
| Field | Type | Required | Description |
|
|
1722
|
+
|---|---|---|---|
|
|
1723
|
+
| `items` | `Array<unknown>` | no | |
|
|
1724
|
+
|
|
1725
|
+
**Example**
|
|
1726
|
+
|
|
1727
|
+
```ts
|
|
1728
|
+
const result = await g8.api.aiInbox.listChannelComments({ path: { channel_id: "id" }, query: { channel_type: "email" } });
|
|
1729
|
+
```
|
|
1730
|
+
|
|
1731
|
+
---
|
|
1732
|
+
|
|
1733
|
+
<a id="op-listinboxblockedsenders"></a>
|
|
1734
|
+
|
|
1735
|
+
### `g8.api.aiInbox.listInboxBlockedSenders(input?)`
|
|
1736
|
+
|
|
1737
|
+
**List Inbox Blocked Senders**
|
|
1738
|
+
|
|
1739
|
+
- HTTP: `GET /api/v1/inbox/blocked-senders`
|
|
1740
|
+
- operationId: `list_inbox_blocked_senders_inbox_blocked_senders_get` (also callable as `g8.api.call("list_inbox_blocked_senders_inbox_blocked_senders_get", input)`)
|
|
1741
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1742
|
+
- API-key scope: `inbox:read`
|
|
1743
|
+
|
|
1744
|
+
Senders the inbox refuses to ingest, per mailbox.
|
|
1745
|
+
|
|
1746
|
+
**Input**
|
|
1747
|
+
|
|
1748
|
+
| Field | Type | Required | Description |
|
|
1749
|
+
|---|---|---|---|
|
|
1750
|
+
| `query.page` | `integer` | no | default `1` |
|
|
1751
|
+
| `query.page_size` | `integer` | no | default `10` |
|
|
1752
|
+
|
|
1753
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1754
|
+
|
|
1755
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1756
|
+
|
|
1757
|
+
`InboxOpsListPayload` fields:
|
|
1758
|
+
|
|
1759
|
+
| Field | Type | Required | Description |
|
|
1760
|
+
|---|---|---|---|
|
|
1761
|
+
| `items` | `Array<unknown>` | no | |
|
|
1762
|
+
|
|
1763
|
+
**Example**
|
|
1764
|
+
|
|
1765
|
+
```ts
|
|
1766
|
+
const result = await g8.api.aiInbox.listInboxBlockedSenders();
|
|
1767
|
+
```
|
|
1768
|
+
|
|
1769
|
+
---
|
|
1770
|
+
|
|
1771
|
+
<a id="op-listinboxemailsequencecandidates"></a>
|
|
1772
|
+
|
|
1773
|
+
### `g8.api.aiInbox.listInboxEmailSequenceCandidates(input)`
|
|
1774
|
+
|
|
1775
|
+
**List Inbox Email Sequence Candidates**
|
|
1776
|
+
|
|
1777
|
+
- HTTP: `GET /api/v1/inbox/emails/{email_id}/sequence-candidates`
|
|
1778
|
+
- operationId: `list_inbox_email_sequence_candidates_inbox_emails__email_id__sequence_candidates_get` (also callable as `g8.api.call("list_inbox_email_sequence_candidates_inbox_emails__email_id__sequence_candidates_get", input)`)
|
|
1779
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1780
|
+
- API-key scope: `inbox:read`
|
|
1781
|
+
|
|
1782
|
+
Sequences this contact was ACTUALLY emailed from.
|
|
1783
|
+
|
|
1784
|
+
The only sequences `link-sequence` will accept, so read this first - it is
|
|
1785
|
+
the safety guard, not a convenience. Scoping is by organisation and
|
|
1786
|
+
contact; the thread id is in the path for symmetry with the link call.
|
|
1787
|
+
|
|
1788
|
+
**Input**
|
|
1789
|
+
|
|
1790
|
+
| Field | Type | Required | Description |
|
|
1791
|
+
|---|---|---|---|
|
|
1792
|
+
| `path.email_id` | `string` | yes | Email thread id. |
|
|
1793
|
+
| `query.contact_id` | `integer` | yes | Integer contact id - the CDP primary key, not an email address. |
|
|
1794
|
+
|
|
1795
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1796
|
+
|
|
1797
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1798
|
+
|
|
1799
|
+
`InboxOpsListPayload` fields:
|
|
1800
|
+
|
|
1801
|
+
| Field | Type | Required | Description |
|
|
1802
|
+
|---|---|---|---|
|
|
1803
|
+
| `items` | `Array<unknown>` | no | |
|
|
1804
|
+
|
|
1805
|
+
**Example**
|
|
1806
|
+
|
|
1807
|
+
```ts
|
|
1808
|
+
const result = await g8.api.aiInbox.listInboxEmailSequenceCandidates({ path: { email_id: "jane@acme.com" }, query: { contact_id: 123 } });
|
|
1809
|
+
```
|
|
1810
|
+
|
|
1811
|
+
---
|
|
1812
|
+
|
|
1813
|
+
<a id="op-listinboxemailsettingstimezones"></a>
|
|
1814
|
+
|
|
1815
|
+
### `g8.api.aiInbox.listInboxEmailSettingsTimezones(input?)`
|
|
1816
|
+
|
|
1817
|
+
**List Inbox Email Settings Timezones**
|
|
1818
|
+
|
|
1819
|
+
- HTTP: `GET /api/v1/inbox/email-settings/timezones`
|
|
1820
|
+
- operationId: `list_inbox_email_settings_timezones_inbox_email_settings_timezones_get` (also callable as `g8.api.call("list_inbox_email_settings_timezones_inbox_email_settings_timezones_get", input)`)
|
|
1821
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1822
|
+
- API-key scope: `inbox:read`
|
|
1823
|
+
|
|
1824
|
+
Every timezone name `timezone` in the email settings accepts (IANA
|
|
1825
|
+
names, as `items`). Static - it does not depend on the organisation.
|
|
1826
|
+
|
|
1827
|
+
**Input**: none.
|
|
1828
|
+
|
|
1829
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1830
|
+
|
|
1831
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1832
|
+
|
|
1833
|
+
`InboxOpsListPayload` fields:
|
|
1834
|
+
|
|
1835
|
+
| Field | Type | Required | Description |
|
|
1836
|
+
|---|---|---|---|
|
|
1837
|
+
| `items` | `Array<unknown>` | no | |
|
|
1838
|
+
|
|
1839
|
+
**Example**
|
|
1840
|
+
|
|
1841
|
+
```ts
|
|
1842
|
+
const result = await g8.api.aiInbox.listInboxEmailSettingsTimezones();
|
|
1843
|
+
```
|
|
1844
|
+
|
|
1845
|
+
---
|
|
1846
|
+
|
|
1847
|
+
<a id="op-listinboxemailsbysequence"></a>
|
|
1848
|
+
|
|
1849
|
+
### `g8.api.aiInbox.listInboxEmailsBySequence(input)`
|
|
1850
|
+
|
|
1851
|
+
**List Inbox Emails By Sequence**
|
|
1852
|
+
|
|
1853
|
+
- HTTP: `GET /api/v1/inbox/emails/by-sequence/{sequence_id}`
|
|
1854
|
+
- operationId: `list_inbox_emails_by_sequence_inbox_emails_by_sequence__sequence_id__get` (also callable as `g8.api.call("list_inbox_emails_by_sequence_inbox_emails_by_sequence__sequence_id__get", input)`)
|
|
1855
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1856
|
+
- API-key scope: `inbox:read`
|
|
1857
|
+
|
|
1858
|
+
Email threads attributed to one sequence, newest first.
|
|
1859
|
+
|
|
1860
|
+
A narrow projection - messages, mailbox and `updated_at` only - which is
|
|
1861
|
+
what makes it cheap enough to page through a whole campaign.
|
|
1862
|
+
`GET /inbox?channel=email&sequence_id=...` answers the same question with
|
|
1863
|
+
the full unified thread shape; use that when you need tags and assignees.
|
|
1864
|
+
|
|
1865
|
+
Declared BEFORE nothing, but note the shape: `by-sequence` is a LITERAL in
|
|
1866
|
+
the position `/inbox/emails/{email_id}` fills at one segment shorter, so
|
|
1867
|
+
the two cannot collide.
|
|
1868
|
+
|
|
1869
|
+
**Input**
|
|
1870
|
+
|
|
1871
|
+
| Field | Type | Required | Description |
|
|
1872
|
+
|---|---|---|---|
|
|
1873
|
+
| `path.sequence_id` | `string` | yes | Sequence (campaign) id. |
|
|
1874
|
+
| `query.page` | `integer` | no | default `1` |
|
|
1875
|
+
| `query.page_size` | `integer` | no | default `10` |
|
|
1876
|
+
|
|
1877
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1878
|
+
|
|
1879
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1880
|
+
|
|
1881
|
+
`InboxOpsListPayload` fields:
|
|
1882
|
+
|
|
1883
|
+
| Field | Type | Required | Description |
|
|
1884
|
+
|---|---|---|---|
|
|
1885
|
+
| `items` | `Array<unknown>` | no | |
|
|
1886
|
+
|
|
1887
|
+
**Example**
|
|
1888
|
+
|
|
1889
|
+
```ts
|
|
1890
|
+
const result = await g8.api.aiInbox.listInboxEmailsBySequence({ path: { sequence_id: "id" } });
|
|
1891
|
+
```
|
|
1892
|
+
|
|
1893
|
+
---
|
|
1894
|
+
|
|
1895
|
+
<a id="op-listinboxlinkedinaccounts"></a>
|
|
1896
|
+
|
|
1897
|
+
### `g8.api.aiInbox.listInboxLinkedinAccounts(input?)`
|
|
1898
|
+
|
|
1899
|
+
**List Inbox Linkedin Accounts**
|
|
1900
|
+
|
|
1901
|
+
- HTTP: `GET /api/v1/inbox/linkedin/accounts`
|
|
1902
|
+
- operationId: `list_inbox_linkedin_accounts_inbox_linkedin_accounts_get` (also callable as `g8.api.call("list_inbox_linkedin_accounts_inbox_linkedin_accounts_get", input)`)
|
|
1903
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1904
|
+
- API-key scope: `inbox:read`
|
|
1905
|
+
|
|
1906
|
+
LinkedIn accounts as the PROVIDER reports them.
|
|
1907
|
+
|
|
1908
|
+
Live from the provider, so it reflects a disconnected or suspended account
|
|
1909
|
+
immediately - but it carries none of the local inbox configuration. Read
|
|
1910
|
+
the configuration back from the update call, or set it with
|
|
1911
|
+
`PUT /inbox/linkedin/accounts/{account_id}`.
|
|
1912
|
+
|
|
1913
|
+
**Input**
|
|
1914
|
+
|
|
1915
|
+
| Field | Type | Required | Description |
|
|
1916
|
+
|---|---|---|---|
|
|
1917
|
+
| `query.keyword` | `string \| null` | no | Filter by name. |
|
|
1918
|
+
| `query.offset` | `integer` | no | default `0` |
|
|
1919
|
+
| `query.limit` | `integer` | no | default `50` |
|
|
1920
|
+
|
|
1921
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1922
|
+
|
|
1923
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1924
|
+
|
|
1925
|
+
`InboxOpsListPayload` fields:
|
|
1926
|
+
|
|
1927
|
+
| Field | Type | Required | Description |
|
|
1928
|
+
|---|---|---|---|
|
|
1929
|
+
| `items` | `Array<unknown>` | no | |
|
|
1930
|
+
|
|
1931
|
+
**Example**
|
|
1932
|
+
|
|
1933
|
+
```ts
|
|
1934
|
+
const result = await g8.api.aiInbox.listInboxLinkedinAccounts();
|
|
1935
|
+
```
|
|
1936
|
+
|
|
1937
|
+
---
|
|
1938
|
+
|
|
1939
|
+
<a id="op-listinboxmailboxes"></a>
|
|
1940
|
+
|
|
1941
|
+
### `g8.api.aiInbox.listInboxMailboxes(input?)`
|
|
1942
|
+
|
|
1943
|
+
**List Inbox Mailboxes**
|
|
1944
|
+
|
|
1945
|
+
- HTTP: `GET /api/v1/inbox/mailboxes`
|
|
1946
|
+
- operationId: `list_inbox_mailboxes_inbox_mailboxes_get` (also callable as `g8.api.call("list_inbox_mailboxes_inbox_mailboxes_get", input)`)
|
|
1947
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1948
|
+
- API-key scope: `inbox:read`
|
|
1949
|
+
|
|
1950
|
+
Mailboxes with their AI Inbox sync state.
|
|
1951
|
+
|
|
1952
|
+
Each row carries the mailbox record PLUS `cron_status`, `auto_respond`,
|
|
1953
|
+
`is_supported`, `has_credential_error` and `last_unread_limit` - the
|
|
1954
|
+
inbox-only columns `/mailboxes` does not have.
|
|
1955
|
+
|
|
1956
|
+
**Input**
|
|
1957
|
+
|
|
1958
|
+
| Field | Type | Required | Description |
|
|
1959
|
+
|---|---|---|---|
|
|
1960
|
+
| `query.user_email` | `string \| null` | no | Whose PERSONAL mailboxes to include. Defaults to the human who minted this key. An org-scoped key has no human, so it sees the team mailboxes only. |
|
|
1961
|
+
| `query.provider` | `"google_mailbox" \| "smtp" \| null` | no | Filter by connection type. |
|
|
1962
|
+
| `query.category` | `"team" \| "personal" \| null` | no | `team` (shared) or `personal` (owner-only). |
|
|
1963
|
+
|
|
1964
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
1965
|
+
|
|
1966
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
1967
|
+
|
|
1968
|
+
`InboxOpsListPayload` fields:
|
|
1969
|
+
|
|
1970
|
+
| Field | Type | Required | Description |
|
|
1971
|
+
|---|---|---|---|
|
|
1972
|
+
| `items` | `Array<unknown>` | no | |
|
|
1973
|
+
|
|
1974
|
+
**Example**
|
|
1975
|
+
|
|
1976
|
+
```ts
|
|
1977
|
+
const result = await g8.api.aiInbox.listInboxMailboxes();
|
|
1978
|
+
```
|
|
1979
|
+
|
|
1980
|
+
---
|
|
1981
|
+
|
|
1982
|
+
<a id="op-listinboxmailboxespaginated"></a>
|
|
1983
|
+
|
|
1984
|
+
### `g8.api.aiInbox.listInboxMailboxesPaginated(input?)`
|
|
1985
|
+
|
|
1986
|
+
**List Inbox Mailboxes Paginated**
|
|
1987
|
+
|
|
1988
|
+
- HTTP: `GET /api/v1/inbox/mailboxes/paginated`
|
|
1989
|
+
- operationId: `list_inbox_mailboxes_paginated_inbox_mailboxes_paginated_get` (also callable as `g8.api.call("list_inbox_mailboxes_paginated_inbox_mailboxes_paginated_get", input)`)
|
|
1990
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
1991
|
+
- API-key scope: `inbox:read`
|
|
1992
|
+
|
|
1993
|
+
Mailboxes with their sync state, paged and filterable - the settings
|
|
1994
|
+
screen's list.
|
|
1995
|
+
|
|
1996
|
+
Every VISIBLE mailbox is returned, disconnected ones included, and each is
|
|
1997
|
+
annotated with `can_send` / `send_blocked_reason` for THIS caller, so a
|
|
1998
|
+
mailbox the key may see but not send from is distinguishable before a send
|
|
1999
|
+
is attempted. `total_count` carries the unpaged total. Credentials are
|
|
2000
|
+
scrubbed from every row.
|
|
2001
|
+
|
|
2002
|
+
**Input**
|
|
2003
|
+
|
|
2004
|
+
| Field | Type | Required | Description |
|
|
2005
|
+
|---|---|---|---|
|
|
2006
|
+
| `query.page` | `integer` | no | default `1` |
|
|
2007
|
+
| `query.page_size` | `integer` | no | default `20` |
|
|
2008
|
+
| `query.status` | `"RUNNING" \| "STOPPED" \| null` | no | `RUNNING` (being polled) or `STOPPED`. |
|
|
2009
|
+
| `query.provider` | `"google_mailbox" \| "smtp" \| null` | no | Filter by connection type. |
|
|
2010
|
+
| `query.search` | `string \| null` | no | Substring of the mailbox address. |
|
|
2011
|
+
|
|
2012
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2013
|
+
|
|
2014
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2015
|
+
|
|
2016
|
+
`InboxOpsListPayload` fields:
|
|
2017
|
+
|
|
2018
|
+
| Field | Type | Required | Description |
|
|
2019
|
+
|---|---|---|---|
|
|
2020
|
+
| `items` | `Array<unknown>` | no | |
|
|
2021
|
+
|
|
2022
|
+
**Example**
|
|
2023
|
+
|
|
2024
|
+
```ts
|
|
2025
|
+
const result = await g8.api.aiInbox.listInboxMailboxesPaginated();
|
|
2026
|
+
```
|
|
2027
|
+
|
|
2028
|
+
---
|
|
2029
|
+
|
|
2030
|
+
<a id="op-listinboxusers"></a>
|
|
2031
|
+
|
|
2032
|
+
### `g8.api.aiInbox.listInboxUsers(input?)`
|
|
2033
|
+
|
|
2034
|
+
**List Inbox Users**
|
|
2035
|
+
|
|
2036
|
+
- HTTP: `GET /api/v1/inbox/users`
|
|
2037
|
+
- operationId: `list_inbox_users_inbox_users_get` (also callable as `g8.api.call("list_inbox_users_inbox_users_get", input)`)
|
|
2038
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2039
|
+
- API-key scope: `inbox:read`
|
|
2040
|
+
|
|
2041
|
+
Everyone in the organisation, as the inbox sees them.
|
|
2042
|
+
|
|
2043
|
+
The directory an assignment draws from - but eligibility for a SPECIFIC
|
|
2044
|
+
conversation is a separate question, answered by
|
|
2045
|
+
`/inbox/channels/{id}/assignee-eligibility`.
|
|
2046
|
+
|
|
2047
|
+
**Input**: none.
|
|
2048
|
+
|
|
2049
|
+
**Returns** `ApiResponse_InboxListPayload_`: the envelope `{ data: InboxListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2050
|
+
|
|
2051
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2052
|
+
|
|
2053
|
+
`InboxListPayload` fields:
|
|
2054
|
+
|
|
2055
|
+
| Field | Type | Required | Description |
|
|
2056
|
+
|---|---|---|---|
|
|
2057
|
+
| `items` | `Array<unknown>` | no | |
|
|
2058
|
+
|
|
2059
|
+
**Example**
|
|
2060
|
+
|
|
2061
|
+
```ts
|
|
2062
|
+
const result = await g8.api.aiInbox.listInboxUsers();
|
|
2063
|
+
```
|
|
2064
|
+
|
|
2065
|
+
---
|
|
2066
|
+
|
|
2067
|
+
<a id="op-listinboxworkspaces"></a>
|
|
2068
|
+
|
|
2069
|
+
### `g8.api.aiInbox.listInboxWorkspaces(input?)`
|
|
2070
|
+
|
|
2071
|
+
**List Inbox Workspaces**
|
|
2072
|
+
|
|
2073
|
+
- HTTP: `GET /api/v1/inbox/workspaces`
|
|
2074
|
+
- operationId: `list_inbox_workspaces_inbox_workspaces_get` (also callable as `g8.api.call("list_inbox_workspaces_inbox_workspaces_get", input)`)
|
|
2075
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2076
|
+
- API-key scope: `inbox:read`
|
|
2077
|
+
|
|
2078
|
+
Inbox workspaces - the mailbox groupings a team works out of.
|
|
2079
|
+
|
|
2080
|
+
PLURAL here, though the app splits reads onto `/workspace` and the one
|
|
2081
|
+
write onto `/workspaces`. Two paths one letter apart do not belong in a
|
|
2082
|
+
public contract.
|
|
2083
|
+
|
|
2084
|
+
**Input**
|
|
2085
|
+
|
|
2086
|
+
| Field | Type | Required | Description |
|
|
2087
|
+
|---|---|---|---|
|
|
2088
|
+
| `query.page` | `integer` | no | default `1` |
|
|
2089
|
+
| `query.page_size` | `integer` | no | default `20` |
|
|
2090
|
+
|
|
2091
|
+
**Returns** `ApiResponse_InboxListPayload_`: the envelope `{ data: InboxListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2092
|
+
|
|
2093
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2094
|
+
|
|
2095
|
+
`InboxListPayload` fields:
|
|
2096
|
+
|
|
2097
|
+
| Field | Type | Required | Description |
|
|
2098
|
+
|---|---|---|---|
|
|
2099
|
+
| `items` | `Array<unknown>` | no | |
|
|
2100
|
+
|
|
2101
|
+
**Example**
|
|
2102
|
+
|
|
2103
|
+
```ts
|
|
2104
|
+
const result = await g8.api.aiInbox.listInboxWorkspaces();
|
|
2105
|
+
```
|
|
2106
|
+
|
|
2107
|
+
---
|
|
2108
|
+
|
|
2109
|
+
<a id="op-listmailboxassociatedsequences"></a>
|
|
2110
|
+
|
|
2111
|
+
### `g8.api.aiInbox.listMailboxAssociatedSequences(input)`
|
|
2112
|
+
|
|
2113
|
+
**List Mailbox Associated Sequences**
|
|
2114
|
+
|
|
2115
|
+
- HTTP: `POST /api/v1/inbox/mailboxes/associated-sequences`
|
|
2116
|
+
- operationId: `list_mailbox_associated_sequences_inbox_mailboxes_associated_sequences_post` (also callable as `g8.api.call("list_mailbox_associated_sequences_inbox_mailboxes_associated_sequences_post", input)`)
|
|
2117
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2118
|
+
- API-key scope: `inbox:read`
|
|
2119
|
+
|
|
2120
|
+
Which sequences have threads in these mailboxes.
|
|
2121
|
+
|
|
2122
|
+
A POST because the mailbox list is a body; it reads and writes nothing,
|
|
2123
|
+
so it gates on `inbox:read`.
|
|
2124
|
+
|
|
2125
|
+
Keyed by mailbox ADDRESS. `/mailboxes/{mailbox_id}/associated-sequences`
|
|
2126
|
+
is the same question asked of one mailbox by its numeric id - a different
|
|
2127
|
+
key, which is why this is not folded into it.
|
|
2128
|
+
|
|
2129
|
+
**Input**
|
|
2130
|
+
|
|
2131
|
+
| Field | Type | Required | Description |
|
|
2132
|
+
|---|---|---|---|
|
|
2133
|
+
| `body` | `MailboxAddressesRequest` | yes | Request body; fields below. |
|
|
2134
|
+
|
|
2135
|
+
Body fields (`MailboxAddressesRequest`):
|
|
2136
|
+
|
|
2137
|
+
| Field | Type | Required | Description |
|
|
2138
|
+
|---|---|---|---|
|
|
2139
|
+
| `body.mailboxes` | `Array<string>` | yes | Mailbox addresses. An empty list returns an empty result. |
|
|
2140
|
+
|
|
2141
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2142
|
+
|
|
2143
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2144
|
+
|
|
2145
|
+
`InboxOpsListPayload` fields:
|
|
2146
|
+
|
|
2147
|
+
| Field | Type | Required | Description |
|
|
2148
|
+
|---|---|---|---|
|
|
2149
|
+
| `items` | `Array<unknown>` | no | |
|
|
2150
|
+
|
|
2151
|
+
**Example**
|
|
2152
|
+
|
|
2153
|
+
```ts
|
|
2154
|
+
const result = await g8.api.aiInbox.listMailboxAssociatedSequences({ body: { mailboxes: ["example"] } });
|
|
2155
|
+
```
|
|
2156
|
+
|
|
2157
|
+
---
|
|
2158
|
+
|
|
2159
|
+
<a id="op-listmeetingtasks"></a>
|
|
2160
|
+
|
|
2161
|
+
### `g8.api.aiInbox.listMeetingTasks(input)`
|
|
2162
|
+
|
|
2163
|
+
**List Meeting Tasks**
|
|
2164
|
+
|
|
2165
|
+
- HTTP: `GET /api/v1/inbox/meetings/{meeting_id}/tasks`
|
|
2166
|
+
- operationId: `list_meeting_tasks_inbox_meetings__meeting_id__tasks_get` (also callable as `g8.api.call("list_meeting_tasks_inbox_meetings__meeting_id__tasks_get", input)`)
|
|
2167
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2168
|
+
- API-key scope: `meetings:read`
|
|
2169
|
+
|
|
2170
|
+
Follow-ups hung off this meeting, filtered by the caller's task
|
|
2171
|
+
visibility - team-only tasks do not cross team boundaries just because the
|
|
2172
|
+
caller can open the meeting.
|
|
2173
|
+
|
|
2174
|
+
**Input**
|
|
2175
|
+
|
|
2176
|
+
| Field | Type | Required | Description |
|
|
2177
|
+
|---|---|---|---|
|
|
2178
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
2179
|
+
|
|
2180
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2181
|
+
|
|
2182
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2183
|
+
|
|
2184
|
+
`InboxOpsListPayload` fields:
|
|
2185
|
+
|
|
2186
|
+
| Field | Type | Required | Description |
|
|
2187
|
+
|---|---|---|---|
|
|
2188
|
+
| `items` | `Array<unknown>` | no | |
|
|
2189
|
+
|
|
2190
|
+
**Example**
|
|
2191
|
+
|
|
2192
|
+
```ts
|
|
2193
|
+
const result = await g8.api.aiInbox.listMeetingTasks({ path: { meeting_id: "id" } });
|
|
2194
|
+
```
|
|
2195
|
+
|
|
2196
|
+
---
|
|
2197
|
+
|
|
2198
|
+
<a id="op-listmymeetingtasks"></a>
|
|
2199
|
+
|
|
2200
|
+
### `g8.api.aiInbox.listMyMeetingTasks(input?)`
|
|
2201
|
+
|
|
2202
|
+
**List My Meeting Tasks**
|
|
2203
|
+
|
|
2204
|
+
- HTTP: `GET /api/v1/inbox/meetings/my-tasks`
|
|
2205
|
+
- operationId: `list_my_meeting_tasks_inbox_meetings_my_tasks_get` (also callable as `g8.api.call("list_my_meeting_tasks_inbox_meetings_my_tasks_get", input)`)
|
|
2206
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2207
|
+
- API-key scope: `meetings:read`
|
|
2208
|
+
|
|
2209
|
+
Every meeting follow-up assigned to the caller, across all meetings.
|
|
2210
|
+
|
|
2211
|
+
Declared BEFORE nothing in this router, but registered BEFORE
|
|
2212
|
+
`meetings_router`: `GET /inbox/meetings/{meeting_id}` already ships, and
|
|
2213
|
+
the parameter route would otherwise match `my-tasks` and look it up as a
|
|
2214
|
+
meeting id.
|
|
2215
|
+
|
|
2216
|
+
Strictly meeting-derived tasks, not a general task list - see
|
|
2217
|
+
`GET /tasks` for that. Returns an empty list, not an error, when the
|
|
2218
|
+
caller has no team-member row in this organisation, which is what an
|
|
2219
|
+
org-scoped key will see.
|
|
2220
|
+
|
|
2221
|
+
**Input**: none.
|
|
2222
|
+
|
|
2223
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2224
|
+
|
|
2225
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2226
|
+
|
|
2227
|
+
`InboxOpsListPayload` fields:
|
|
2228
|
+
|
|
2229
|
+
| Field | Type | Required | Description |
|
|
2230
|
+
|---|---|---|---|
|
|
2231
|
+
| `items` | `Array<unknown>` | no | |
|
|
2232
|
+
|
|
2233
|
+
**Example**
|
|
2234
|
+
|
|
2235
|
+
```ts
|
|
2236
|
+
const result = await g8.api.aiInbox.listMyMeetingTasks();
|
|
2237
|
+
```
|
|
2238
|
+
|
|
2239
|
+
---
|
|
2240
|
+
|
|
2241
|
+
<a id="op-markinboxemailread"></a>
|
|
2242
|
+
|
|
2243
|
+
### `g8.api.aiInbox.markInboxEmailRead(input)`
|
|
2244
|
+
|
|
2245
|
+
**Mark Inbox Email Read**
|
|
2246
|
+
|
|
2247
|
+
- HTTP: `POST /api/v1/inbox/emails/{email_id}/mark-read`
|
|
2248
|
+
- operationId: `mark_inbox_email_read_inbox_emails__email_id__mark_read_post` (also callable as `g8.api.call("mark_inbox_email_read_inbox_emails__email_id__mark_read_post", input)`)
|
|
2249
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2250
|
+
- API-key scope: `inbox:write`
|
|
2251
|
+
|
|
2252
|
+
Mark an email thread read. Contacts nobody.
|
|
2253
|
+
|
|
2254
|
+
Best-effort syncs the read state up to the mail provider as well, so the customer's
|
|
2255
|
+
own mailbox agrees. Idempotent.
|
|
2256
|
+
|
|
2257
|
+
Gated on VISIBILITY of the owning mailbox: a personal mailbox is
|
|
2258
|
+
owner-only, so marking someone else's thread read is a 403 rather than a
|
|
2259
|
+
quiet mutation of their inbox.
|
|
2260
|
+
|
|
2261
|
+
**Input**
|
|
2262
|
+
|
|
2263
|
+
| Field | Type | Required | Description |
|
|
2264
|
+
|---|---|---|---|
|
|
2265
|
+
| `path.email_id` | `string` | yes | Email thread id. |
|
|
2266
|
+
|
|
2267
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2268
|
+
|
|
2269
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2270
|
+
|
|
2271
|
+
**Example**
|
|
2272
|
+
|
|
2273
|
+
```ts
|
|
2274
|
+
const result = await g8.api.aiInbox.markInboxEmailRead({ path: { email_id: "jane@acme.com" } });
|
|
2275
|
+
```
|
|
2276
|
+
|
|
2277
|
+
---
|
|
2278
|
+
|
|
2279
|
+
<a id="op-markinboxlinkedinconversationread"></a>
|
|
2280
|
+
|
|
2281
|
+
### `g8.api.aiInbox.markInboxLinkedinConversationRead(input)`
|
|
2282
|
+
|
|
2283
|
+
**Mark Inbox Linkedin Conversation Read**
|
|
2284
|
+
|
|
2285
|
+
- HTTP: `POST /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/read`
|
|
2286
|
+
- operationId: `mark_inbox_linkedin_conversation_read_inbox_linkedin_accounts__account_id__conversations__conversation_id__read_post` (also callable as `g8.api.call("mark_inbox_linkedin_conversation_read_inbox_linkedin_accounts__account_id__conversations__conversation_id__read_post", input)`)
|
|
2287
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2288
|
+
- API-key scope: `inbox:write`
|
|
2289
|
+
|
|
2290
|
+
Mark a LinkedIn conversation read. Contacts nobody.
|
|
2291
|
+
|
|
2292
|
+
Syncs seen-state to whichever provider serves this organisation. The
|
|
2293
|
+
handler resolves that STRICTLY on this path, so a credential-store failure
|
|
2294
|
+
surfaces as an error rather than quietly toggling read state on the wrong
|
|
2295
|
+
provider.
|
|
2296
|
+
|
|
2297
|
+
**Input**
|
|
2298
|
+
|
|
2299
|
+
| Field | Type | Required | Description |
|
|
2300
|
+
|---|---|---|---|
|
|
2301
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
2302
|
+
| `path.conversation_id` | `string` | yes | LinkedIn conversation id. |
|
|
2303
|
+
|
|
2304
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2305
|
+
|
|
2306
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2307
|
+
|
|
2308
|
+
**Example**
|
|
2309
|
+
|
|
2310
|
+
```ts
|
|
2311
|
+
const result = await g8.api.aiInbox.markInboxLinkedinConversationRead({ path: { account_id: 123, conversation_id: "id" } });
|
|
2312
|
+
```
|
|
2313
|
+
|
|
2314
|
+
---
|
|
2315
|
+
|
|
2316
|
+
<a id="op-markinboxlinkedinconversationunread"></a>
|
|
2317
|
+
|
|
2318
|
+
### `g8.api.aiInbox.markInboxLinkedinConversationUnread(input)`
|
|
2319
|
+
|
|
2320
|
+
**Mark Inbox Linkedin Conversation Unread**
|
|
2321
|
+
|
|
2322
|
+
- HTTP: `POST /api/v1/inbox/linkedin/accounts/{account_id}/conversations/{conversation_id}/unread`
|
|
2323
|
+
- operationId: `mark_inbox_linkedin_conversation_unread_inbox_linkedin_accounts__account_id__conversations__conversation_id__unread_post` (also callable as `g8.api.call("mark_inbox_linkedin_conversation_unread_inbox_linkedin_accounts__account_id__conversations__conversation_id__unread_post", input)`)
|
|
2324
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2325
|
+
- API-key scope: `inbox:write`
|
|
2326
|
+
|
|
2327
|
+
Put a LinkedIn conversation back in the unread queue.
|
|
2328
|
+
|
|
2329
|
+
**Input**
|
|
2330
|
+
|
|
2331
|
+
| Field | Type | Required | Description |
|
|
2332
|
+
|---|---|---|---|
|
|
2333
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
2334
|
+
| `path.conversation_id` | `string` | yes | LinkedIn conversation id. |
|
|
2335
|
+
|
|
2336
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2337
|
+
|
|
2338
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2339
|
+
|
|
2340
|
+
**Example**
|
|
2341
|
+
|
|
2342
|
+
```ts
|
|
2343
|
+
const result = await g8.api.aiInbox.markInboxLinkedinConversationUnread({ path: { account_id: 123, conversation_id: "id" } });
|
|
2344
|
+
```
|
|
2345
|
+
|
|
2346
|
+
---
|
|
2347
|
+
|
|
2348
|
+
<a id="op-markinboxsmsread"></a>
|
|
2349
|
+
|
|
2350
|
+
### `g8.api.aiInbox.markInboxSmsRead(input)`
|
|
2351
|
+
|
|
2352
|
+
**Mark Inbox Sms Read**
|
|
2353
|
+
|
|
2354
|
+
- HTTP: `POST /api/v1/inbox/sms/{thread_id}/mark-read`
|
|
2355
|
+
- operationId: `mark_inbox_sms_read_inbox_sms__thread_id__mark_read_post` (also callable as `g8.api.call("mark_inbox_sms_read_inbox_sms__thread_id__mark_read_post", input)`)
|
|
2356
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2357
|
+
- API-key scope: `inbox:write`
|
|
2358
|
+
|
|
2359
|
+
Mark an SMS thread read. Contacts nobody.
|
|
2360
|
+
|
|
2361
|
+
Answers 200 whether or not the thread exists - the underlying update
|
|
2362
|
+
matches zero rows silently - so do not read success as proof the id was
|
|
2363
|
+
real.
|
|
2364
|
+
|
|
2365
|
+
**Input**
|
|
2366
|
+
|
|
2367
|
+
| Field | Type | Required | Description |
|
|
2368
|
+
|---|---|---|---|
|
|
2369
|
+
| `path.thread_id` | `string` | yes | SMS thread id. |
|
|
2370
|
+
|
|
2371
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2372
|
+
|
|
2373
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2374
|
+
|
|
2375
|
+
**Example**
|
|
2376
|
+
|
|
2377
|
+
```ts
|
|
2378
|
+
const result = await g8.api.aiInbox.markInboxSmsRead({ path: { thread_id: "id" } });
|
|
2379
|
+
```
|
|
2380
|
+
|
|
2381
|
+
---
|
|
2382
|
+
|
|
2383
|
+
<a id="op-markmeetingnotranscriptexpected"></a>
|
|
2384
|
+
|
|
2385
|
+
### `g8.api.aiInbox.markMeetingNoTranscriptExpected(input)`
|
|
2386
|
+
|
|
2387
|
+
**Mark Meeting No Transcript Expected**
|
|
2388
|
+
|
|
2389
|
+
- HTTP: `POST /api/v1/inbox/meetings/{meeting_id}/no-transcript`
|
|
2390
|
+
- operationId: `mark_meeting_no_transcript_expected_inbox_meetings__meeting_id__no_transcript_post` (also callable as `g8.api.call("mark_meeting_no_transcript_expected_inbox_meetings__meeting_id__no_transcript_post", input)`)
|
|
2391
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2392
|
+
- API-key scope: `meetings:write`
|
|
2393
|
+
|
|
2394
|
+
Say that this meeting was never recorded, so stop waiting for one.
|
|
2395
|
+
|
|
2396
|
+
Distinguishes "nothing was captured" from "the recording has not arrived
|
|
2397
|
+
yet", which is what stops the meeting sitting in a pending state forever.
|
|
2398
|
+
|
|
2399
|
+
**Input**
|
|
2400
|
+
|
|
2401
|
+
| Field | Type | Required | Description |
|
|
2402
|
+
|---|---|---|---|
|
|
2403
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
2404
|
+
|
|
2405
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2406
|
+
|
|
2407
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2408
|
+
|
|
2409
|
+
**Example**
|
|
2410
|
+
|
|
2411
|
+
```ts
|
|
2412
|
+
const result = await g8.api.aiInbox.markMeetingNoTranscriptExpected({ path: { meeting_id: "id" } });
|
|
2413
|
+
```
|
|
2414
|
+
|
|
2415
|
+
---
|
|
2416
|
+
|
|
2417
|
+
<a id="op-removechanneltag"></a>
|
|
2418
|
+
|
|
2419
|
+
### `g8.api.aiInbox.removeChannelTag(input)`
|
|
2420
|
+
|
|
2421
|
+
**Remove Channel Tag**
|
|
2422
|
+
|
|
2423
|
+
- HTTP: `DELETE /api/v1/inbox/channels/{channel_id}/tags`
|
|
2424
|
+
- operationId: `remove_channel_tag_inbox_channels__channel_id__tags_delete` (also callable as `g8.api.call("remove_channel_tag_inbox_channels__channel_id__tags_delete", input)`)
|
|
2425
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
2426
|
+
- API-key scope: `inbox:delete`
|
|
2427
|
+
|
|
2428
|
+
Take a tag off a conversation. The tag itself survives.
|
|
2429
|
+
|
|
2430
|
+
**Input**
|
|
2431
|
+
|
|
2432
|
+
| Field | Type | Required | Description |
|
|
2433
|
+
|---|---|---|---|
|
|
2434
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
2435
|
+
| `query.tag_id` | `string` | yes | The tag to remove. |
|
|
2436
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
2437
|
+
| `query.linkedin_account_id` | `integer \| null` | no | LinkedIn account id. Required only for `heyreach`, where the id is account-scoped and ambiguous without it. |
|
|
2438
|
+
|
|
2439
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2440
|
+
|
|
2441
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2442
|
+
|
|
2443
|
+
**Example**
|
|
2444
|
+
|
|
2445
|
+
```ts
|
|
2446
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
2447
|
+
const result = await g8.api.aiInbox.removeChannelTag({
|
|
2448
|
+
path: { channel_id: "id" },
|
|
2449
|
+
query: { tag_id: "id", channel_type: "email" },
|
|
2450
|
+
});
|
|
2451
|
+
```
|
|
2452
|
+
|
|
2453
|
+
---
|
|
2454
|
+
|
|
2455
|
+
<a id="op-revalidateinboxmailbox"></a>
|
|
2456
|
+
|
|
2457
|
+
### `g8.api.aiInbox.revalidateInboxMailbox(input)`
|
|
2458
|
+
|
|
2459
|
+
**Revalidate Inbox Mailbox**
|
|
2460
|
+
|
|
2461
|
+
- HTTP: `POST /api/v1/inbox/mailboxes/{mailbox}/revalidate`
|
|
2462
|
+
- operationId: `revalidate_inbox_mailbox_inbox_mailboxes__mailbox__revalidate_post` (also callable as `g8.api.call("revalidate_inbox_mailbox_inbox_mailboxes__mailbox__revalidate_post", input)`)
|
|
2463
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2464
|
+
- API-key scope: `inbox:write`
|
|
2465
|
+
|
|
2466
|
+
Re-check this mailbox's credentials and folders, and store the answer.
|
|
2467
|
+
|
|
2468
|
+
Contacts no recipient. It connects to the provider to find out whether the
|
|
2469
|
+
stored credentials still work, then writes `is_supported`, the error
|
|
2470
|
+
message and the credential-error flag back onto the sync record - which is
|
|
2471
|
+
what makes a mailbox that silently stopped working visible.
|
|
2472
|
+
|
|
2473
|
+
**Input**
|
|
2474
|
+
|
|
2475
|
+
| Field | Type | Required | Description |
|
|
2476
|
+
|---|---|---|---|
|
|
2477
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
2478
|
+
|
|
2479
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2480
|
+
|
|
2481
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2482
|
+
|
|
2483
|
+
**Example**
|
|
2484
|
+
|
|
2485
|
+
```ts
|
|
2486
|
+
const result = await g8.api.aiInbox.revalidateInboxMailbox({ path: { mailbox: "example" } });
|
|
2487
|
+
```
|
|
2488
|
+
|
|
2489
|
+
---
|
|
2490
|
+
|
|
2491
|
+
<a id="op-searchinboxcallresults"></a>
|
|
2492
|
+
|
|
2493
|
+
### `g8.api.aiInbox.searchInboxCallResults(input?)`
|
|
2494
|
+
|
|
2495
|
+
**Search Inbox Call Results**
|
|
2496
|
+
|
|
2497
|
+
- HTTP: `POST /api/v1/inbox/call-results/search`
|
|
2498
|
+
- operationId: `search_inbox_call_results_inbox_call_results_search_post` (also callable as `g8.api.call("search_inbox_call_results_inbox_call_results_search_post", input)`)
|
|
2499
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2500
|
+
- API-key scope: `inbox:read`
|
|
2501
|
+
|
|
2502
|
+
Inbound call outcomes, filtered and paged. Reads only.
|
|
2503
|
+
|
|
2504
|
+
A POST because the filter set is a body; it gates on `inbox:read`.
|
|
2505
|
+
FAILED calls are excluded by the handler - this is the answered-call
|
|
2506
|
+
record, not a call log.
|
|
2507
|
+
|
|
2508
|
+
NOT `/voice/dialer/calls`, which reads the outbound dialer's own tables.
|
|
2509
|
+
Same-sounding feature, different rows.
|
|
2510
|
+
|
|
2511
|
+
**Input**
|
|
2512
|
+
|
|
2513
|
+
| Field | Type | Required | Description |
|
|
2514
|
+
|---|---|---|---|
|
|
2515
|
+
| `body` | `CallResultSearchRequest` | no | Request body; fields below. |
|
|
2516
|
+
|
|
2517
|
+
Body fields (`CallResultSearchRequest`):
|
|
2518
|
+
|
|
2519
|
+
| Field | Type | Required | Description |
|
|
2520
|
+
|---|---|---|---|
|
|
2521
|
+
| `body.assigned_to_user_email` | `string \| null` | no | |
|
|
2522
|
+
| `body.campaign_ids` | `Array<string> \| null` | no | |
|
|
2523
|
+
| `body.disposition` | `"booked" \| "positive" \| "neutral" \| "negative" \| "voicemail" \| null` | no | |
|
|
2524
|
+
| `body.page` | `integer` | no | default `1`, min 1 |
|
|
2525
|
+
| `body.page_size` | `integer` | no | default `20`, min 1, max 100 |
|
|
2526
|
+
| `body.sort_by` | `"updated_at" \| "created_at" \| "last_message_at"` | no | default `"updated_at"` |
|
|
2527
|
+
| `body.sort_order` | `"asc" \| "desc"` | no | default `"desc"` |
|
|
2528
|
+
| `body.tag_ids` | `Array<string> \| null` | no | |
|
|
2529
|
+
| `body.updated_after` | `string (date-time) \| null` | no | |
|
|
2530
|
+
| `body.updated_before` | `string (date-time) \| null` | no | |
|
|
2531
|
+
|
|
2532
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2533
|
+
|
|
2534
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2535
|
+
|
|
2536
|
+
`InboxOpsListPayload` fields:
|
|
2537
|
+
|
|
2538
|
+
| Field | Type | Required | Description |
|
|
2539
|
+
|---|---|---|---|
|
|
2540
|
+
| `items` | `Array<unknown>` | no | |
|
|
2541
|
+
|
|
2542
|
+
**Example**
|
|
2543
|
+
|
|
2544
|
+
```ts
|
|
2545
|
+
const result = await g8.api.aiInbox.searchInboxCallResults();
|
|
2546
|
+
```
|
|
2547
|
+
|
|
2548
|
+
---
|
|
2549
|
+
|
|
2550
|
+
<a id="op-searchinboxlinkedinconversations"></a>
|
|
2551
|
+
|
|
2552
|
+
### `g8.api.aiInbox.searchInboxLinkedinConversations(input?)`
|
|
2553
|
+
|
|
2554
|
+
**Search Inbox Linkedin Conversations**
|
|
2555
|
+
|
|
2556
|
+
- HTTP: `POST /api/v1/inbox/linkedin/conversations/search`
|
|
2557
|
+
- operationId: `search_inbox_linkedin_conversations_inbox_linkedin_conversations_search_post` (also callable as `g8.api.call("search_inbox_linkedin_conversations_inbox_linkedin_conversations_search_post", input)`)
|
|
2558
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
2559
|
+
- API-key scope: `inbox:read`
|
|
2560
|
+
|
|
2561
|
+
Search LinkedIn conversations across accounts.
|
|
2562
|
+
|
|
2563
|
+
A POST because the filter is a body, not because it writes anything - it
|
|
2564
|
+
gates on `inbox:read`, matching `POST /inbox/chats/search` beside it.
|
|
2565
|
+
|
|
2566
|
+
`seen: false` is the unread view. `sequence_ids` are graph8 sequence ids;
|
|
2567
|
+
the handler maps them onto the provider's own campaign ids for you.
|
|
2568
|
+
|
|
2569
|
+
**Input**
|
|
2570
|
+
|
|
2571
|
+
| Field | Type | Required | Description |
|
|
2572
|
+
|---|---|---|---|
|
|
2573
|
+
| `body` | `LinkedInConversationSearchRequest` | no | Request body; fields below. |
|
|
2574
|
+
|
|
2575
|
+
Body fields (`LinkedInConversationSearchRequest`):
|
|
2576
|
+
|
|
2577
|
+
| Field | Type | Required | Description |
|
|
2578
|
+
|---|---|---|---|
|
|
2579
|
+
| `body.limit` | `integer` | no | default `25`, min 1, max 100 |
|
|
2580
|
+
| `body.linkedin_account_ids` | `Array<integer> \| null` | no | |
|
|
2581
|
+
| `body.offset` | `integer` | no | default `0`, min 0 |
|
|
2582
|
+
| `body.search` | `string \| null` | no | |
|
|
2583
|
+
| `body.seen` | `boolean \| null` | no | False returns only unread conversations. |
|
|
2584
|
+
| `body.sequence_ids` | `Array<string> \| null` | no | |
|
|
2585
|
+
| `body.sort_order` | `"asc" \| "desc"` | no | default `"desc"` |
|
|
2586
|
+
| `body.tags` | `Array<string> \| null` | no | |
|
|
2587
|
+
| `body.updated_after` | `string (date-time) \| null` | no | |
|
|
2588
|
+
| `body.updated_before` | `string (date-time) \| null` | no | |
|
|
2589
|
+
|
|
2590
|
+
**Returns** `ApiResponse_InboxOpsListPayload_`: the envelope `{ data: InboxOpsListPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2591
|
+
|
|
2592
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2593
|
+
|
|
2594
|
+
`InboxOpsListPayload` fields:
|
|
2595
|
+
|
|
2596
|
+
| Field | Type | Required | Description |
|
|
2597
|
+
|---|---|---|---|
|
|
2598
|
+
| `items` | `Array<unknown>` | no | |
|
|
2599
|
+
|
|
2600
|
+
**Example**
|
|
2601
|
+
|
|
2602
|
+
```ts
|
|
2603
|
+
const result = await g8.api.aiInbox.searchInboxLinkedinConversations();
|
|
2604
|
+
```
|
|
2605
|
+
|
|
2606
|
+
---
|
|
2607
|
+
|
|
2608
|
+
<a id="op-setchannelaipause"></a>
|
|
2609
|
+
|
|
2610
|
+
### `g8.api.aiInbox.setChannelAiPause(input)`
|
|
2611
|
+
|
|
2612
|
+
**Set Channel Ai Pause**
|
|
2613
|
+
|
|
2614
|
+
- HTTP: `POST /api/v1/inbox/channels/{channel_id}/ai-pause`
|
|
2615
|
+
- operationId: `set_channel_ai_pause_inbox_channels__channel_id__ai_pause_post` (also callable as `g8.api.call("set_channel_ai_pause_inbox_channels__channel_id__ai_pause_post", input)`)
|
|
2616
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2617
|
+
- API-key scope: `inbox:write`
|
|
2618
|
+
|
|
2619
|
+
Stop the AI answering THIS conversation, or let it resume.
|
|
2620
|
+
|
|
2621
|
+
Scoped to the one thread: pausing here does not disable the responder
|
|
2622
|
+
anywhere else. This is the handover switch - pause it when a human takes
|
|
2623
|
+
over, so the customer does not get two replies.
|
|
2624
|
+
|
|
2625
|
+
`paused` is explicit rather than a toggle, so a retried request is
|
|
2626
|
+
idempotent instead of flipping the state back.
|
|
2627
|
+
|
|
2628
|
+
**Input**
|
|
2629
|
+
|
|
2630
|
+
| Field | Type | Required | Description |
|
|
2631
|
+
|---|---|---|---|
|
|
2632
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
2633
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
2634
|
+
| `body` | `AiPauseRequest` | yes | Request body; fields below. |
|
|
2635
|
+
|
|
2636
|
+
Body fields (`AiPauseRequest`):
|
|
2637
|
+
|
|
2638
|
+
| Field | Type | Required | Description |
|
|
2639
|
+
|---|---|---|---|
|
|
2640
|
+
| `body.paused` | `boolean` | yes | True stops the AI answering this thread; false lets it resume. |
|
|
2641
|
+
|
|
2642
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2643
|
+
|
|
2644
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2645
|
+
|
|
2646
|
+
**Example**
|
|
2647
|
+
|
|
2648
|
+
```ts
|
|
2649
|
+
const result = await g8.api.aiInbox.setChannelAiPause({
|
|
2650
|
+
path: { channel_id: "id" },
|
|
2651
|
+
query: { channel_type: "email" },
|
|
2652
|
+
body: { paused: true },
|
|
2653
|
+
});
|
|
2654
|
+
```
|
|
2655
|
+
|
|
2656
|
+
---
|
|
2657
|
+
|
|
2658
|
+
<a id="op-setinboxemailsequence"></a>
|
|
2659
|
+
|
|
2660
|
+
### `g8.api.aiInbox.setInboxEmailSequence(input)`
|
|
2661
|
+
|
|
2662
|
+
**Set Inbox Email Sequence**
|
|
2663
|
+
|
|
2664
|
+
- HTTP: `POST /api/v1/inbox/emails/{email_id}/sequence`
|
|
2665
|
+
- operationId: `set_inbox_email_sequence_inbox_emails__email_id__sequence_post` (also callable as `g8.api.call("set_inbox_email_sequence_inbox_emails__email_id__sequence_post", input)`)
|
|
2666
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2667
|
+
- API-key scope: `inbox:write`
|
|
2668
|
+
|
|
2669
|
+
Attribute a thread to a sequence, WITHOUT touching the sequencer.
|
|
2670
|
+
|
|
2671
|
+
The quiet twin of `link-sequence`: it re-labels the thread for reporting
|
|
2672
|
+
and does not tell the sequencer anything, so the contact keeps receiving
|
|
2673
|
+
the remaining steps. Use `link-sequence` when someone replied.
|
|
2674
|
+
|
|
2675
|
+
Accepts any id - unlike `link-sequence` there is no candidate check - so
|
|
2676
|
+
a wrong value mislabels the thread silently. Gated on visibility of the
|
|
2677
|
+
owning mailbox.
|
|
2678
|
+
|
|
2679
|
+
**Input**
|
|
2680
|
+
|
|
2681
|
+
| Field | Type | Required | Description |
|
|
2682
|
+
|---|---|---|---|
|
|
2683
|
+
| `path.email_id` | `string` | yes | Email thread id. |
|
|
2684
|
+
| `query.sequence_id` | `string` | yes | Sequence (campaign) id to attribute the thread to. |
|
|
2685
|
+
| `query.sequence_name` | `string` | yes | Display name stored alongside the id. |
|
|
2686
|
+
|
|
2687
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2688
|
+
|
|
2689
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2690
|
+
|
|
2691
|
+
**Example**
|
|
2692
|
+
|
|
2693
|
+
```ts
|
|
2694
|
+
const result = await g8.api.aiInbox.setInboxEmailSequence({
|
|
2695
|
+
path: { email_id: "jane@acme.com" },
|
|
2696
|
+
query: { sequence_id: "id", sequence_name: "Example" },
|
|
2697
|
+
});
|
|
2698
|
+
```
|
|
2699
|
+
|
|
2700
|
+
---
|
|
2701
|
+
|
|
2702
|
+
<a id="op-setinboxemailsettings"></a>
|
|
2703
|
+
|
|
2704
|
+
### `g8.api.aiInbox.setInboxEmailSettings(input)`
|
|
2705
|
+
|
|
2706
|
+
**Set Inbox Email Settings**
|
|
2707
|
+
|
|
2708
|
+
- HTTP: `PUT /api/v1/inbox/email-settings`
|
|
2709
|
+
- operationId: `set_inbox_email_settings_inbox_email_settings_put` (also callable as `g8.api.call("set_inbox_email_settings_inbox_email_settings_put", input)`)
|
|
2710
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2711
|
+
- API-key scope: `inbox:write`
|
|
2712
|
+
|
|
2713
|
+
Create or replace the organisation's AI Inbox email settings.
|
|
2714
|
+
|
|
2715
|
+
A PUT because it REPLACES: the app writes every field, so anything you
|
|
2716
|
+
omit is written as its default rather than left alone. Read the current
|
|
2717
|
+
settings, change the one field, send the whole thing back.
|
|
2718
|
+
|
|
2719
|
+
`business_hours_only` plus the start/end hours are what stop the AI
|
|
2720
|
+
replying to a customer at 3am. `event_id` is the booking event it offers
|
|
2721
|
+
when it schedules a meeting.
|
|
2722
|
+
|
|
2723
|
+
**Input**
|
|
2724
|
+
|
|
2725
|
+
| Field | Type | Required | Description |
|
|
2726
|
+
|---|---|---|---|
|
|
2727
|
+
| `body` | `EmailSettingsRequest` | yes | Request body; fields below. |
|
|
2728
|
+
|
|
2729
|
+
Body fields (`EmailSettingsRequest`):
|
|
2730
|
+
|
|
2731
|
+
| Field | Type | Required | Description |
|
|
2732
|
+
|---|---|---|---|
|
|
2733
|
+
| `body.timezone` | `string` | yes | IANA timezone name, e.g. `America/New_York`. Required. |
|
|
2734
|
+
| `body.agent_id` | `string \| integer \| null \| null` | no | AI Inbox agent that answers. See `POST /inbox/agents`. |
|
|
2735
|
+
| `body.auto_tagging` | `boolean` | no | default `false` |
|
|
2736
|
+
| `body.business_hours_end` | `integer` | no | default `17` |
|
|
2737
|
+
| `body.business_hours_only` | `boolean` | no | Restrict AI replies to the hours below. default `false` |
|
|
2738
|
+
| `body.business_hours_start` | `integer` | no | default `9` |
|
|
2739
|
+
| `body.event_id` | `integer \| null` | no | Booking event the AI offers when it schedules a meeting. |
|
|
2740
|
+
| `body.refresh_rate` | `integer` | no | Minutes between sync rounds. default `1` |
|
|
2741
|
+
|
|
2742
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2743
|
+
|
|
2744
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2745
|
+
|
|
2746
|
+
**Example**
|
|
2747
|
+
|
|
2748
|
+
```ts
|
|
2749
|
+
const result = await g8.api.aiInbox.setInboxEmailSettings({ body: { timezone: "example" } });
|
|
2750
|
+
```
|
|
2751
|
+
|
|
2752
|
+
---
|
|
2753
|
+
|
|
2754
|
+
<a id="op-setinboxmailboxvisibility"></a>
|
|
2755
|
+
|
|
2756
|
+
### `g8.api.aiInbox.setInboxMailboxVisibility(input)`
|
|
2757
|
+
|
|
2758
|
+
**Set Inbox Mailbox Visibility**
|
|
2759
|
+
|
|
2760
|
+
- HTTP: `PATCH /api/v1/inbox/mailboxes/{mailbox}/visibility`
|
|
2761
|
+
- operationId: `set_inbox_mailbox_visibility_inbox_mailboxes__mailbox__visibility_patch` (also callable as `g8.api.call("set_inbox_mailbox_visibility_inbox_mailboxes__mailbox__visibility_patch", input)`)
|
|
2762
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
2763
|
+
- API-key scope: `inbox:write`
|
|
2764
|
+
|
|
2765
|
+
Share a mailbox with the team, or make it personal again.
|
|
2766
|
+
|
|
2767
|
+
THIS CHANGES WHO CAN READ THE THREADS IN IT. Sharing exposes the
|
|
2768
|
+
conversation history of that mailbox to every team member; un-sharing
|
|
2769
|
+
hides it again, but not retroactively.
|
|
2770
|
+
|
|
2771
|
+
ONLY THE OWNER may change it - the person the mailbox was created by.
|
|
2772
|
+
An API key acts as its minting human, so a key held by anyone else gets a
|
|
2773
|
+
403, and an org-scoped key (which owns nothing) always does.
|
|
2774
|
+
|
|
2775
|
+
**Input**
|
|
2776
|
+
|
|
2777
|
+
| Field | Type | Required | Description |
|
|
2778
|
+
|---|---|---|---|
|
|
2779
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
2780
|
+
| `query.shared_with_team` | `boolean` | yes | True makes the mailbox and its threads visible to the whole team. False makes it personal to its owner. |
|
|
2781
|
+
|
|
2782
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2783
|
+
|
|
2784
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2785
|
+
|
|
2786
|
+
**Example**
|
|
2787
|
+
|
|
2788
|
+
```ts
|
|
2789
|
+
const result = await g8.api.aiInbox.setInboxMailboxVisibility({ path: { mailbox: "example" }, query: { shared_with_team: true } });
|
|
2790
|
+
```
|
|
2791
|
+
|
|
2792
|
+
---
|
|
2793
|
+
|
|
2794
|
+
<a id="op-setmeetingsensitivity"></a>
|
|
2795
|
+
|
|
2796
|
+
### `g8.api.aiInbox.setMeetingSensitivity(input)`
|
|
2797
|
+
|
|
2798
|
+
**Set Meeting Sensitivity**
|
|
2799
|
+
|
|
2800
|
+
- HTTP: `PATCH /api/v1/inbox/meetings/{meeting_id}/sensitivity`
|
|
2801
|
+
- operationId: `set_meeting_sensitivity_inbox_meetings__meeting_id__sensitivity_patch` (also callable as `g8.api.call("set_meeting_sensitivity_inbox_meetings__meeting_id__sensitivity_patch", input)`)
|
|
2802
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
2803
|
+
- API-key scope: `meetings:delete`
|
|
2804
|
+
|
|
2805
|
+
CHANGE WHO MAY READ THE RECORDING OF THIS MEETING.
|
|
2806
|
+
|
|
2807
|
+
`private` HIDES the transcript from everyone except the meeting's
|
|
2808
|
+
participants. `normal` EXPOSES it to the organisation again - and a
|
|
2809
|
+
transcript that has been read cannot be un-read, so going back to `normal`
|
|
2810
|
+
is not a reversible edit in any sense that matters.
|
|
2811
|
+
|
|
2812
|
+
Only a PARTICIPANT may change it; anyone else gets a 403. Classified
|
|
2813
|
+
`destructive`, so it needs `inbox:delete` rather than riding along with
|
|
2814
|
+
`inbox:write` - a key that triages the inbox should not also be able to
|
|
2815
|
+
publish a private recording.
|
|
2816
|
+
|
|
2817
|
+
`sensitivity` is REQUIRED here. The app defaults a missing key to
|
|
2818
|
+
`normal`, which is the exposing direction, so this contract refuses to
|
|
2819
|
+
guess.
|
|
2820
|
+
|
|
2821
|
+
**Input**
|
|
2822
|
+
|
|
2823
|
+
| Field | Type | Required | Description |
|
|
2824
|
+
|---|---|---|---|
|
|
2825
|
+
| `path.meeting_id` | `string` | yes | Meeting id, as returned by `GET /inbox/meetings`. |
|
|
2826
|
+
| `body` | `MeetingSensitivityRequest` | yes | Request body; fields below. |
|
|
2827
|
+
|
|
2828
|
+
Body fields (`MeetingSensitivityRequest`):
|
|
2829
|
+
|
|
2830
|
+
| Field | Type | Required | Description |
|
|
2831
|
+
|---|---|---|---|
|
|
2832
|
+
| `body.sensitivity` | `"normal" \| "private"` | yes | `private` = participants only. `normal` = visible to the organisation. Required - there is no safe default. |
|
|
2833
|
+
|
|
2834
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2835
|
+
|
|
2836
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2837
|
+
|
|
2838
|
+
**Example**
|
|
2839
|
+
|
|
2840
|
+
```ts
|
|
2841
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
2842
|
+
const result = await g8.api.aiInbox.setMeetingSensitivity({ path: { meeting_id: "id" }, body: { sensitivity: "normal" } });
|
|
2843
|
+
```
|
|
2844
|
+
|
|
2845
|
+
---
|
|
2846
|
+
|
|
2847
|
+
<a id="op-startinboxmailboxsync"></a>
|
|
2848
|
+
|
|
2849
|
+
### `g8.api.aiInbox.startInboxMailboxSync(input)`
|
|
2850
|
+
|
|
2851
|
+
**Start Inbox Mailbox Sync**
|
|
2852
|
+
|
|
2853
|
+
- HTTP: `POST /api/v1/inbox/mailboxes/{mailbox}/sync`
|
|
2854
|
+
- operationId: `start_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_post` (also callable as `g8.api.call("start_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_post", input)`)
|
|
2855
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2856
|
+
- API-key scope: `inbox:run`
|
|
2857
|
+
|
|
2858
|
+
START POLLING this mailbox.
|
|
2859
|
+
|
|
2860
|
+
REACHES OUTSIDE GRAPH8: from here on the platform connects to the
|
|
2861
|
+
customer's Google or IMAP server with their stored credentials, on a
|
|
2862
|
+
schedule, until it is stopped. Classified `external`, so it needs
|
|
2863
|
+
`inbox:run` rather than plain write.
|
|
2864
|
+
|
|
2865
|
+
It contacts no recipient - nothing is SENT by turning sync on. What it
|
|
2866
|
+
can lead to is the AI answering on this mailbox, which is governed
|
|
2867
|
+
separately by `auto_respond`.
|
|
2868
|
+
|
|
2869
|
+
Refuses with 400 if the mailbox is already running, so a retry is safe
|
|
2870
|
+
rather than doubling the polling.
|
|
2871
|
+
|
|
2872
|
+
202 because the first sync round happens on the org-level worker's next
|
|
2873
|
+
pass, not inside this request.
|
|
2874
|
+
|
|
2875
|
+
**Input**
|
|
2876
|
+
|
|
2877
|
+
| Field | Type | Required | Description |
|
|
2878
|
+
|---|---|---|---|
|
|
2879
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
2880
|
+
| `query.provider` | `"google_mailbox" \| "smtp"` | yes | How the mailbox is connected. REQUIRED and not inferred: the same address can be connected either way, and guessing would act on the wrong transport. Closed to a Literal so an unknown value is a 422 naming both, rather than a `ValueError` raised inside the handler. |
|
|
2881
|
+
| `query.display_name` | `string \| null` | no | Label shown beside the address. |
|
|
2882
|
+
|
|
2883
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2884
|
+
|
|
2885
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2886
|
+
|
|
2887
|
+
**Example**
|
|
2888
|
+
|
|
2889
|
+
```ts
|
|
2890
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2891
|
+
const result = await g8.api.aiInbox.startInboxMailboxSync({
|
|
2892
|
+
path: { mailbox: "example" },
|
|
2893
|
+
query: { provider: "google_mailbox" },
|
|
2894
|
+
});
|
|
2895
|
+
```
|
|
2896
|
+
|
|
2897
|
+
---
|
|
2898
|
+
|
|
2899
|
+
<a id="op-stopinboxmailboxsync"></a>
|
|
2900
|
+
|
|
2901
|
+
### `g8.api.aiInbox.stopInboxMailboxSync(input)`
|
|
2902
|
+
|
|
2903
|
+
**Stop Inbox Mailbox Sync**
|
|
2904
|
+
|
|
2905
|
+
- HTTP: `DELETE /api/v1/inbox/mailboxes/{mailbox}/sync`
|
|
2906
|
+
- operationId: `stop_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_delete` (also callable as `g8.api.call("stop_inbox_mailbox_sync_inbox_mailboxes__mailbox__sync_delete", input)`)
|
|
2907
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
2908
|
+
- API-key scope: `inbox:delete`
|
|
2909
|
+
|
|
2910
|
+
STOP polling this mailbox.
|
|
2911
|
+
|
|
2912
|
+
Stops the sync, not the mailbox: the threads already pulled in stay, and
|
|
2913
|
+
the mailbox record itself is untouched. 404 if this mailbox was never
|
|
2914
|
+
connected to the inbox.
|
|
2915
|
+
|
|
2916
|
+
**Input**
|
|
2917
|
+
|
|
2918
|
+
| Field | Type | Required | Description |
|
|
2919
|
+
|---|---|---|---|
|
|
2920
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
2921
|
+
| `query.provider` | `"google_mailbox" \| "smtp"` | yes | How the mailbox is connected. REQUIRED and not inferred: the same address can be connected either way, and guessing would act on the wrong transport. Closed to a Literal so an unknown value is a 422 naming both, rather than a `ValueError` raised inside the handler. |
|
|
2922
|
+
|
|
2923
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2924
|
+
|
|
2925
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2926
|
+
|
|
2927
|
+
**Example**
|
|
2928
|
+
|
|
2929
|
+
```ts
|
|
2930
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
2931
|
+
const result = await g8.api.aiInbox.stopInboxMailboxSync({
|
|
2932
|
+
path: { mailbox: "example" },
|
|
2933
|
+
query: { provider: "google_mailbox" },
|
|
2934
|
+
});
|
|
2935
|
+
```
|
|
2936
|
+
|
|
2937
|
+
---
|
|
2938
|
+
|
|
2939
|
+
<a id="op-syncinboxlinkedinaccounts"></a>
|
|
2940
|
+
|
|
2941
|
+
### `g8.api.aiInbox.syncInboxLinkedinAccounts(input?)`
|
|
2942
|
+
|
|
2943
|
+
**Sync Inbox Linkedin Accounts**
|
|
2944
|
+
|
|
2945
|
+
- HTTP: `POST /api/v1/inbox/linkedin/accounts/sync`
|
|
2946
|
+
- operationId: `sync_inbox_linkedin_accounts_inbox_linkedin_accounts_sync_post` (also callable as `g8.api.call("sync_inbox_linkedin_accounts_inbox_linkedin_accounts_sync_post", input)`)
|
|
2947
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2948
|
+
- API-key scope: `inbox:run`
|
|
2949
|
+
|
|
2950
|
+
Refresh the organisation's LinkedIn accounts from the provider.
|
|
2951
|
+
|
|
2952
|
+
Creates a local configuration record for every account the provider
|
|
2953
|
+
reports that graph8 has not seen, and refreshes the cached profile of the
|
|
2954
|
+
rest. Existing configuration (enabled, auto-respond) is not changed.
|
|
2955
|
+
Returns the counts. Sends nothing.
|
|
2956
|
+
|
|
2957
|
+
**Input**: none.
|
|
2958
|
+
|
|
2959
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
2960
|
+
|
|
2961
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
2962
|
+
|
|
2963
|
+
**Example**
|
|
2964
|
+
|
|
2965
|
+
```ts
|
|
2966
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
2967
|
+
const result = await g8.api.aiInbox.syncInboxLinkedinAccounts();
|
|
2968
|
+
```
|
|
2969
|
+
|
|
2970
|
+
---
|
|
2971
|
+
|
|
2972
|
+
<a id="op-toggleinboxmailboxes"></a>
|
|
2973
|
+
|
|
2974
|
+
### `g8.api.aiInbox.toggleInboxMailboxes(input)`
|
|
2975
|
+
|
|
2976
|
+
**Toggle Inbox Mailboxes**
|
|
2977
|
+
|
|
2978
|
+
- HTTP: `PATCH /api/v1/inbox/mailboxes/bulk`
|
|
2979
|
+
- operationId: `toggle_inbox_mailboxes_inbox_mailboxes_bulk_patch` (also callable as `g8.api.call("toggle_inbox_mailboxes_inbox_mailboxes_bulk_patch", input)`)
|
|
2980
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
2981
|
+
- API-key scope: `inbox:run`
|
|
2982
|
+
|
|
2983
|
+
Flip several mailboxes on or off by address, and optionally set
|
|
2984
|
+
auto-respond on all of them in the same call.
|
|
2985
|
+
|
|
2986
|
+
PARTIALLY TOLERANT where activate is not: this one reports failures in the
|
|
2987
|
+
body and still returns 200. Check `total_failed`.
|
|
2988
|
+
|
|
2989
|
+
`activate` is explicit rather than a toggle, so a retried request is
|
|
2990
|
+
idempotent instead of putting the mailboxes back the way they were.
|
|
2991
|
+
|
|
2992
|
+
**Input**
|
|
2993
|
+
|
|
2994
|
+
| Field | Type | Required | Description |
|
|
2995
|
+
|---|---|---|---|
|
|
2996
|
+
| `body` | `MailboxToggleRequest` | yes | Request body; fields below. |
|
|
2997
|
+
|
|
2998
|
+
Body fields (`MailboxToggleRequest`):
|
|
2999
|
+
|
|
3000
|
+
| Field | Type | Required | Description |
|
|
3001
|
+
|---|---|---|---|
|
|
3002
|
+
| `body.activate` | `boolean` | yes | True starts syncing, false stops it. |
|
|
3003
|
+
| `body.mailboxes` | `Array<string>` | yes | Mailbox addresses. min items 1 |
|
|
3004
|
+
| `body.auto_respond` | `boolean \| null` | no | |
|
|
3005
|
+
|
|
3006
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3007
|
+
|
|
3008
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3009
|
+
|
|
3010
|
+
**Example**
|
|
3011
|
+
|
|
3012
|
+
```ts
|
|
3013
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3014
|
+
const result = await g8.api.aiInbox.toggleInboxMailboxes({ body: { activate: true, mailboxes: ["example"] } });
|
|
3015
|
+
```
|
|
3016
|
+
|
|
3017
|
+
---
|
|
3018
|
+
|
|
3019
|
+
<a id="op-unassignchannel"></a>
|
|
3020
|
+
|
|
3021
|
+
### `g8.api.aiInbox.unassignChannel(input)`
|
|
3022
|
+
|
|
3023
|
+
**Unassign Channel**
|
|
3024
|
+
|
|
3025
|
+
- HTTP: `DELETE /api/v1/inbox/channels/{channel_id}/assign`
|
|
3026
|
+
- operationId: `unassign_channel_inbox_channels__channel_id__assign_delete` (also callable as `g8.api.call("unassign_channel_inbox_channels__channel_id__assign_delete", input)`)
|
|
3027
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
3028
|
+
- API-key scope: `inbox:delete`
|
|
3029
|
+
|
|
3030
|
+
Take ONE person off a conversation. The others keep it.
|
|
3031
|
+
|
|
3032
|
+
**Input**
|
|
3033
|
+
|
|
3034
|
+
| Field | Type | Required | Description |
|
|
3035
|
+
|---|---|---|---|
|
|
3036
|
+
| `path.channel_id` | `string` | yes | Conversation id. |
|
|
3037
|
+
| `query.assignee_email` | `string` | yes | The person to take off. |
|
|
3038
|
+
| `query.channel_type` | `"email" \| "chat" \| "phone" \| "sms" \| "heyreach" \| "meetings" \| "support" \| "all"` | yes | Which channel the conversation lives in. REQUIRED: the same id means different rows in different channels, so this is what identifies the conversation, not a filter. |
|
|
3039
|
+
| `query.linkedin_account_id` | `integer \| null` | no | LinkedIn account id. Required only for `heyreach`, where the id is account-scoped and ambiguous without it. |
|
|
3040
|
+
|
|
3041
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3042
|
+
|
|
3043
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3044
|
+
|
|
3045
|
+
**Example**
|
|
3046
|
+
|
|
3047
|
+
```ts
|
|
3048
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
3049
|
+
const result = await g8.api.aiInbox.unassignChannel({
|
|
3050
|
+
path: { channel_id: "id" },
|
|
3051
|
+
query: { assignee_email: "jane@acme.com", channel_type: "email" },
|
|
3052
|
+
});
|
|
3053
|
+
```
|
|
3054
|
+
|
|
3055
|
+
---
|
|
3056
|
+
|
|
3057
|
+
<a id="op-unblockinboxsender"></a>
|
|
3058
|
+
|
|
3059
|
+
### `g8.api.aiInbox.unblockInboxSender(input)`
|
|
3060
|
+
|
|
3061
|
+
**Unblock Inbox Sender**
|
|
3062
|
+
|
|
3063
|
+
- HTTP: `DELETE /api/v1/inbox/blocked-senders/{blocked_sender_id}`
|
|
3064
|
+
- operationId: `unblock_inbox_sender_inbox_blocked_senders__blocked_sender_id__delete` (also callable as `g8.api.call("unblock_inbox_sender_inbox_blocked_senders__blocked_sender_id__delete", input)`)
|
|
3065
|
+
- Tier: `destructive`: deletes or archives data; confirm with a human before calling
|
|
3066
|
+
- API-key scope: `inbox:delete`
|
|
3067
|
+
|
|
3068
|
+
Let a sender through again. Mail already refused is not recovered.
|
|
3069
|
+
|
|
3070
|
+
**Input**
|
|
3071
|
+
|
|
3072
|
+
| Field | Type | Required | Description |
|
|
3073
|
+
|---|---|---|---|
|
|
3074
|
+
| `path.blocked_sender_id` | `string` | yes | Id of the block record, from `GET /inbox/blocked-senders`. |
|
|
3075
|
+
|
|
3076
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3077
|
+
|
|
3078
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3079
|
+
|
|
3080
|
+
**Example**
|
|
3081
|
+
|
|
3082
|
+
```ts
|
|
3083
|
+
// destructive: deletes or archives data; confirm with a human before calling.
|
|
3084
|
+
const result = await g8.api.aiInbox.unblockInboxSender({ path: { blocked_sender_id: "id" } });
|
|
3085
|
+
```
|
|
3086
|
+
|
|
3087
|
+
---
|
|
3088
|
+
|
|
3089
|
+
<a id="op-updateinboxlinkedinaccount"></a>
|
|
3090
|
+
|
|
3091
|
+
### `g8.api.aiInbox.updateInboxLinkedinAccount(input)`
|
|
3092
|
+
|
|
3093
|
+
**Update Inbox Linkedin Account**
|
|
3094
|
+
|
|
3095
|
+
- HTTP: `PUT /api/v1/inbox/linkedin/accounts/{account_id}`
|
|
3096
|
+
- operationId: `update_inbox_linkedin_account_inbox_linkedin_accounts__account_id__put` (also callable as `g8.api.call("update_inbox_linkedin_account_inbox_linkedin_accounts__account_id__put", input)`)
|
|
3097
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3098
|
+
- API-key scope: `inbox:run`
|
|
3099
|
+
|
|
3100
|
+
Configure one LinkedIn account's place in the inbox.
|
|
3101
|
+
|
|
3102
|
+
PARTIAL: only the fields you send are written, so omitting
|
|
3103
|
+
`auto_respond_config` leaves the existing one alone.
|
|
3104
|
+
|
|
3105
|
+
READ THIS BEFORE TURNING ANYTHING ON. `auto_respond: true` with
|
|
3106
|
+
`auto_respond_config.require_human_review: false` is the combination that
|
|
3107
|
+
lets the AI message real people on this account unattended - no draft, no
|
|
3108
|
+
approval. `require_human_review` defaults to TRUE and this route does not
|
|
3109
|
+
change that; it only stops applying if you send a config that says
|
|
3110
|
+
otherwise.
|
|
3111
|
+
|
|
3112
|
+
**Input**
|
|
3113
|
+
|
|
3114
|
+
| Field | Type | Required | Description |
|
|
3115
|
+
|---|---|---|---|
|
|
3116
|
+
| `path.account_id` | `integer` | yes | LinkedIn account id (integer). |
|
|
3117
|
+
| `body` | `LinkedInAccountConfigRequest` | yes | Request body; fields below. |
|
|
3118
|
+
|
|
3119
|
+
Body fields (`LinkedInAccountConfigRequest`):
|
|
3120
|
+
|
|
3121
|
+
| Field | Type | Required | Description |
|
|
3122
|
+
|---|---|---|---|
|
|
3123
|
+
| `body.ai_inbox_enabled` | `boolean \| null` | no | Whether the account's conversations appear in the inbox at all. |
|
|
3124
|
+
| `body.auto_respond` | `boolean \| null` | no | |
|
|
3125
|
+
| `body.auto_respond_config` | `LinkedInAutoRespondConfig \| null` | no | |
|
|
3126
|
+
| `body.linkedin_campaign_id` | `integer \| null` | no | Provider-side campaign id to attribute conversations to. |
|
|
3127
|
+
| `body.sequence_id` | `string \| null` | no | |
|
|
3128
|
+
|
|
3129
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3130
|
+
|
|
3131
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3132
|
+
|
|
3133
|
+
**Example**
|
|
3134
|
+
|
|
3135
|
+
```ts
|
|
3136
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3137
|
+
const result = await g8.api.aiInbox.updateInboxLinkedinAccount({ path: { account_id: 123 }, body: {} });
|
|
3138
|
+
```
|
|
3139
|
+
|
|
3140
|
+
---
|
|
3141
|
+
|
|
3142
|
+
<a id="op-updateinboxmailboxsettings"></a>
|
|
3143
|
+
|
|
3144
|
+
### `g8.api.aiInbox.updateInboxMailboxSettings(input)`
|
|
3145
|
+
|
|
3146
|
+
**Update Inbox Mailbox Settings**
|
|
3147
|
+
|
|
3148
|
+
- HTTP: `PATCH /api/v1/inbox/mailboxes/{mailbox}/settings`
|
|
3149
|
+
- operationId: `update_inbox_mailbox_settings_inbox_mailboxes__mailbox__settings_patch` (also callable as `g8.api.call("update_inbox_mailbox_settings_inbox_mailboxes__mailbox__settings_patch", input)`)
|
|
3150
|
+
- Tier: `external`: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first
|
|
3151
|
+
- API-key scope: `inbox:run`
|
|
3152
|
+
|
|
3153
|
+
Change one mailbox's inbox settings. PARTIAL: omitted fields are left alone.
|
|
3154
|
+
|
|
3155
|
+
`auto_respond: true` LETS THE AI ANSWER REAL PEOPLE from this mailbox,
|
|
3156
|
+
unattended, so the operation is classified `external` (`inbox:run`) - the
|
|
3157
|
+
same call already made for the LinkedIn account configuration. 404 if the
|
|
3158
|
+
mailbox was never connected to the inbox.
|
|
3159
|
+
|
|
3160
|
+
**Input**
|
|
3161
|
+
|
|
3162
|
+
| Field | Type | Required | Description |
|
|
3163
|
+
|---|---|---|---|
|
|
3164
|
+
| `path.mailbox` | `string` | yes | The mailbox ADDRESS, e.g. `sales@acme.com`. Not a numeric id. |
|
|
3165
|
+
| `query.provider` | `"google_mailbox" \| "smtp"` | yes | How the mailbox is connected. REQUIRED and not inferred: the same address can be connected either way, and guessing would act on the wrong transport. Closed to a Literal so an unknown value is a 422 naming both, rather than a `ValueError` raised inside the handler. |
|
|
3166
|
+
| `body` | `MailboxSettingsRequest` | yes | Request body; fields below. |
|
|
3167
|
+
|
|
3168
|
+
Body fields (`MailboxSettingsRequest`):
|
|
3169
|
+
|
|
3170
|
+
| Field | Type | Required | Description |
|
|
3171
|
+
|---|---|---|---|
|
|
3172
|
+
| `body.auto_respond` | `boolean \| null` | no | True lets the AI answer inbound mail on this mailbox. It will message real people. |
|
|
3173
|
+
| `body.last_unread_limit` | `integer \| null` | no | How many unread emails a sync round fetches. min 1, max 100 |
|
|
3174
|
+
|
|
3175
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3176
|
+
|
|
3177
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3178
|
+
|
|
3179
|
+
**Example**
|
|
3180
|
+
|
|
3181
|
+
```ts
|
|
3182
|
+
// external: reaches real people (sends email/SMS, places a call, launches a send); the SDK never blindly retries it; confirm with a human first.
|
|
3183
|
+
const result = await g8.api.aiInbox.updateInboxMailboxSettings({
|
|
3184
|
+
path: { mailbox: "example" },
|
|
3185
|
+
query: { provider: "google_mailbox" },
|
|
3186
|
+
body: {},
|
|
3187
|
+
});
|
|
3188
|
+
```
|
|
3189
|
+
|
|
3190
|
+
---
|
|
3191
|
+
|
|
3192
|
+
<a id="op-updateinboxtag"></a>
|
|
3193
|
+
|
|
3194
|
+
### `g8.api.aiInbox.updateInboxTag(input)`
|
|
3195
|
+
|
|
3196
|
+
**Update Inbox Tag**
|
|
3197
|
+
|
|
3198
|
+
- HTTP: `PUT /api/v1/inbox/tags/{tag_id}`
|
|
3199
|
+
- operationId: `update_inbox_tag_inbox_tags__tag_id__put` (also callable as `g8.api.call("update_inbox_tag_inbox_tags__tag_id__put", input)`)
|
|
3200
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3201
|
+
- API-key scope: `inbox:write`
|
|
3202
|
+
|
|
3203
|
+
Edit an inbox tag.
|
|
3204
|
+
|
|
3205
|
+
`/inbox/tags/...`, not `/tags/...`: `/contacts/tags` is a DIFFERENT
|
|
3206
|
+
vocabulary (contact tags on a CRM record) and these are conversation
|
|
3207
|
+
labels. The published READ of these same objects ships as
|
|
3208
|
+
`GET /workflows/inbox-tags`, because the workflow builder needed it first.
|
|
3209
|
+
|
|
3210
|
+
`ai_can_apply` and `rules` are what let the auto-tagger reach for this tag
|
|
3211
|
+
on its own, so changing them changes what the AI does to threads nobody
|
|
3212
|
+
looked at.
|
|
3213
|
+
|
|
3214
|
+
**Input**
|
|
3215
|
+
|
|
3216
|
+
| Field | Type | Required | Description |
|
|
3217
|
+
|---|---|---|---|
|
|
3218
|
+
| `path.tag_id` | `string` | yes | Tag id, from `GET /workflows/inbox-tags`. |
|
|
3219
|
+
| `body` | `TagUpdateRequest` | yes | Request body; fields below. |
|
|
3220
|
+
|
|
3221
|
+
Body fields (`TagUpdateRequest`):
|
|
3222
|
+
|
|
3223
|
+
| Field | Type | Required | Description |
|
|
3224
|
+
|---|---|---|---|
|
|
3225
|
+
| `body.agent_id` | `string \| null` | no | |
|
|
3226
|
+
| `body.ai_can_apply` | `boolean \| null` | no | Whether the AI may apply this tag on its own. |
|
|
3227
|
+
| `body.color` | `string \| null` | no | |
|
|
3228
|
+
| `body.description` | `string \| null` | no | |
|
|
3229
|
+
| `body.name` | `string \| null` | no | |
|
|
3230
|
+
| `body.priority` | `integer \| null` | no | 1-100. min 1, max 100 |
|
|
3231
|
+
| `body.rules` | `Array<string> \| null` | no | Natural-language rules the AI uses to decide the tag applies. |
|
|
3232
|
+
|
|
3233
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3234
|
+
|
|
3235
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3236
|
+
|
|
3237
|
+
**Example**
|
|
3238
|
+
|
|
3239
|
+
```ts
|
|
3240
|
+
const result = await g8.api.aiInbox.updateInboxTag({ path: { tag_id: "id" }, body: {} });
|
|
3241
|
+
```
|
|
3242
|
+
|
|
3243
|
+
---
|
|
3244
|
+
|
|
3245
|
+
<a id="op-updatemeetingtask"></a>
|
|
3246
|
+
|
|
3247
|
+
### `g8.api.aiInbox.updateMeetingTask(input)`
|
|
3248
|
+
|
|
3249
|
+
**Update Meeting Task**
|
|
3250
|
+
|
|
3251
|
+
- HTTP: `PATCH /api/v1/inbox/meetings/tasks/{task_id}`
|
|
3252
|
+
- operationId: `update_meeting_task_inbox_meetings_tasks__task_id__patch` (also callable as `g8.api.call("update_meeting_task_inbox_meetings_tasks__task_id__patch", input)`)
|
|
3253
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3254
|
+
- API-key scope: `meetings:write`
|
|
3255
|
+
|
|
3256
|
+
Patch a meeting task. Reassignment re-checks participant scope.
|
|
3257
|
+
|
|
3258
|
+
THREE-STATE nullable fields: omit `assignee_user_id` or
|
|
3259
|
+
`due_date` to leave it alone, send it as `null` to CLEAR it. The proxy
|
|
3260
|
+
forwards with `exclude_unset=True` precisely so the app can still tell
|
|
3261
|
+
those apart - dumping every field would turn each PATCH into a full
|
|
3262
|
+
overwrite that cleared whatever the caller did not mention.
|
|
3263
|
+
|
|
3264
|
+
Pass `expected_updated_at` to refuse the write if someone else moved the
|
|
3265
|
+
task since you read it.
|
|
3266
|
+
|
|
3267
|
+
**Input**
|
|
3268
|
+
|
|
3269
|
+
| Field | Type | Required | Description |
|
|
3270
|
+
|---|---|---|---|
|
|
3271
|
+
| `path.task_id` | `string` | yes | Meeting task id. |
|
|
3272
|
+
| `body` | `MeetingTaskUpdateRequest` | yes | Request body; fields below. |
|
|
3273
|
+
|
|
3274
|
+
Body fields (`MeetingTaskUpdateRequest`):
|
|
3275
|
+
|
|
3276
|
+
| Field | Type | Required | Description |
|
|
3277
|
+
|---|---|---|---|
|
|
3278
|
+
| `body.assignee_user_id` | `string \| null` | no | |
|
|
3279
|
+
| `body.description` | `string \| null` | no | |
|
|
3280
|
+
| `body.due_date` | `string (date-time) \| null` | no | |
|
|
3281
|
+
| `body.expected_updated_at` | `string (date-time) \| null` | no | Optimistic concurrency: the `updated_at` you read. If the task moved since, the update is refused instead of silently overwriting someone else's edit. |
|
|
3282
|
+
| `body.priority` | `integer \| null` | no | |
|
|
3283
|
+
| `body.status` | `"open" \| "in_progress" \| "completed" \| "done" \| "cancelled" \| null` | no | |
|
|
3284
|
+
| `body.title` | `string \| null` | no | |
|
|
3285
|
+
|
|
3286
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3287
|
+
|
|
3288
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3289
|
+
|
|
3290
|
+
**Example**
|
|
3291
|
+
|
|
3292
|
+
```ts
|
|
3293
|
+
const result = await g8.api.aiInbox.updateMeetingTask({ path: { task_id: "id" }, body: {} });
|
|
3294
|
+
```
|
|
3295
|
+
|
|
3296
|
+
---
|
|
3297
|
+
|
|
3298
|
+
<a id="op-uploadinboxdraftattachment"></a>
|
|
3299
|
+
|
|
3300
|
+
### `g8.api.aiInbox.uploadInboxDraftAttachment(input?)`
|
|
3301
|
+
|
|
3302
|
+
**Upload Inbox Draft Attachment**
|
|
3303
|
+
|
|
3304
|
+
- HTTP: `POST /api/v1/inbox/drafts/attachments`
|
|
3305
|
+
- operationId: `upload_inbox_draft_attachment_inbox_drafts_attachments_post` (also callable as `g8.api.call("upload_inbox_draft_attachment_inbox_drafts_attachments_post", input)`)
|
|
3306
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3307
|
+
- API-key scope: `inbox:write`
|
|
3308
|
+
|
|
3309
|
+
Attach a file to an existing email draft (multipart: `file`, `draft_id`).
|
|
3310
|
+
|
|
3311
|
+
Returns `token`, `key`, `name`, `size`, `contentType`. The draft must
|
|
3312
|
+
already exist and the caller must be allowed to send from its mailbox - a
|
|
3313
|
+
403 otherwise; 413 over 25 MB. Nothing is sent: the file rides along when
|
|
3314
|
+
the draft is.
|
|
3315
|
+
|
|
3316
|
+
Calls the app handler's own body (`__wrapped__`): the app wraps it in a
|
|
3317
|
+
per-process rate limiter bound to the APP's state, and this API's own
|
|
3318
|
+
rate limit applies instead.
|
|
3319
|
+
|
|
3320
|
+
**Input**: none.
|
|
3321
|
+
|
|
3322
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3323
|
+
|
|
3324
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3325
|
+
|
|
3326
|
+
**Example**
|
|
3327
|
+
|
|
3328
|
+
```ts
|
|
3329
|
+
const result = await g8.api.aiInbox.uploadInboxDraftAttachment();
|
|
3330
|
+
```
|
|
3331
|
+
|
|
3332
|
+
---
|
|
3333
|
+
|
|
3334
|
+
<a id="op-uploadinboxnoteattachment"></a>
|
|
3335
|
+
|
|
3336
|
+
### `g8.api.aiInbox.uploadInboxNoteAttachment(input?)`
|
|
3337
|
+
|
|
3338
|
+
**Upload Inbox Note Attachment**
|
|
3339
|
+
|
|
3340
|
+
- HTTP: `POST /api/v1/inbox/notes/attachments`
|
|
3341
|
+
- operationId: `upload_inbox_note_attachment_inbox_notes_attachments_post` (also callable as `g8.api.call("upload_inbox_note_attachment_inbox_notes_attachments_post", input)`)
|
|
3342
|
+
- Tier: `write`: creates or changes records; the SDK sends an Idempotency-Key and retries transient failures
|
|
3343
|
+
- API-key scope: `inbox:write`
|
|
3344
|
+
|
|
3345
|
+
Upload a file for an INTERNAL note (multipart: `file`).
|
|
3346
|
+
|
|
3347
|
+
Returns the attachment ref (`token`, `key`, `name`, `size`,
|
|
3348
|
+
`contentType`) that `POST /inbox/channels/{channel_id}/comments` accepts
|
|
3349
|
+
in `attachments`. Notes are internal, so nothing reaches a customer.
|
|
3350
|
+
|
|
3351
|
+
**Input**: none.
|
|
3352
|
+
|
|
3353
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3354
|
+
|
|
3355
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3356
|
+
|
|
3357
|
+
**Example**
|
|
3358
|
+
|
|
3359
|
+
```ts
|
|
3360
|
+
const result = await g8.api.aiInbox.uploadInboxNoteAttachment();
|
|
3361
|
+
```
|
|
3362
|
+
|
|
3363
|
+
---
|
|
3364
|
+
|
|
3365
|
+
<a id="op-validateinboxlinkedinaccount"></a>
|
|
3366
|
+
|
|
3367
|
+
### `g8.api.aiInbox.validateInboxLinkedinAccount(input)`
|
|
3368
|
+
|
|
3369
|
+
**Validate Inbox Linkedin Account**
|
|
3370
|
+
|
|
3371
|
+
- HTTP: `POST /api/v1/inbox/linkedin/validate-account`
|
|
3372
|
+
- operationId: `validate_inbox_linkedin_account_inbox_linkedin_validate_account_post` (also callable as `g8.api.call("validate_inbox_linkedin_account_inbox_linkedin_validate_account_post", input)`)
|
|
3373
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
3374
|
+
- API-key scope: `inbox:read`
|
|
3375
|
+
|
|
3376
|
+
Can this LinkedIn account send right now? Reads only.
|
|
3377
|
+
|
|
3378
|
+
Checks the account is synced locally, enabled for the inbox, active at the
|
|
3379
|
+
provider, and that the provider credentials still authenticate. Gates on
|
|
3380
|
+
`inbox:read`.
|
|
3381
|
+
|
|
3382
|
+
NOTE the app's shape, preserved here: a failure to reach the provider is
|
|
3383
|
+
reported as `valid: false` with an `error` string and HTTP 200, not as a
|
|
3384
|
+
5xx. Read `valid`, not the status code.
|
|
3385
|
+
|
|
3386
|
+
**Input**
|
|
3387
|
+
|
|
3388
|
+
| Field | Type | Required | Description |
|
|
3389
|
+
|---|---|---|---|
|
|
3390
|
+
| `query.linkedin_account_id` | `integer` | yes | The account you intend to send from. |
|
|
3391
|
+
|
|
3392
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3393
|
+
|
|
3394
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3395
|
+
|
|
3396
|
+
**Example**
|
|
3397
|
+
|
|
3398
|
+
```ts
|
|
3399
|
+
const result = await g8.api.aiInbox.validateInboxLinkedinAccount({ query: { linkedin_account_id: 123 } });
|
|
3400
|
+
```
|
|
3401
|
+
|
|
3402
|
+
---
|
|
3403
|
+
|
|
3404
|
+
<a id="op-validateinboxsendmailbox"></a>
|
|
3405
|
+
|
|
3406
|
+
### `g8.api.aiInbox.validateInboxSendMailbox(input)`
|
|
3407
|
+
|
|
3408
|
+
**Validate Inbox Send Mailbox**
|
|
3409
|
+
|
|
3410
|
+
- HTTP: `POST /api/v1/inbox/emails/validate-mailbox`
|
|
3411
|
+
- operationId: `validate_inbox_send_mailbox_inbox_emails_validate_mailbox_post` (also callable as `g8.api.call("validate_inbox_send_mailbox_inbox_emails_validate_mailbox_post", input)`)
|
|
3412
|
+
- Tier: `read`: reads data; safe to call and to retry
|
|
3413
|
+
- API-key scope: `inbox:read`
|
|
3414
|
+
|
|
3415
|
+
Can this mailbox send right now? Reads only - nothing is delivered.
|
|
3416
|
+
|
|
3417
|
+
Checks that the mailbox is connected, syncing, of a supported provider,
|
|
3418
|
+
that its credentials still work, and that this caller is allowed to send
|
|
3419
|
+
as it. Gates on `inbox:read`: a key that can only read the inbox must
|
|
3420
|
+
still be able to find out whether a send WOULD work before anyone tries.
|
|
3421
|
+
|
|
3422
|
+
An unauthorised mailbox is a 403 here, the same refusal the send itself
|
|
3423
|
+
gives, so the pre-flight and the real thing cannot disagree.
|
|
3424
|
+
|
|
3425
|
+
**Input**
|
|
3426
|
+
|
|
3427
|
+
| Field | Type | Required | Description |
|
|
3428
|
+
|---|---|---|---|
|
|
3429
|
+
| `query.mailbox` | `string` | yes | The mailbox address you intend to send AS. |
|
|
3430
|
+
|
|
3431
|
+
**Returns** `ApiResponse_InboxPayload_`: the envelope `{ data: InboxPayload, ... }`. `g8.api` returns the envelope as-is, so read `result.data`.
|
|
3432
|
+
|
|
3433
|
+
Other envelope fields: `pagination` (PaginationMeta).
|
|
3434
|
+
|
|
3435
|
+
**Example**
|
|
3436
|
+
|
|
3437
|
+
```ts
|
|
3438
|
+
const result = await g8.api.aiInbox.validateInboxSendMailbox({ query: { mailbox: "example" } });
|
|
3439
|
+
```
|
|
3440
|
+
|
|
3441
|
+
---
|
|
3442
|
+
|
|
3443
|
+
## Referenced types
|
|
3444
|
+
|
|
3445
|
+
Named types that appear in the tables above. Full TypeScript definitions: `G8Contract.<Name>` (`import type { G8Contract } from "@graph8/sdk"`).
|
|
3446
|
+
|
|
3447
|
+
<a id="type-commentattachmentref"></a>
|
|
3448
|
+
|
|
3449
|
+
### `CommentAttachmentRef`
|
|
3450
|
+
|
|
3451
|
+
A file already uploaded to the private note namespace. Only `token` and `key` are load-bearing: the server re-validates the capability token and never trusts the name, size or type a client sends. They are accepted because the app's model accepts them.
|
|
3452
|
+
|
|
3453
|
+
| Field | Type | Required | Description |
|
|
3454
|
+
|---|---|---|---|
|
|
3455
|
+
| `key` | `string` | yes | max length 1024 |
|
|
3456
|
+
| `token` | `string` | yes | max length 8192 |
|
|
3457
|
+
| `name` | `string \| null` | no | |
|
|
3458
|
+
| `size` | `integer \| null` | no | |
|
|
3459
|
+
| `type` | `string \| null` | no | |
|
|
3460
|
+
|
|
3461
|
+
<a id="type-linkedinautorespondconfig"></a>
|
|
3462
|
+
|
|
3463
|
+
### `LinkedInAutoRespondConfig`
|
|
3464
|
+
|
|
3465
|
+
When the AI is allowed to answer on a LinkedIn account by itself.
|
|
3466
|
+
|
|
3467
|
+
| Field | Type | Required | Description |
|
|
3468
|
+
|---|---|---|---|
|
|
3469
|
+
| `business_hours_end` | `integer` | no | default `17` |
|
|
3470
|
+
| `business_hours_only` | `boolean` | no | default `true` |
|
|
3471
|
+
| `business_hours_start` | `integer` | no | default `9` |
|
|
3472
|
+
| `enabled` | `boolean` | no | default `false` |
|
|
3473
|
+
| `exclude_intents` | `Array<string>` | no | |
|
|
3474
|
+
| `max_replies_per_conversation` | `integer` | no | default `2` |
|
|
3475
|
+
| `min_delay_minutes` | `integer` | no | default `5` |
|
|
3476
|
+
| `require_human_review` | `boolean` | no | True holds the reply as a draft instead of sending it. default `true` |
|
|
3477
|
+
| `timezone` | `string` | no | default `"America/New_York"` |
|
|
3478
|
+
| `trigger_on_intents` | `Array<string>` | no | |
|
|
3479
|
+
|
|
3480
|
+
<a id="type-mailboxjobitem"></a>
|
|
3481
|
+
|
|
3482
|
+
### `MailboxJobItem`
|
|
3483
|
+
|
|
3484
|
+
One mailbox in a bulk activate/deactivate request.
|
|
3485
|
+
|
|
3486
|
+
| Field | Type | Required | Description |
|
|
3487
|
+
|---|---|---|---|
|
|
3488
|
+
| `mailbox` | `string` | yes | The mailbox address. |
|
|
3489
|
+
| `provider` | `"google_mailbox" \| "smtp"` | yes | |
|
|
3490
|
+
| `display_name` | `string \| null` | no | |
|