@graph8/sdk 0.357.0 → 0.361.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.
Files changed (42) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/index.browser.js +1 -1
  3. package/dist/index.browser.js.map +1 -1
  4. package/dist/index.browser.mjs +1 -1
  5. package/dist/index.browser.mjs.map +1 -1
  6. package/dist/index.d.mts +115 -9
  7. package/dist/index.d.ts +115 -9
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +1 -1
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/react.browser.js +1 -1
  13. package/dist/react.browser.js.map +1 -1
  14. package/dist/react.browser.mjs +1 -1
  15. package/dist/react.browser.mjs.map +1 -1
  16. package/dist/react.d.mts +112 -6
  17. package/dist/react.d.ts +112 -6
  18. package/dist/react.js +1 -1
  19. package/dist/react.js.map +1 -1
  20. package/dist/react.mjs +1 -1
  21. package/dist/react.mjs.map +1 -1
  22. package/dist/types/core.d.ts +3 -2
  23. package/dist/types/react.d.ts +2 -0
  24. package/dist/types/studio.d.ts +48 -0
  25. package/dist/types/version.d.ts +2 -2
  26. package/docs/api/adCampaigns.d.ts +4 -0
  27. package/docs/api/adCampaigns.md +4 -0
  28. package/docs/api/enrichment.d.ts +18 -0
  29. package/docs/api/enrichment.md +25 -4
  30. package/docs/api/gtmCampaigns.d.ts +4 -0
  31. package/docs/api/gtmCampaigns.md +2 -0
  32. package/docs/api/gtmContext.d.ts +5 -1
  33. package/docs/api/gtmContext.md +15 -7
  34. package/docs/api/integrations.d.ts +29 -4
  35. package/docs/api/integrations.md +14 -0
  36. package/docs/api/revenueLifecycle.d.ts +3 -1
  37. package/docs/api/revenueLifecycle.md +12 -2
  38. package/docs/api/seo.d.ts +1 -1
  39. package/docs/api/seo.md +1 -1
  40. package/docs/api/workflows.md +46 -2
  41. package/docs/sdk-clients.md +1 -1
  42. package/package.json +1 -1
package/dist/react.d.mts CHANGED
@@ -403,6 +403,18 @@ interface GlobalContextDocument {
403
403
  metadata: Record<string, unknown> | null;
404
404
  created_at: string | null;
405
405
  updated_at: string | null;
406
+ /** Fields the endpoint actually returns (the ones above predate them). */
407
+ display_name?: string | null;
408
+ file_type?: string | null;
409
+ folder_path?: string | null;
410
+ status?: string | null;
411
+ priority?: number | null;
412
+ version?: string | number | null;
413
+ /** The group the Studio Wiki shows the document under (TAM / ICP / Persona
414
+ * Research are stored as market/audience but shown under "targeting"). */
415
+ wiki_category?: string;
416
+ /** Which Wiki bucket the row came from. */
417
+ workflow?: "context" | "intelligence" | "research";
406
418
  }
407
419
  interface Persona {
408
420
  id: string;
@@ -413,6 +425,20 @@ interface Persona {
413
425
  goals: string[];
414
426
  channels: string[];
415
427
  created_at: string | null;
428
+ /** Fields GET /personas actually returns (cb_personas columns). The persona's
429
+ * name is `title`, its "why" is `why_target`, its signals are `key_signals`. */
430
+ title?: string | null;
431
+ why_target?: string | null;
432
+ key_signals?: unknown[];
433
+ campaign_approach?: string | null;
434
+ recommended_goal?: string | null;
435
+ expected_receptivity?: string | null;
436
+ confidence?: string | null;
437
+ confidence_score?: number | null;
438
+ priority?: number | null;
439
+ pinned?: boolean | null;
440
+ source?: string | null;
441
+ updated_at?: string | null;
416
442
  }
417
443
  interface ICP {
418
444
  id: string;
@@ -426,6 +452,24 @@ interface ICP {
426
452
  revenue_max: number | null;
427
453
  countries: string[] | null;
428
454
  created_at: string | null;
455
+ /** Fields GET /icps actually returns (cb_icps columns). Industries and
456
+ * company sizes live in `firmographics.industries` / `firmographics.company_sizes`. */
457
+ firmographics?: {
458
+ industries?: string[];
459
+ company_sizes?: string[];
460
+ revenue_ranges?: string[];
461
+ geographies?: string[];
462
+ [key: string]: unknown;
463
+ };
464
+ tech_stack?: Record<string, unknown>;
465
+ buying_signals?: unknown[];
466
+ fit_score?: number | null;
467
+ opportunity_score?: number | null;
468
+ readiness_score?: number | null;
469
+ total_score?: number | null;
470
+ pinned?: boolean | null;
471
+ priority?: number | null;
472
+ updated_at?: string | null;
429
473
  }
430
474
  interface IntelligenceData {
431
475
  id: string;
@@ -464,6 +508,10 @@ declare const createStudioClient: (apiKey: string, apiUrl?: string) => {
464
508
  category?: string;
465
509
  limit?: number;
466
510
  include_content?: boolean;
511
+ /** Also list the Wiki's Intelligence documents (metadata only). */
512
+ include_intelligence?: boolean;
513
+ /** Also list the Wiki's Research reports. */
514
+ include_research?: boolean;
467
515
  }): Promise<{
468
516
  data: GlobalContextDocument[];
469
517
  }>;
@@ -3312,10 +3360,14 @@ interface AdCampaignResponse {
3312
3360
  launched_at?: string | null;
3313
3361
  name: string;
3314
3362
  objective?: string | null;
3363
+ /** True when end_date is before today (UTC). Null when the campaign has no end date. */
3364
+ past_end_date?: boolean | null;
3315
3365
  platform: string;
3316
3366
  platform_campaign_id?: string | null;
3317
3367
  start_date?: string | null;
3318
3368
  status: string;
3369
+ /** Plain-language note when the stored status cannot be taken at face value, e.g. the end date has passed but the status still says pending. Null otherwise. */
3370
+ status_note?: string | null;
3319
3371
  sync_config_id: number;
3320
3372
  }
3321
3373
  /**
@@ -8029,6 +8081,8 @@ interface CampaignFullPatchRequest {
8029
8081
  primary_hook?: string | null;
8030
8082
  /** If provided, replaces the sequence step ordering (same as PUT /sequence). */
8031
8083
  sequence_steps?: Array<SequenceStepRef> | null;
8084
+ /** Replace the campaign's channels (email, linkedin, phone, voice_ai, sms). Omit to leave them unchanged. Same as PATCH /campaigns/{id}. */
8085
+ target_channels?: Array<string> | null;
8032
8086
  target_persona?: string | null;
8033
8087
  /** Sequence IDs to UNLINK from this campaign. DELETEs ONLY rows where status='linked'. Launch-audit rows (status='pushed'/'superseded'/'failed') are never touched — those are an immutable historical record. */
8034
8088
  unlink_sequence_ids?: Array<string> | null;
@@ -9003,14 +9057,19 @@ interface ConfirmBookingRequest {
9003
9057
  * This is the irreversible half: records begin landing in graph8 and a
9004
9058
  * migration cannot be un-run, only cancelled part-way.
9005
9059
  *
9006
- * Both fields are OPTIONAL and omitting them accepts the discovery as
9060
+ * Every field is OPTIONAL and omitting them accepts the discovery as
9007
9061
  * proposed - which is the point of previewing it first. Send
9008
- * `field_mappings_override` to change where a CRM field lands, or
9009
- * `selected_list_ids` to import only some lists.
9062
+ * `field_mappings_override` to change where a CRM field lands,
9063
+ * `selected_list_ids` to import only some lists, or `owner_decisions` to say
9064
+ * what happens to the records of Salesforce owners who are not in graph8.
9065
+ * A Salesforce discovery with an `unmatched` owner needs a decision for that
9066
+ * owner: without one the confirm is refused with 422.
9010
9067
  */
9011
9068
  interface ConfirmMigrationRequest {
9012
9069
  /** Per entity type, the mappings to use instead of the discovered ones. Omit to accept what discovery proposed. */
9013
9070
  field_mappings_override?: Record<string, Array<Record<string, unknown>>> | null;
9071
+ /** Salesforce only: one decision per record owner who is not a graph8 member (at most 500). Required for every owner whose `match.status` is `unmatched`; optional `assign` for a `placeholder` owner. `match` moves every record the owner has; `assign` moves only their open deals and open tasks. */
9072
+ owner_decisions?: Array<MigrationOwnerDecision> | null;
9014
9073
  /** Import only these CRM lists. Omit to take every discovered list. */
9015
9074
  selected_list_ids?: Array<string> | null;
9016
9075
  }
@@ -15346,7 +15405,9 @@ interface LifecycleRecordItem {
15346
15405
  subscription_status?: string | null;
15347
15406
  }
15348
15407
  interface LifecycleStageMoveRequest {
15349
- /** Company moves only: run every check the move runs (company exists, stage known, Customers/Churned guards) and return the would-be transition without writing anything. Ignored for contact moves. */
15408
+ /** Confirm a move to Customers of a company with no subscription (or a contact with no company or whose company has none). Without it such a move is refused with 409 and detail.code 'customers_without_subscription'. */
15409
+ confirm_without_subscription?: boolean;
15410
+ /** Run every check the move runs (record exists, stage known, Customers/Churned guards, the no-subscription confirmation) and return the would-be transition without writing anything. */
15350
15411
  dry_run?: boolean;
15351
15412
  /** Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. Case and surrounding whitespace are ignored, and a stage's display name is accepted too. */
15352
15413
  target_slug: string;
@@ -16949,6 +17010,25 @@ interface MergeRecordRequest {
16949
17010
  interface MessageSendRequest {
16950
17011
  text: string;
16951
17012
  }
17013
+ /**
17014
+ * What happens to the records of one Salesforce record owner who is not a graph8 member.
17015
+ *
17016
+ * Discovery lists every record owner in the status's `owners`, each with a
17017
+ * `match.status`. An owner whose status is `unmatched` needs a decision, or
17018
+ * the confirm is refused with 422. An owner whose status is `placeholder`
17019
+ * (inactive in Salesforce, a rep who left) may only be assigned; without a
17020
+ * decision their records stay on the placeholder, as history.
17021
+ */
17022
+ interface MigrationOwnerDecision {
17023
+ /** `invite`: invite the owner to graph8 by email; their records are held for the invited address and become theirs when they first sign in. Invites go out in a member's name, so an API key's confirm with an `invite` decision is refused with 403. `assign`: move only their OPEN deals and OPEN tasks to the graph8 member `assign_to_team_member_id`; contacts, companies and closed records stay on the owner's placeholder. `match`: this Salesforce user IS the graph8 member `assign_to_team_member_id`; EVERY record they own moves to that member. `unassigned`: import their records with no owner. */
17024
+ action: "invite" | "assign" | "unassigned" | "match";
17025
+ /** `assign` and `match` only: the graph8 team member id who receives the records. */
17026
+ assign_to_team_member_id?: string | null;
17027
+ /** `invite` only: the address to invite. Omit to use the owner's Salesforce email. */
17028
+ invite_email?: string | null;
17029
+ /** The owner's Salesforce user id, as discovery listed it in `owners`. */
17030
+ sf_user_id: string;
17031
+ }
16952
17032
  /**
16953
17033
  * Mine conversations for content ideas. SPENDS CREDIT, per conversation.
16954
17034
  *
@@ -22129,7 +22209,7 @@ interface SeoResearchKeywordsResponse {
22129
22209
  * refused with a 422 if it carries a scheme or a path.
22130
22210
  */
22131
22211
  interface SeoSaveTrackedKeywordsRequest {
22132
- cadence?: "daily" | "weekly";
22212
+ cadence?: "daily" | "weekly" | "manual";
22133
22213
  domain: string;
22134
22214
  keywords: Array<SeoTrackKeywordItem>;
22135
22215
  language_code?: string;
@@ -27548,6 +27628,8 @@ interface developer_api__interfaces__v1__gtm_campaigns_router__CampaignUpdateReq
27548
27628
  name?: string | null;
27549
27629
  /** Primary hook text */
27550
27630
  primary_hook?: string | null;
27631
+ /** Replace the campaign's channels, e.g. ['email','linkedin']. Accepted values: email, linkedin, phone, voice_ai, sms. Omit to leave them unchanged. Existing documents and steps are not deleted. */
27632
+ target_channels?: Array<string> | null;
27551
27633
  /** Target persona */
27552
27634
  target_persona?: string | null;
27553
27635
  }
@@ -35511,6 +35593,8 @@ interface ApiOperationMap {
35511
35593
  query?: {
35512
35594
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
35513
35595
  hard_delete?: boolean;
35596
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
35597
+ scope?: string | null;
35514
35598
  };
35515
35599
  headers?: {
35516
35600
  "X-Target-Org-Id"?: string | null;
@@ -35532,6 +35616,8 @@ interface ApiOperationMap {
35532
35616
  query?: {
35533
35617
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
35534
35618
  hard_delete?: boolean;
35619
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
35620
+ scope?: string | null;
35535
35621
  };
35536
35622
  headers?: {
35537
35623
  "X-Target-Org-Id"?: string | null;
@@ -36383,6 +36469,8 @@ interface ApiOperationMap {
36383
36469
  query?: {
36384
36470
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
36385
36471
  hard_delete?: boolean;
36472
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
36473
+ scope?: string | null;
36386
36474
  };
36387
36475
  headers?: {
36388
36476
  "X-Target-Org-Id"?: string | null;
@@ -61016,10 +61104,14 @@ interface ApiOperationMap {
61016
61104
  list_global_context_documents_global_context_documents_get: {
61017
61105
  input: {
61018
61106
  query?: {
61019
- /** Filter by context category */
61107
+ /** Filter by context category: brand, audience, messaging, market, offer, targeting, data (case-insensitive). `targeting` matches the Studio Wiki's Targeting group (TAM / ICP / Persona Research). An unknown category that matches no document returns 422 listing the valid categories. */
61020
61108
  category?: string | null;
61021
61109
  /** Include each document's body text at `content` (read from meta_data.content). Default True preserves historical behavior (this endpoint has always returned content); pass false for a lighter metadata-only listing. */
61022
61110
  include_content?: boolean;
61111
+ /** Also list the Wiki's Intelligence documents (website scrape, competitor discovery, organic keywords, brand news, ...) with `workflow`='intelligence' and category 'data'. Metadata only: read a body with GET /intelligence-data ?data_type=<file_type>&include_content=true. Default false (historical shape). */
61112
+ include_intelligence?: boolean;
61113
+ /** Also list the Wiki's Research reports with `workflow`='research' and category 'data'; `content` carries the report markdown when include_content is true. Default false (historical shape). */
61114
+ include_research?: boolean;
61023
61115
  limit?: number;
61024
61116
  };
61025
61117
  headers?: {
@@ -71596,6 +71688,10 @@ interface ApiOperationMap {
71596
71688
  /** AI group id. */
71597
71689
  group_id: string;
71598
71690
  };
71691
+ query?: {
71692
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
71693
+ scope?: string | null;
71694
+ };
71599
71695
  headers?: {
71600
71696
  "X-Target-Org-Id"?: string | null;
71601
71697
  };
@@ -79718,6 +79814,10 @@ interface ApiOperationMap {
79718
79814
  /** The AI group id. */
79719
79815
  group_id: string;
79720
79816
  };
79817
+ query?: {
79818
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
79819
+ scope?: string | null;
79820
+ };
79721
79821
  headers?: {
79722
79822
  "X-Target-Org-Id"?: string | null;
79723
79823
  };
@@ -80911,6 +81011,10 @@ interface ApiOperationMap {
80911
81011
  /** Enrichment configuration id (UUID). */
80912
81012
  config_id: string;
80913
81013
  };
81014
+ query?: {
81015
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
81016
+ scope?: string | null;
81017
+ };
80914
81018
  headers?: {
80915
81019
  "X-Target-Org-Id"?: string | null;
80916
81020
  };
@@ -94226,6 +94330,8 @@ declare const useG8: () => {
94226
94330
  category?: string;
94227
94331
  limit?: number;
94228
94332
  include_content?: boolean;
94333
+ include_intelligence?: boolean;
94334
+ include_research?: boolean;
94229
94335
  }): Promise<{
94230
94336
  data: GlobalContextDocument[];
94231
94337
  }>;
package/dist/react.d.ts CHANGED
@@ -403,6 +403,18 @@ interface GlobalContextDocument {
403
403
  metadata: Record<string, unknown> | null;
404
404
  created_at: string | null;
405
405
  updated_at: string | null;
406
+ /** Fields the endpoint actually returns (the ones above predate them). */
407
+ display_name?: string | null;
408
+ file_type?: string | null;
409
+ folder_path?: string | null;
410
+ status?: string | null;
411
+ priority?: number | null;
412
+ version?: string | number | null;
413
+ /** The group the Studio Wiki shows the document under (TAM / ICP / Persona
414
+ * Research are stored as market/audience but shown under "targeting"). */
415
+ wiki_category?: string;
416
+ /** Which Wiki bucket the row came from. */
417
+ workflow?: "context" | "intelligence" | "research";
406
418
  }
407
419
  interface Persona {
408
420
  id: string;
@@ -413,6 +425,20 @@ interface Persona {
413
425
  goals: string[];
414
426
  channels: string[];
415
427
  created_at: string | null;
428
+ /** Fields GET /personas actually returns (cb_personas columns). The persona's
429
+ * name is `title`, its "why" is `why_target`, its signals are `key_signals`. */
430
+ title?: string | null;
431
+ why_target?: string | null;
432
+ key_signals?: unknown[];
433
+ campaign_approach?: string | null;
434
+ recommended_goal?: string | null;
435
+ expected_receptivity?: string | null;
436
+ confidence?: string | null;
437
+ confidence_score?: number | null;
438
+ priority?: number | null;
439
+ pinned?: boolean | null;
440
+ source?: string | null;
441
+ updated_at?: string | null;
416
442
  }
417
443
  interface ICP {
418
444
  id: string;
@@ -426,6 +452,24 @@ interface ICP {
426
452
  revenue_max: number | null;
427
453
  countries: string[] | null;
428
454
  created_at: string | null;
455
+ /** Fields GET /icps actually returns (cb_icps columns). Industries and
456
+ * company sizes live in `firmographics.industries` / `firmographics.company_sizes`. */
457
+ firmographics?: {
458
+ industries?: string[];
459
+ company_sizes?: string[];
460
+ revenue_ranges?: string[];
461
+ geographies?: string[];
462
+ [key: string]: unknown;
463
+ };
464
+ tech_stack?: Record<string, unknown>;
465
+ buying_signals?: unknown[];
466
+ fit_score?: number | null;
467
+ opportunity_score?: number | null;
468
+ readiness_score?: number | null;
469
+ total_score?: number | null;
470
+ pinned?: boolean | null;
471
+ priority?: number | null;
472
+ updated_at?: string | null;
429
473
  }
430
474
  interface IntelligenceData {
431
475
  id: string;
@@ -464,6 +508,10 @@ declare const createStudioClient: (apiKey: string, apiUrl?: string) => {
464
508
  category?: string;
465
509
  limit?: number;
466
510
  include_content?: boolean;
511
+ /** Also list the Wiki's Intelligence documents (metadata only). */
512
+ include_intelligence?: boolean;
513
+ /** Also list the Wiki's Research reports. */
514
+ include_research?: boolean;
467
515
  }): Promise<{
468
516
  data: GlobalContextDocument[];
469
517
  }>;
@@ -3312,10 +3360,14 @@ interface AdCampaignResponse {
3312
3360
  launched_at?: string | null;
3313
3361
  name: string;
3314
3362
  objective?: string | null;
3363
+ /** True when end_date is before today (UTC). Null when the campaign has no end date. */
3364
+ past_end_date?: boolean | null;
3315
3365
  platform: string;
3316
3366
  platform_campaign_id?: string | null;
3317
3367
  start_date?: string | null;
3318
3368
  status: string;
3369
+ /** Plain-language note when the stored status cannot be taken at face value, e.g. the end date has passed but the status still says pending. Null otherwise. */
3370
+ status_note?: string | null;
3319
3371
  sync_config_id: number;
3320
3372
  }
3321
3373
  /**
@@ -8029,6 +8081,8 @@ interface CampaignFullPatchRequest {
8029
8081
  primary_hook?: string | null;
8030
8082
  /** If provided, replaces the sequence step ordering (same as PUT /sequence). */
8031
8083
  sequence_steps?: Array<SequenceStepRef> | null;
8084
+ /** Replace the campaign's channels (email, linkedin, phone, voice_ai, sms). Omit to leave them unchanged. Same as PATCH /campaigns/{id}. */
8085
+ target_channels?: Array<string> | null;
8032
8086
  target_persona?: string | null;
8033
8087
  /** Sequence IDs to UNLINK from this campaign. DELETEs ONLY rows where status='linked'. Launch-audit rows (status='pushed'/'superseded'/'failed') are never touched — those are an immutable historical record. */
8034
8088
  unlink_sequence_ids?: Array<string> | null;
@@ -9003,14 +9057,19 @@ interface ConfirmBookingRequest {
9003
9057
  * This is the irreversible half: records begin landing in graph8 and a
9004
9058
  * migration cannot be un-run, only cancelled part-way.
9005
9059
  *
9006
- * Both fields are OPTIONAL and omitting them accepts the discovery as
9060
+ * Every field is OPTIONAL and omitting them accepts the discovery as
9007
9061
  * proposed - which is the point of previewing it first. Send
9008
- * `field_mappings_override` to change where a CRM field lands, or
9009
- * `selected_list_ids` to import only some lists.
9062
+ * `field_mappings_override` to change where a CRM field lands,
9063
+ * `selected_list_ids` to import only some lists, or `owner_decisions` to say
9064
+ * what happens to the records of Salesforce owners who are not in graph8.
9065
+ * A Salesforce discovery with an `unmatched` owner needs a decision for that
9066
+ * owner: without one the confirm is refused with 422.
9010
9067
  */
9011
9068
  interface ConfirmMigrationRequest {
9012
9069
  /** Per entity type, the mappings to use instead of the discovered ones. Omit to accept what discovery proposed. */
9013
9070
  field_mappings_override?: Record<string, Array<Record<string, unknown>>> | null;
9071
+ /** Salesforce only: one decision per record owner who is not a graph8 member (at most 500). Required for every owner whose `match.status` is `unmatched`; optional `assign` for a `placeholder` owner. `match` moves every record the owner has; `assign` moves only their open deals and open tasks. */
9072
+ owner_decisions?: Array<MigrationOwnerDecision> | null;
9014
9073
  /** Import only these CRM lists. Omit to take every discovered list. */
9015
9074
  selected_list_ids?: Array<string> | null;
9016
9075
  }
@@ -15346,7 +15405,9 @@ interface LifecycleRecordItem {
15346
15405
  subscription_status?: string | null;
15347
15406
  }
15348
15407
  interface LifecycleStageMoveRequest {
15349
- /** Company moves only: run every check the move runs (company exists, stage known, Customers/Churned guards) and return the would-be transition without writing anything. Ignored for contact moves. */
15408
+ /** Confirm a move to Customers of a company with no subscription (or a contact with no company or whose company has none). Without it such a move is refused with 409 and detail.code 'customers_without_subscription'. */
15409
+ confirm_without_subscription?: boolean;
15410
+ /** Run every check the move runs (record exists, stage known, Customers/Churned guards, the no-subscription confirmation) and return the would-be transition without writing anything. */
15350
15411
  dry_run?: boolean;
15351
15412
  /** Destination lifecycle slug, e.g. 'suspects', 'leads', 'trials', 'customers', 'churned'. Case and surrounding whitespace are ignored, and a stage's display name is accepted too. */
15352
15413
  target_slug: string;
@@ -16949,6 +17010,25 @@ interface MergeRecordRequest {
16949
17010
  interface MessageSendRequest {
16950
17011
  text: string;
16951
17012
  }
17013
+ /**
17014
+ * What happens to the records of one Salesforce record owner who is not a graph8 member.
17015
+ *
17016
+ * Discovery lists every record owner in the status's `owners`, each with a
17017
+ * `match.status`. An owner whose status is `unmatched` needs a decision, or
17018
+ * the confirm is refused with 422. An owner whose status is `placeholder`
17019
+ * (inactive in Salesforce, a rep who left) may only be assigned; without a
17020
+ * decision their records stay on the placeholder, as history.
17021
+ */
17022
+ interface MigrationOwnerDecision {
17023
+ /** `invite`: invite the owner to graph8 by email; their records are held for the invited address and become theirs when they first sign in. Invites go out in a member's name, so an API key's confirm with an `invite` decision is refused with 403. `assign`: move only their OPEN deals and OPEN tasks to the graph8 member `assign_to_team_member_id`; contacts, companies and closed records stay on the owner's placeholder. `match`: this Salesforce user IS the graph8 member `assign_to_team_member_id`; EVERY record they own moves to that member. `unassigned`: import their records with no owner. */
17024
+ action: "invite" | "assign" | "unassigned" | "match";
17025
+ /** `assign` and `match` only: the graph8 team member id who receives the records. */
17026
+ assign_to_team_member_id?: string | null;
17027
+ /** `invite` only: the address to invite. Omit to use the owner's Salesforce email. */
17028
+ invite_email?: string | null;
17029
+ /** The owner's Salesforce user id, as discovery listed it in `owners`. */
17030
+ sf_user_id: string;
17031
+ }
16952
17032
  /**
16953
17033
  * Mine conversations for content ideas. SPENDS CREDIT, per conversation.
16954
17034
  *
@@ -22129,7 +22209,7 @@ interface SeoResearchKeywordsResponse {
22129
22209
  * refused with a 422 if it carries a scheme or a path.
22130
22210
  */
22131
22211
  interface SeoSaveTrackedKeywordsRequest {
22132
- cadence?: "daily" | "weekly";
22212
+ cadence?: "daily" | "weekly" | "manual";
22133
22213
  domain: string;
22134
22214
  keywords: Array<SeoTrackKeywordItem>;
22135
22215
  language_code?: string;
@@ -27548,6 +27628,8 @@ interface developer_api__interfaces__v1__gtm_campaigns_router__CampaignUpdateReq
27548
27628
  name?: string | null;
27549
27629
  /** Primary hook text */
27550
27630
  primary_hook?: string | null;
27631
+ /** Replace the campaign's channels, e.g. ['email','linkedin']. Accepted values: email, linkedin, phone, voice_ai, sms. Omit to leave them unchanged. Existing documents and steps are not deleted. */
27632
+ target_channels?: Array<string> | null;
27551
27633
  /** Target persona */
27552
27634
  target_persona?: string | null;
27553
27635
  }
@@ -35511,6 +35593,8 @@ interface ApiOperationMap {
35511
35593
  query?: {
35512
35594
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
35513
35595
  hard_delete?: boolean;
35596
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
35597
+ scope?: string | null;
35514
35598
  };
35515
35599
  headers?: {
35516
35600
  "X-Target-Org-Id"?: string | null;
@@ -35532,6 +35616,8 @@ interface ApiOperationMap {
35532
35616
  query?: {
35533
35617
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
35534
35618
  hard_delete?: boolean;
35619
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
35620
+ scope?: string | null;
35535
35621
  };
35536
35622
  headers?: {
35537
35623
  "X-Target-Org-Id"?: string | null;
@@ -36383,6 +36469,8 @@ interface ApiOperationMap {
36383
36469
  query?: {
36384
36470
  /** Remove the configuration permanently instead of deactivating it. The values it already wrote are kept either way. */
36385
36471
  hard_delete?: boolean;
36472
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
36473
+ scope?: string | null;
36386
36474
  };
36387
36475
  headers?: {
36388
36476
  "X-Target-Org-Id"?: string | null;
@@ -61016,10 +61104,14 @@ interface ApiOperationMap {
61016
61104
  list_global_context_documents_global_context_documents_get: {
61017
61105
  input: {
61018
61106
  query?: {
61019
- /** Filter by context category */
61107
+ /** Filter by context category: brand, audience, messaging, market, offer, targeting, data (case-insensitive). `targeting` matches the Studio Wiki's Targeting group (TAM / ICP / Persona Research). An unknown category that matches no document returns 422 listing the valid categories. */
61020
61108
  category?: string | null;
61021
61109
  /** Include each document's body text at `content` (read from meta_data.content). Default True preserves historical behavior (this endpoint has always returned content); pass false for a lighter metadata-only listing. */
61022
61110
  include_content?: boolean;
61111
+ /** Also list the Wiki's Intelligence documents (website scrape, competitor discovery, organic keywords, brand news, ...) with `workflow`='intelligence' and category 'data'. Metadata only: read a body with GET /intelligence-data ?data_type=<file_type>&include_content=true. Default false (historical shape). */
61112
+ include_intelligence?: boolean;
61113
+ /** Also list the Wiki's Research reports with `workflow`='research' and category 'data'; `content` carries the report markdown when include_content is true. Default false (historical shape). */
61114
+ include_research?: boolean;
61023
61115
  limit?: number;
61024
61116
  };
61025
61117
  headers?: {
@@ -71596,6 +71688,10 @@ interface ApiOperationMap {
71596
71688
  /** AI group id. */
71597
71689
  group_id: string;
71598
71690
  };
71691
+ query?: {
71692
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
71693
+ scope?: string | null;
71694
+ };
71599
71695
  headers?: {
71600
71696
  "X-Target-Org-Id"?: string | null;
71601
71697
  };
@@ -79718,6 +79814,10 @@ interface ApiOperationMap {
79718
79814
  /** The AI group id. */
79719
79815
  group_id: string;
79720
79816
  };
79817
+ query?: {
79818
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
79819
+ scope?: string | null;
79820
+ };
79721
79821
  headers?: {
79722
79822
  "X-Target-Org-Id"?: string | null;
79723
79823
  };
@@ -80911,6 +81011,10 @@ interface ApiOperationMap {
80911
81011
  /** Enrichment configuration id (UUID). */
80912
81012
  config_id: string;
80913
81013
  };
81014
+ query?: {
81015
+ /** Set to `org` to change or delete a qualification group shared by every list (the ICP and Persona qualification groups). Admin keys only. Without it such a call answers 409 with code `shared_qualification_group`. */
81016
+ scope?: string | null;
81017
+ };
80914
81018
  headers?: {
80915
81019
  "X-Target-Org-Id"?: string | null;
80916
81020
  };
@@ -94226,6 +94330,8 @@ declare const useG8: () => {
94226
94330
  category?: string;
94227
94331
  limit?: number;
94228
94332
  include_content?: boolean;
94333
+ include_intelligence?: boolean;
94334
+ include_research?: boolean;
94229
94335
  }): Promise<{
94230
94336
  data: GlobalContextDocument[];
94231
94337
  }>;
package/dist/react.js CHANGED
@@ -981,7 +981,7 @@ var EXTERNAL_ROUTES = {
981
981
  };
982
982
 
983
983
  // src/version.ts
984
- var SDK_VERSION = "0.357.0";
984
+ var SDK_VERSION = "0.361.0";
985
985
  var SDK_CLIENT_ID = `js-sdk/${SDK_VERSION}`;
986
986
 
987
987
  // src/http.ts