@smartytalent/openai-tools 0.1.33-dev.1 → 0.1.33-dev.11

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 (2) hide show
  1. package/dist/tools.json +1162 -235
  2. package/package.json +1 -1
package/dist/tools.json CHANGED
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "pageAfter": {
47
47
  "type": "string",
48
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
48
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
49
49
  },
50
50
  "pageBefore": {
51
51
  "type": "string",
@@ -773,7 +773,7 @@
773
773
  },
774
774
  "pageAfter": {
775
775
  "type": "string",
776
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
776
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
777
777
  },
778
778
  "pageBefore": {
779
779
  "type": "string",
@@ -1472,7 +1472,7 @@
1472
1472
  },
1473
1473
  "pageAfter": {
1474
1474
  "type": "string",
1475
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
1475
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
1476
1476
  },
1477
1477
  "pageBefore": {
1478
1478
  "type": "string",
@@ -1792,7 +1792,7 @@
1792
1792
  },
1793
1793
  "pageAfter": {
1794
1794
  "type": "string",
1795
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
1795
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
1796
1796
  },
1797
1797
  "pageBefore": {
1798
1798
  "type": "string",
@@ -2046,7 +2046,7 @@
2046
2046
  },
2047
2047
  "pageAfter": {
2048
2048
  "type": "string",
2049
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
2049
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
2050
2050
  },
2051
2051
  "pageBefore": {
2052
2052
  "type": "string",
@@ -3241,7 +3241,7 @@
3241
3241
  },
3242
3242
  "pageAfter": {
3243
3243
  "type": "string",
3244
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
3244
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
3245
3245
  },
3246
3246
  "pageBefore": {
3247
3247
  "type": "string",
@@ -4484,7 +4484,7 @@
4484
4484
  },
4485
4485
  "pageAfter": {
4486
4486
  "type": "string",
4487
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
4487
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
4488
4488
  },
4489
4489
  "pageBefore": {
4490
4490
  "type": "string",
@@ -5695,7 +5695,7 @@
5695
5695
  },
5696
5696
  "pageAfter": {
5697
5697
  "type": "string",
5698
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
5698
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
5699
5699
  },
5700
5700
  "pageBefore": {
5701
5701
  "type": "string",
@@ -5976,7 +5976,7 @@
5976
5976
  },
5977
5977
  "pageAfter": {
5978
5978
  "type": "string",
5979
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
5979
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
5980
5980
  },
5981
5981
  "pageBefore": {
5982
5982
  "type": "string",
@@ -6224,7 +6224,7 @@
6224
6224
  },
6225
6225
  "pageAfter": {
6226
6226
  "type": "string",
6227
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
6227
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
6228
6228
  },
6229
6229
  "pageBefore": {
6230
6230
  "type": "string",
@@ -6509,6 +6509,32 @@
6509
6509
  "type": "string",
6510
6510
  "description": "Return only emails belonging to this conversation. Resolved via the ConversationIdIndex GSI (top-level denormalisation of relationships.conversations[0].data.id). Pass the full conversation id (e.g. `980434e7...-2`)."
6511
6511
  },
6512
+ "filterDirection": {
6513
+ "type": "string",
6514
+ "description": "Return only emails with this direction. `inbound` = received from an external sender (Inbox), `outbound` = composed by the tenant (Sent). Resolved via the DirectionIndex GSI. Mutually exclusive with `filterStatus` and `filterConversationId` at the pagination layer.",
6515
+ "enum": [
6516
+ "inbound",
6517
+ "outbound"
6518
+ ]
6519
+ },
6520
+ "filterIds": {
6521
+ "type": "string",
6522
+ "description": "Batch-fetch emails by id. Pass a comma-separated list (e.g. `abc-1,def-2,ghi-3`). Resolves each id's shard from its suffix and issues a BatchGetItem. Used by the inbox UI to hydrate emails referenced by state rows (folder=unseen / starred / spam) without N showEmail calls. Cap: 500 ids per request; beyond that, page the state list and batch again. Bypasses pagination - the returned `data` is the full batch result with no `nextPage` cursor."
6523
+ },
6524
+ "filterIsSystemSpam": {
6525
+ "type": "boolean",
6526
+ "description": "Return only emails the system (broker / classifier) flagged as spam. Used by the Spam folder's `isSystemSpam=true` leg - the other leg comes from `/v1/states?folder=spam`. Backed by a filter-expression scan across shards for v1; promote to a sparse `SystemSpamIndex` if load warrants. Mutually exclusive with the other index-backed filters at the pagination layer."
6527
+ },
6528
+ "sort": {
6529
+ "type": "string",
6530
+ "description": "Order results by a time field. Leading `-` means descending\n(newest-first). Accepted values:\n `-created` newest-first by creation time (CreatedIndex)\n `created` oldest-first by creation time\n `-modified` most-recently-modified first (ModifiedIndex)\n `modified` least-recently-modified first\nTakes effect only when no equality filter (filterStatus,\nfilterConversationId, filterDirection) dictates a different\nindex; equality filters win. Compatible with date-range filters\n(filterCreatedFrom/To, filterModifiedFrom/To) which already use\nthe same indexes; sort just picks the direction.",
6531
+ "enum": [
6532
+ "-created",
6533
+ "created",
6534
+ "-modified",
6535
+ "modified"
6536
+ ]
6537
+ },
6512
6538
  "filterCreatedFrom": {
6513
6539
  "type": "string",
6514
6540
  "description": "Filters results to include only those created from the specified date and time. The value must be in ISO 8601 format."
@@ -6535,7 +6561,7 @@
6535
6561
  },
6536
6562
  "pageAfter": {
6537
6563
  "type": "string",
6538
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
6564
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
6539
6565
  },
6540
6566
  "pageBefore": {
6541
6567
  "type": "string",
@@ -6579,7 +6605,25 @@
6579
6605
  "type": "string"
6580
6606
  },
6581
6607
  "status": {
6582
- "type": "string"
6608
+ "type": "string",
6609
+ "enum": [
6610
+ "draft",
6611
+ "scheduled",
6612
+ "sent",
6613
+ "suppressed",
6614
+ "archived",
6615
+ "failed",
6616
+ "pending"
6617
+ ],
6618
+ "description": "Lifecycle status. draft = composing, scheduled = workflow owns the send, sent = delivered to SES, suppressed = SES bounce/complaint, archived = user soft-deleted, failed = internal error, pending = transitional."
6619
+ },
6620
+ "direction": {
6621
+ "type": "string",
6622
+ "enum": [
6623
+ "inbound",
6624
+ "outbound"
6625
+ ],
6626
+ "description": "Whether the email was received from an external sender (inbound, populated by the broker) or composed by the tenant/system and sent out (outbound). Populated at create time; never changes."
6583
6627
  },
6584
6628
  "emailFrom": {
6585
6629
  "type": "string"
@@ -6587,27 +6631,33 @@
6587
6631
  "emailTo": {
6588
6632
  "type": "string"
6589
6633
  },
6634
+ "emailCc": {
6635
+ "type": "array",
6636
+ "items": {
6637
+ "type": "string"
6638
+ },
6639
+ "description": "CC recipients. Each entry is an RFC 5322 address string."
6640
+ },
6641
+ "emailBcc": {
6642
+ "type": "array",
6643
+ "items": {
6644
+ "type": "string"
6645
+ },
6646
+ "description": "BCC recipients. Each entry is an RFC 5322 address string."
6647
+ },
6590
6648
  "subject": {
6591
- "oneOf": [
6592
- {
6593
- "type": "string"
6594
- },
6595
- {
6596
- "type": "object",
6597
- "additionalProperties": true
6598
- }
6599
- ]
6649
+ "type": "object",
6650
+ "additionalProperties": {
6651
+ "type": "string"
6652
+ },
6653
+ "description": "Multilingual subject keyed by IETF BCP 47 locale code (e.g. `en-US`, `pl-PL`). The DAL writes per-locale entries from the AI analyze + translate steps; the UI picks the right key based on `conversationLanguageCode`."
6600
6654
  },
6601
6655
  "body": {
6602
- "oneOf": [
6603
- {
6604
- "type": "string"
6605
- },
6606
- {
6607
- "type": "object",
6608
- "additionalProperties": true
6609
- }
6610
- ]
6656
+ "type": "object",
6657
+ "additionalProperties": {
6658
+ "type": "string"
6659
+ },
6660
+ "description": "Multilingual HTML body keyed by IETF BCP 47 locale code. Same shape as `subject`. Body values are HTML strings; plain-text fallback is derived on send."
6611
6661
  },
6612
6662
  "shortCode": {
6613
6663
  "type": "string"
@@ -6624,11 +6674,78 @@
6624
6674
  "isExternalSender": {
6625
6675
  "type": "boolean"
6626
6676
  },
6677
+ "attachments": {
6678
+ "type": "array",
6679
+ "items": {
6680
+ "type": "object",
6681
+ "properties": {
6682
+ "fileName": {
6683
+ "type": "string",
6684
+ "description": "Display name shown in the mail client and used as the attachment filename on send."
6685
+ },
6686
+ "url": {
6687
+ "type": "string",
6688
+ "description": "S3 URL of the stored file. For user-uploaded attachments this is the path returned by POST /v1/files; for system-generated attachments (job/persona/report PDFs) it is the resource's own S3 path."
6689
+ },
6690
+ "type": {
6691
+ "type": "string",
6692
+ "description": "Resource type this attachment belongs to. User-uploaded attachments use `files`; system-generated attachments use the owning resource type: `jobs`, `personas`, `talents`, `candidates`, `reports`, `ads`."
6693
+ },
6694
+ "fileId": {
6695
+ "type": "string",
6696
+ "description": "When `type == \"files\"`, the file resource ID so the frontend can resolve the latest file metadata (status, processing state) without parsing the URL."
6697
+ },
6698
+ "size": {
6699
+ "type": "integer",
6700
+ "description": "File size in bytes. Frontend displays it in the compose preview and mail list. Set by the upload flow from the Content-Length of the S3 object; absent on legacy rows."
6701
+ },
6702
+ "contentType": {
6703
+ "type": "string",
6704
+ "description": "MIME type (e.g. `application/pdf`, `image/png`). Drives icon selection in the UI and the Content-Type header in the outbound MIME part. Absent on legacy rows; frontend should fall back to extension inference."
6705
+ },
6706
+ "thumbnailUrl": {
6707
+ "type": "string",
6708
+ "description": "Optional S3 URL of a PNG preview (first-page render for PDFs/DOCX). Populated by the file service's conversion pipeline when a preview is available. Absent for non-previewable types."
6709
+ }
6710
+ }
6711
+ },
6712
+ "description": "Attachments on the email. For user-uploaded attachments: frontend creates a File via POST /v1/files (which returns a presigned PUT URL), uploads to S3, then references the File here with `type: \"files\"` and the returned `url`/`fileId`. For system-generated attachments (job/persona/report PDFs) the eventbus / outbound path populates these automatically."
6713
+ },
6714
+ "conversationLanguageCode": {
6715
+ "type": "string",
6716
+ "description": "Denormalised copy of the related conversation's languageCode (e.g. `pl-PL`, `en-US`). Avoids an N+1 fetch when the list/detail view needs to pick the right locale for the multilingual subject/body dicts. Source of truth is the conversation row; read-only from the email's perspective."
6717
+ },
6718
+ "parentEmailId": {
6719
+ "type": "string",
6720
+ "description": "Application-layer pointer to the email this one replies to. Used by the UI to render an 'in reply to' link in thread views. Set by the compose flow (frontend passes the parent on Reply) and by the broker when an inbound email matches an outbound via RFC 5322 In-Reply-To. Separate from meta.reference which carries the raw SMTP header chain."
6721
+ },
6722
+ "fromUserId": {
6723
+ "type": "string",
6724
+ "description": "Denormalised user id of the sender for outbound emails (the boe workflow user, or the human composer). Frontend joins this against its local user cache to render avatar + display name without a per-row API call. Null on inbound mail."
6725
+ },
6726
+ "fromCandidateId": {
6727
+ "type": "string",
6728
+ "description": "Denormalised candidate id of the sender for inbound replies from a candidate in an active conversation. Frontend joins this against its local candidate cache to render initials and the candidate name. Null on outbound mail and on anonymous inbound that didn't match a candidate."
6729
+ },
6730
+ "isSystemSpam": {
6731
+ "type": "boolean",
6732
+ "description": "System-level spam verdict on this email. Set by the broker (or a future classifier) at inbound time; never reflects a single user's opinion. Distinct from `status=suppressed`, which is SES reporting we cannot deliver on OUTBOUND. Frontend's Spam folder unions (my states where isSpam=true) with (emails where isSystemSpam=true)."
6733
+ },
6734
+ "scheduleId": {
6735
+ "type": "string",
6736
+ "description": "Foreign key to the Schedule resource driving this email's send. Populated by the wait:process workflow action right after it creates the Schedule. Null when no delayed send is pending (drafts, already-sent rows, inbound mail). To cancel the scheduled send, call DELETE /v1/schedules/{scheduleId} - the email eventbus handler listens for SCHEDULE_CANCELLED and reverts the row back to draft automatically."
6737
+ },
6738
+ "scheduledFireAt": {
6739
+ "type": "string",
6740
+ "description": "Denormalised copy of the owning Schedule's `fireAt` timestamp (ISO 8601). The scheduled-send banner reads this directly so the UI never has to round-trip to /v1/schedules just to render 'Send scheduled for X'. Source of truth is the Schedule; this field stays stable because Schedule.fireAt is immutable post-create."
6741
+ },
6627
6742
  "ttl": {
6628
6743
  "type": "string"
6629
6744
  },
6630
6745
  "sendScheduleDate": {
6631
- "type": "string"
6746
+ "type": "string",
6747
+ "deprecated": true,
6748
+ "description": "Legacy field from the retired CRUD-scheduler path. Kept as read-only metadata on old rows. New emails do not populate it; scheduling is owned by the workflow engine's wait:process action via the Schedule resource."
6632
6749
  },
6633
6750
  "meta": {
6634
6751
  "type": "object",
@@ -6749,6 +6866,25 @@
6749
6866
  }
6750
6867
  }
6751
6868
  }
6869
+ },
6870
+ "schedule": {
6871
+ "title": "EmailRelationshipsScheduleSchema",
6872
+ "type": "object",
6873
+ "description": "The Schedule arming this email's delayed send. Denormalised mirror of scheduleId so clients can `?include=schedule` in a single request. Populated by the email eventbus handler reacting to SCHEDULE_CREATED. Null while the email is draft / already-sent / inbound.",
6874
+ "properties": {
6875
+ "data": {
6876
+ "title": "EmailRelationshipsScheduleDataSchema",
6877
+ "type": "object",
6878
+ "properties": {
6879
+ "type": {
6880
+ "type": "string"
6881
+ },
6882
+ "id": {
6883
+ "type": "string"
6884
+ }
6885
+ }
6886
+ }
6887
+ }
6752
6888
  }
6753
6889
  }
6754
6890
  },
@@ -6822,7 +6958,25 @@
6822
6958
  "type": "string"
6823
6959
  },
6824
6960
  "status": {
6825
- "type": "string"
6961
+ "type": "string",
6962
+ "enum": [
6963
+ "draft",
6964
+ "scheduled",
6965
+ "sent",
6966
+ "suppressed",
6967
+ "archived",
6968
+ "failed",
6969
+ "pending"
6970
+ ],
6971
+ "description": "Lifecycle status. draft = composing, scheduled = workflow owns the send, sent = delivered to SES, suppressed = SES bounce/complaint, archived = user soft-deleted, failed = internal error, pending = transitional."
6972
+ },
6973
+ "direction": {
6974
+ "type": "string",
6975
+ "enum": [
6976
+ "inbound",
6977
+ "outbound"
6978
+ ],
6979
+ "description": "Whether the email was received from an external sender (inbound, populated by the broker) or composed by the tenant/system and sent out (outbound). Populated at create time; never changes."
6826
6980
  },
6827
6981
  "emailFrom": {
6828
6982
  "type": "string"
@@ -6830,27 +6984,33 @@
6830
6984
  "emailTo": {
6831
6985
  "type": "string"
6832
6986
  },
6987
+ "emailCc": {
6988
+ "type": "array",
6989
+ "items": {
6990
+ "type": "string"
6991
+ },
6992
+ "description": "CC recipients. Each entry is an RFC 5322 address string."
6993
+ },
6994
+ "emailBcc": {
6995
+ "type": "array",
6996
+ "items": {
6997
+ "type": "string"
6998
+ },
6999
+ "description": "BCC recipients. Each entry is an RFC 5322 address string."
7000
+ },
6833
7001
  "subject": {
6834
- "oneOf": [
6835
- {
6836
- "type": "string"
6837
- },
6838
- {
6839
- "type": "object",
6840
- "additionalProperties": true
6841
- }
6842
- ]
7002
+ "type": "object",
7003
+ "additionalProperties": {
7004
+ "type": "string"
7005
+ },
7006
+ "description": "Multilingual subject keyed by IETF BCP 47 locale code (e.g. `en-US`, `pl-PL`). The DAL writes per-locale entries from the AI analyze + translate steps; the UI picks the right key based on `conversationLanguageCode`."
6843
7007
  },
6844
7008
  "body": {
6845
- "oneOf": [
6846
- {
6847
- "type": "string"
6848
- },
6849
- {
6850
- "type": "object",
6851
- "additionalProperties": true
6852
- }
6853
- ]
7009
+ "type": "object",
7010
+ "additionalProperties": {
7011
+ "type": "string"
7012
+ },
7013
+ "description": "Multilingual HTML body keyed by IETF BCP 47 locale code. Same shape as `subject`. Body values are HTML strings; plain-text fallback is derived on send."
6854
7014
  },
6855
7015
  "shortCode": {
6856
7016
  "type": "string"
@@ -6867,11 +7027,78 @@
6867
7027
  "isExternalSender": {
6868
7028
  "type": "boolean"
6869
7029
  },
7030
+ "attachments": {
7031
+ "type": "array",
7032
+ "items": {
7033
+ "type": "object",
7034
+ "properties": {
7035
+ "fileName": {
7036
+ "type": "string",
7037
+ "description": "Display name shown in the mail client and used as the attachment filename on send."
7038
+ },
7039
+ "url": {
7040
+ "type": "string",
7041
+ "description": "S3 URL of the stored file. For user-uploaded attachments this is the path returned by POST /v1/files; for system-generated attachments (job/persona/report PDFs) it is the resource's own S3 path."
7042
+ },
7043
+ "type": {
7044
+ "type": "string",
7045
+ "description": "Resource type this attachment belongs to. User-uploaded attachments use `files`; system-generated attachments use the owning resource type: `jobs`, `personas`, `talents`, `candidates`, `reports`, `ads`."
7046
+ },
7047
+ "fileId": {
7048
+ "type": "string",
7049
+ "description": "When `type == \"files\"`, the file resource ID so the frontend can resolve the latest file metadata (status, processing state) without parsing the URL."
7050
+ },
7051
+ "size": {
7052
+ "type": "integer",
7053
+ "description": "File size in bytes. Frontend displays it in the compose preview and mail list. Set by the upload flow from the Content-Length of the S3 object; absent on legacy rows."
7054
+ },
7055
+ "contentType": {
7056
+ "type": "string",
7057
+ "description": "MIME type (e.g. `application/pdf`, `image/png`). Drives icon selection in the UI and the Content-Type header in the outbound MIME part. Absent on legacy rows; frontend should fall back to extension inference."
7058
+ },
7059
+ "thumbnailUrl": {
7060
+ "type": "string",
7061
+ "description": "Optional S3 URL of a PNG preview (first-page render for PDFs/DOCX). Populated by the file service's conversion pipeline when a preview is available. Absent for non-previewable types."
7062
+ }
7063
+ }
7064
+ },
7065
+ "description": "Attachments on the email. For user-uploaded attachments: frontend creates a File via POST /v1/files (which returns a presigned PUT URL), uploads to S3, then references the File here with `type: \"files\"` and the returned `url`/`fileId`. For system-generated attachments (job/persona/report PDFs) the eventbus / outbound path populates these automatically."
7066
+ },
7067
+ "conversationLanguageCode": {
7068
+ "type": "string",
7069
+ "description": "Denormalised copy of the related conversation's languageCode (e.g. `pl-PL`, `en-US`). Avoids an N+1 fetch when the list/detail view needs to pick the right locale for the multilingual subject/body dicts. Source of truth is the conversation row; read-only from the email's perspective."
7070
+ },
7071
+ "parentEmailId": {
7072
+ "type": "string",
7073
+ "description": "Application-layer pointer to the email this one replies to. Used by the UI to render an 'in reply to' link in thread views. Set by the compose flow (frontend passes the parent on Reply) and by the broker when an inbound email matches an outbound via RFC 5322 In-Reply-To. Separate from meta.reference which carries the raw SMTP header chain."
7074
+ },
7075
+ "fromUserId": {
7076
+ "type": "string",
7077
+ "description": "Denormalised user id of the sender for outbound emails (the boe workflow user, or the human composer). Frontend joins this against its local user cache to render avatar + display name without a per-row API call. Null on inbound mail."
7078
+ },
7079
+ "fromCandidateId": {
7080
+ "type": "string",
7081
+ "description": "Denormalised candidate id of the sender for inbound replies from a candidate in an active conversation. Frontend joins this against its local candidate cache to render initials and the candidate name. Null on outbound mail and on anonymous inbound that didn't match a candidate."
7082
+ },
7083
+ "isSystemSpam": {
7084
+ "type": "boolean",
7085
+ "description": "System-level spam verdict on this email. Set by the broker (or a future classifier) at inbound time; never reflects a single user's opinion. Distinct from `status=suppressed`, which is SES reporting we cannot deliver on OUTBOUND. Frontend's Spam folder unions (my states where isSpam=true) with (emails where isSystemSpam=true)."
7086
+ },
7087
+ "scheduleId": {
7088
+ "type": "string",
7089
+ "description": "Foreign key to the Schedule resource driving this email's send. Populated by the wait:process workflow action right after it creates the Schedule. Null when no delayed send is pending (drafts, already-sent rows, inbound mail). To cancel the scheduled send, call DELETE /v1/schedules/{scheduleId} - the email eventbus handler listens for SCHEDULE_CANCELLED and reverts the row back to draft automatically."
7090
+ },
7091
+ "scheduledFireAt": {
7092
+ "type": "string",
7093
+ "description": "Denormalised copy of the owning Schedule's `fireAt` timestamp (ISO 8601). The scheduled-send banner reads this directly so the UI never has to round-trip to /v1/schedules just to render 'Send scheduled for X'. Source of truth is the Schedule; this field stays stable because Schedule.fireAt is immutable post-create."
7094
+ },
6870
7095
  "ttl": {
6871
7096
  "type": "string"
6872
7097
  },
6873
7098
  "sendScheduleDate": {
6874
- "type": "string"
7099
+ "type": "string",
7100
+ "deprecated": true,
7101
+ "description": "Legacy field from the retired CRUD-scheduler path. Kept as read-only metadata on old rows. New emails do not populate it; scheduling is owned by the workflow engine's wait:process action via the Schedule resource."
6875
7102
  },
6876
7103
  "meta": {
6877
7104
  "type": "object",
@@ -6963,7 +7190,7 @@
6963
7190
  },
6964
7191
  "pageAfter": {
6965
7192
  "type": "string",
6966
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
7193
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
6967
7194
  },
6968
7195
  "pageBefore": {
6969
7196
  "type": "string",
@@ -7238,7 +7465,7 @@
7238
7465
  },
7239
7466
  "pageAfter": {
7240
7467
  "type": "string",
7241
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
7468
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
7242
7469
  },
7243
7470
  "pageBefore": {
7244
7471
  "type": "string",
@@ -8111,7 +8338,7 @@
8111
8338
  },
8112
8339
  "pageAfter": {
8113
8340
  "type": "string",
8114
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
8341
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
8115
8342
  },
8116
8343
  "pageBefore": {
8117
8344
  "type": "string",
@@ -8165,8 +8392,10 @@
8165
8392
  "pending",
8166
8393
  "fired",
8167
8394
  "cancelled",
8168
- "failed"
8169
- ]
8395
+ "failed",
8396
+ "paused"
8397
+ ],
8398
+ "description": "Lifecycle. `pending` is armed and will fire. `fired`/`failed` are terminal. `cancelled` is terminal (hard cancel via DELETE). `paused` is pause-for-edit: EventBridge entry is removed but the row stays re-activatable by PATCH back to `pending` with a new `fireAt`."
8170
8399
  },
8171
8400
  "fireAt": {
8172
8401
  "type": "string",
@@ -8313,6 +8542,24 @@
8313
8542
  }
8314
8543
  }
8315
8544
  }
8545
+ },
8546
+ "email": {
8547
+ "title": "ScheduleRelationshipsEmailSchema",
8548
+ "type": "object",
8549
+ "description": "The email this schedule was armed for. Set by wait:process so the email service can denormalise scheduleId back onto the email row when SCHEDULE_CREATED fires.",
8550
+ "properties": {
8551
+ "data": {
8552
+ "type": "object",
8553
+ "properties": {
8554
+ "type": {
8555
+ "type": "string"
8556
+ },
8557
+ "id": {
8558
+ "type": "string"
8559
+ }
8560
+ }
8561
+ }
8562
+ }
8316
8563
  }
8317
8564
  }
8318
8565
  }
@@ -8406,8 +8653,10 @@
8406
8653
  "pending",
8407
8654
  "fired",
8408
8655
  "cancelled",
8409
- "failed"
8410
- ]
8656
+ "failed",
8657
+ "paused"
8658
+ ],
8659
+ "description": "Lifecycle. `pending` is armed and will fire. `fired`/`failed` are terminal. `cancelled` is terminal (hard cancel via DELETE). `paused` is pause-for-edit: EventBridge entry is removed but the row stays re-activatable by PATCH back to `pending` with a new `fireAt`."
8411
8660
  },
8412
8661
  "fireAt": {
8413
8662
  "type": "string",
@@ -8554,21 +8803,39 @@
8554
8803
  }
8555
8804
  }
8556
8805
  }
8557
- }
8558
- }
8559
- }
8560
- }
8561
- }
8562
- }
8563
- }
8564
- },
8565
- "required": [
8566
- "scheduleId",
8567
- "requestBody"
8568
- ]
8569
- }
8570
- }
8571
- },
8806
+ },
8807
+ "email": {
8808
+ "title": "ScheduleRelationshipsEmailSchema",
8809
+ "type": "object",
8810
+ "description": "The email this schedule was armed for. Set by wait:process so the email service can denormalise scheduleId back onto the email row when SCHEDULE_CREATED fires.",
8811
+ "properties": {
8812
+ "data": {
8813
+ "type": "object",
8814
+ "properties": {
8815
+ "type": {
8816
+ "type": "string"
8817
+ },
8818
+ "id": {
8819
+ "type": "string"
8820
+ }
8821
+ }
8822
+ }
8823
+ }
8824
+ }
8825
+ }
8826
+ }
8827
+ }
8828
+ }
8829
+ }
8830
+ }
8831
+ },
8832
+ "required": [
8833
+ "scheduleId",
8834
+ "requestBody"
8835
+ ]
8836
+ }
8837
+ }
8838
+ },
8572
8839
  {
8573
8840
  "type": "function",
8574
8841
  "function": {
@@ -8898,7 +9165,7 @@
8898
9165
  },
8899
9166
  "pageAfter": {
8900
9167
  "type": "string",
8901
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
9168
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
8902
9169
  },
8903
9170
  "pageBefore": {
8904
9171
  "type": "string",
@@ -9609,7 +9876,7 @@
9609
9876
  },
9610
9877
  "pageAfter": {
9611
9878
  "type": "string",
9612
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
9879
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
9613
9880
  },
9614
9881
  "pageBefore": {
9615
9882
  "type": "string",
@@ -9920,7 +10187,7 @@
9920
10187
  },
9921
10188
  "pageAfter": {
9922
10189
  "type": "string",
9923
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10190
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
9924
10191
  },
9925
10192
  "pageBefore": {
9926
10193
  "type": "string",
@@ -10171,7 +10438,7 @@
10171
10438
  },
10172
10439
  "pageAfter": {
10173
10440
  "type": "string",
10174
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10441
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
10175
10442
  },
10176
10443
  "pageBefore": {
10177
10444
  "type": "string",
@@ -10602,7 +10869,7 @@
10602
10869
  },
10603
10870
  "pageAfter": {
10604
10871
  "type": "string",
10605
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10872
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
10606
10873
  },
10607
10874
  "pageBefore": {
10608
10875
  "type": "string",
@@ -10921,7 +11188,7 @@
10921
11188
  },
10922
11189
  "pageAfter": {
10923
11190
  "type": "string",
10924
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11191
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
10925
11192
  },
10926
11193
  "pageBefore": {
10927
11194
  "type": "string",
@@ -11234,12 +11501,627 @@
11234
11501
  "description": "Specifies the page number to retrieve. Used for traditional pagination."
11235
11502
  },
11236
11503
  "pageAfter": {
11504
+ "type": "string",
11505
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
11506
+ },
11507
+ "pageBefore": {
11237
11508
  "type": "string",
11238
11509
  "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11510
+ }
11511
+ }
11512
+ }
11513
+ }
11514
+ },
11515
+ {
11516
+ "type": "function",
11517
+ "function": {
11518
+ "name": "create_note",
11519
+ "description": "Create Note",
11520
+ "parameters": {
11521
+ "title": "CreateNoteRequestBody",
11522
+ "type": "object",
11523
+ "required": [
11524
+ "data"
11525
+ ],
11526
+ "properties": {
11527
+ "data": {
11528
+ "title": "CreateNoteRequestBodyData",
11529
+ "type": "object",
11530
+ "required": [
11531
+ "type",
11532
+ "attributes"
11533
+ ],
11534
+ "properties": {
11535
+ "type": {
11536
+ "type": "string",
11537
+ "enum": [
11538
+ "notes"
11539
+ ]
11540
+ },
11541
+ "attributes": {
11542
+ "title": "NoteAttributesSchema",
11543
+ "type": "object",
11544
+ "properties": {
11545
+ "name": {
11546
+ "type": "string"
11547
+ },
11548
+ "status": {
11549
+ "type": "string"
11550
+ },
11551
+ "details": {
11552
+ "type": "object",
11553
+ "additionalProperties": {
11554
+ "type": "string"
11555
+ },
11556
+ "description": "Multilingual note details keyed by language code"
11557
+ },
11558
+ "source": {
11559
+ "type": "string",
11560
+ "description": "Source of the note"
11561
+ },
11562
+ "ttl": {
11563
+ "type": "string",
11564
+ "description": "Time-to-live expiration timestamp"
11565
+ },
11566
+ "meta": {
11567
+ "type": "object",
11568
+ "additionalProperties": true
11569
+ },
11570
+ "timestamps": {
11571
+ "title": "ResourceTimestampsSchema",
11572
+ "type": "object",
11573
+ "properties": {
11574
+ "created": {
11575
+ "type": "string",
11576
+ "format": "date-time"
11577
+ },
11578
+ "modified": {
11579
+ "type": "string",
11580
+ "format": "date-time"
11581
+ }
11582
+ }
11583
+ }
11584
+ }
11585
+ },
11586
+ "relationships": {
11587
+ "title": "NoteRelationshipsSchema",
11588
+ "type": "object",
11589
+ "properties": {
11590
+ "candidate": {
11591
+ "title": "NoteRelationshipsCandidateSchema",
11592
+ "type": "object",
11593
+ "properties": {
11594
+ "data": {
11595
+ "title": "NoteRelationshipsCandidateDataSchema",
11596
+ "type": "object",
11597
+ "properties": {
11598
+ "type": {
11599
+ "type": "string"
11600
+ },
11601
+ "id": {
11602
+ "type": "string"
11603
+ }
11604
+ }
11605
+ }
11606
+ }
11607
+ },
11608
+ "translations": {
11609
+ "title": "NoteRelationshipsTranslationsSchema",
11610
+ "type": "object",
11611
+ "properties": {
11612
+ "data": {
11613
+ "type": "array",
11614
+ "items": {
11615
+ "title": "NoteRelationshipsTranslationsDataSchema",
11616
+ "type": "object",
11617
+ "properties": {
11618
+ "type": {
11619
+ "type": "string"
11620
+ },
11621
+ "id": {
11622
+ "type": "string"
11623
+ }
11624
+ }
11625
+ }
11626
+ }
11627
+ }
11628
+ },
11629
+ "report": {
11630
+ "title": "NoteRelationshipsReportSchema",
11631
+ "type": "object",
11632
+ "properties": {
11633
+ "data": {
11634
+ "title": "NoteRelationshipsReportDataSchema",
11635
+ "type": "object",
11636
+ "properties": {
11637
+ "type": {
11638
+ "type": "string"
11639
+ },
11640
+ "id": {
11641
+ "type": "string"
11642
+ }
11643
+ }
11644
+ }
11645
+ }
11646
+ },
11647
+ "operation": {
11648
+ "title": "NoteRelationshipsOperationSchema",
11649
+ "type": "object",
11650
+ "properties": {
11651
+ "data": {
11652
+ "title": "NoteRelationshipsOperationDataSchema",
11653
+ "type": "object",
11654
+ "properties": {
11655
+ "type": {
11656
+ "type": "string"
11657
+ },
11658
+ "id": {
11659
+ "type": "string"
11660
+ }
11661
+ }
11662
+ }
11663
+ }
11664
+ }
11665
+ }
11666
+ }
11667
+ }
11668
+ }
11669
+ }
11670
+ }
11671
+ }
11672
+ },
11673
+ {
11674
+ "type": "function",
11675
+ "function": {
11676
+ "name": "notes_options",
11677
+ "description": "Notes Options",
11678
+ "parameters": {
11679
+ "type": "object",
11680
+ "properties": {}
11681
+ }
11682
+ }
11683
+ },
11684
+ {
11685
+ "type": "function",
11686
+ "function": {
11687
+ "name": "show_note",
11688
+ "description": "Show Note",
11689
+ "parameters": {
11690
+ "type": "object",
11691
+ "properties": {}
11692
+ }
11693
+ }
11694
+ },
11695
+ {
11696
+ "type": "function",
11697
+ "function": {
11698
+ "name": "update_note",
11699
+ "description": "Update Note",
11700
+ "parameters": {
11701
+ "title": "UpdateNoteRequestBody",
11702
+ "type": "object",
11703
+ "required": [
11704
+ "data"
11705
+ ],
11706
+ "properties": {
11707
+ "data": {
11708
+ "title": "UpdateNoteRequestBodyData",
11709
+ "type": "object",
11710
+ "required": [
11711
+ "type",
11712
+ "id",
11713
+ "attributes"
11714
+ ],
11715
+ "properties": {
11716
+ "type": {
11717
+ "type": "string",
11718
+ "enum": [
11719
+ "notes"
11720
+ ]
11721
+ },
11722
+ "id": {
11723
+ "type": "string"
11724
+ },
11725
+ "attributes": {
11726
+ "title": "NoteAttributesSchema",
11727
+ "type": "object",
11728
+ "properties": {
11729
+ "name": {
11730
+ "type": "string"
11731
+ },
11732
+ "status": {
11733
+ "type": "string"
11734
+ },
11735
+ "details": {
11736
+ "type": "object",
11737
+ "additionalProperties": {
11738
+ "type": "string"
11739
+ },
11740
+ "description": "Multilingual note details keyed by language code"
11741
+ },
11742
+ "source": {
11743
+ "type": "string",
11744
+ "description": "Source of the note"
11745
+ },
11746
+ "ttl": {
11747
+ "type": "string",
11748
+ "description": "Time-to-live expiration timestamp"
11749
+ },
11750
+ "meta": {
11751
+ "type": "object",
11752
+ "additionalProperties": true
11753
+ },
11754
+ "timestamps": {
11755
+ "title": "ResourceTimestampsSchema",
11756
+ "type": "object",
11757
+ "properties": {
11758
+ "created": {
11759
+ "type": "string",
11760
+ "format": "date-time"
11761
+ },
11762
+ "modified": {
11763
+ "type": "string",
11764
+ "format": "date-time"
11765
+ }
11766
+ }
11767
+ }
11768
+ }
11769
+ }
11770
+ }
11771
+ }
11772
+ }
11773
+ }
11774
+ }
11775
+ },
11776
+ {
11777
+ "type": "function",
11778
+ "function": {
11779
+ "name": "delete_note",
11780
+ "description": "Delete Note",
11781
+ "parameters": {
11782
+ "type": "object",
11783
+ "properties": {}
11784
+ }
11785
+ }
11786
+ },
11787
+ {
11788
+ "type": "function",
11789
+ "function": {
11790
+ "name": "note_options",
11791
+ "description": "Note Options",
11792
+ "parameters": {
11793
+ "type": "object",
11794
+ "properties": {}
11795
+ }
11796
+ }
11797
+ },
11798
+ {
11799
+ "type": "function",
11800
+ "function": {
11801
+ "name": "list_states",
11802
+ "description": "List States",
11803
+ "parameters": {
11804
+ "type": "object",
11805
+ "properties": {
11806
+ "filterResourceType": {
11807
+ "type": "string",
11808
+ "description": "Only return states for this resource type.",
11809
+ "enum": [
11810
+ "emails",
11811
+ "candidates",
11812
+ "conversations",
11813
+ "jobs",
11814
+ "talents",
11815
+ "personas",
11816
+ "reports",
11817
+ "tasks"
11818
+ ]
11819
+ },
11820
+ "filterResourceIds": {
11821
+ "type": "string",
11822
+ "description": "Comma-separated list of resource ids to batch-fetch. Requires `filterResourceType`."
11823
+ },
11824
+ "folder": {
11825
+ "type": "string",
11826
+ "description": "Folder-style filter. Tagged-union: the fixed folders are an enum,\nand the label folder is a `label:<labelId>` template. Orthogonal\nto filterResourceType and filterResourceIds which scope within\nthe folder.\n\nFixed folders:\n `all` - default, no folder filter\n `unseen` - only unread rows (sparse UnseenIndex)\n `starred` - only starred rows (sparse StarredIndex)\n `spam` - only user-spam-marked rows (sparse SpamIndex)\n\nLabel folder:\n `label:<labelId>` - rows whose `flags.labels` contains labelId\n\nTypeScript callers should narrow this to\n`'all' | 'unseen' | 'starred' | 'spam' | \\`label:${string}\\``\nin their client wrapper; OpenAPI cannot express template-literal\nunions natively."
11827
+ },
11828
+ "pageSize": {
11829
+ "type": "integer",
11830
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
11831
+ },
11832
+ "pageAfter": {
11833
+ "type": "string",
11834
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
11835
+ },
11836
+ "pageBefore": {
11837
+ "type": "string",
11838
+ "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11839
+ }
11840
+ }
11841
+ }
11842
+ }
11843
+ },
11844
+ {
11845
+ "type": "function",
11846
+ "function": {
11847
+ "name": "create_state",
11848
+ "description": "Upsert State",
11849
+ "parameters": {
11850
+ "title": "CreateStateRequestBody",
11851
+ "type": "object",
11852
+ "required": [
11853
+ "data"
11854
+ ],
11855
+ "properties": {
11856
+ "data": {
11857
+ "title": "CreateStateRequestBodyData",
11858
+ "type": "object",
11859
+ "required": [
11860
+ "type",
11861
+ "attributes"
11862
+ ],
11863
+ "properties": {
11864
+ "type": {
11865
+ "type": "string",
11866
+ "enum": [
11867
+ "states"
11868
+ ]
11869
+ },
11870
+ "attributes": {
11871
+ "title": "StateAttributesSchema",
11872
+ "type": "object",
11873
+ "properties": {
11874
+ "userId": {
11875
+ "type": "string",
11876
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
11877
+ },
11878
+ "resourceType": {
11879
+ "type": "string",
11880
+ "enum": [
11881
+ "emails",
11882
+ "candidates",
11883
+ "conversations",
11884
+ "jobs",
11885
+ "talents",
11886
+ "personas",
11887
+ "reports",
11888
+ "tasks"
11889
+ ],
11890
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
11891
+ },
11892
+ "resourceId": {
11893
+ "type": "string",
11894
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
11895
+ },
11896
+ "isSeen": {
11897
+ "type": "boolean",
11898
+ "description": "True if the user has opened the resource at least once. Derived from the presence of `seenAt`; clients can write either `isSeen` or `seenAt` on upsert."
11899
+ },
11900
+ "isStarred": {
11901
+ "type": "boolean",
11902
+ "description": "True if the user has starred/favourited the resource."
11903
+ },
11904
+ "isSpam": {
11905
+ "type": "boolean",
11906
+ "description": "True if the user marked this resource as spam. Distinct from the email service's `suppressed` status, which is SES-driven on outbound delivery; this is an inbound, per-user action."
11907
+ },
11908
+ "seenAt": {
11909
+ "type": "string",
11910
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
11911
+ },
11912
+ "starredAt": {
11913
+ "type": "string",
11914
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
11915
+ },
11916
+ "spamAt": {
11917
+ "type": "string",
11918
+ "description": "ISO 8601 timestamp of when the user marked the resource as spam. Absent means not spam; used as the sort key for the `Spam` folder."
11919
+ },
11920
+ "resourceCreatedAt": {
11921
+ "type": "string",
11922
+ "description": "Denormalised copy of the underlying resource's own `created` timestamp. Used as the sparse unread-index sort key so the unread feed surfaces oldest resources first, not oldest state rows."
11923
+ },
11924
+ "flags": {
11925
+ "type": "object",
11926
+ "additionalProperties": true,
11927
+ "description": "Open-ended per-resource flags (e.g. `{muted: true}` on conversations, `{pinned: true}` on candidates). First-class state goes on the top-level attributes; ad-hoc state lives here."
11928
+ },
11929
+ "timestamps": {
11930
+ "title": "ResourceTimestampsSchema",
11931
+ "type": "object",
11932
+ "properties": {
11933
+ "created": {
11934
+ "type": "string",
11935
+ "format": "date-time"
11936
+ },
11937
+ "modified": {
11938
+ "type": "string",
11939
+ "format": "date-time"
11940
+ }
11941
+ }
11942
+ }
11943
+ }
11944
+ }
11945
+ }
11946
+ }
11947
+ }
11948
+ }
11949
+ }
11950
+ },
11951
+ {
11952
+ "type": "function",
11953
+ "function": {
11954
+ "name": "states_options",
11955
+ "description": "States Options",
11956
+ "parameters": {
11957
+ "type": "object",
11958
+ "properties": {}
11959
+ }
11960
+ }
11961
+ },
11962
+ {
11963
+ "type": "function",
11964
+ "function": {
11965
+ "name": "show_state",
11966
+ "description": "Show State",
11967
+ "parameters": {
11968
+ "type": "object",
11969
+ "properties": {}
11970
+ }
11971
+ }
11972
+ },
11973
+ {
11974
+ "type": "function",
11975
+ "function": {
11976
+ "name": "update_state",
11977
+ "description": "Update State",
11978
+ "parameters": {
11979
+ "title": "UpdateStateRequestBody",
11980
+ "type": "object",
11981
+ "required": [
11982
+ "data"
11983
+ ],
11984
+ "properties": {
11985
+ "data": {
11986
+ "title": "UpdateStateRequestBodyData",
11987
+ "type": "object",
11988
+ "required": [
11989
+ "type",
11990
+ "id",
11991
+ "attributes"
11992
+ ],
11993
+ "properties": {
11994
+ "type": {
11995
+ "type": "string",
11996
+ "enum": [
11997
+ "states"
11998
+ ]
11999
+ },
12000
+ "id": {
12001
+ "type": "string"
12002
+ },
12003
+ "attributes": {
12004
+ "title": "StateAttributesSchema",
12005
+ "type": "object",
12006
+ "properties": {
12007
+ "userId": {
12008
+ "type": "string",
12009
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
12010
+ },
12011
+ "resourceType": {
12012
+ "type": "string",
12013
+ "enum": [
12014
+ "emails",
12015
+ "candidates",
12016
+ "conversations",
12017
+ "jobs",
12018
+ "talents",
12019
+ "personas",
12020
+ "reports",
12021
+ "tasks"
12022
+ ],
12023
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
12024
+ },
12025
+ "resourceId": {
12026
+ "type": "string",
12027
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
12028
+ },
12029
+ "isSeen": {
12030
+ "type": "boolean",
12031
+ "description": "True if the user has opened the resource at least once. Derived from the presence of `seenAt`; clients can write either `isSeen` or `seenAt` on upsert."
12032
+ },
12033
+ "isStarred": {
12034
+ "type": "boolean",
12035
+ "description": "True if the user has starred/favourited the resource."
12036
+ },
12037
+ "isSpam": {
12038
+ "type": "boolean",
12039
+ "description": "True if the user marked this resource as spam. Distinct from the email service's `suppressed` status, which is SES-driven on outbound delivery; this is an inbound, per-user action."
12040
+ },
12041
+ "seenAt": {
12042
+ "type": "string",
12043
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
12044
+ },
12045
+ "starredAt": {
12046
+ "type": "string",
12047
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
12048
+ },
12049
+ "spamAt": {
12050
+ "type": "string",
12051
+ "description": "ISO 8601 timestamp of when the user marked the resource as spam. Absent means not spam; used as the sort key for the `Spam` folder."
12052
+ },
12053
+ "resourceCreatedAt": {
12054
+ "type": "string",
12055
+ "description": "Denormalised copy of the underlying resource's own `created` timestamp. Used as the sparse unread-index sort key so the unread feed surfaces oldest resources first, not oldest state rows."
12056
+ },
12057
+ "flags": {
12058
+ "type": "object",
12059
+ "additionalProperties": true,
12060
+ "description": "Open-ended per-resource flags (e.g. `{muted: true}` on conversations, `{pinned: true}` on candidates). First-class state goes on the top-level attributes; ad-hoc state lives here."
12061
+ },
12062
+ "timestamps": {
12063
+ "title": "ResourceTimestampsSchema",
12064
+ "type": "object",
12065
+ "properties": {
12066
+ "created": {
12067
+ "type": "string",
12068
+ "format": "date-time"
12069
+ },
12070
+ "modified": {
12071
+ "type": "string",
12072
+ "format": "date-time"
12073
+ }
12074
+ }
12075
+ }
12076
+ }
12077
+ }
12078
+ }
12079
+ }
12080
+ }
12081
+ }
12082
+ }
12083
+ },
12084
+ {
12085
+ "type": "function",
12086
+ "function": {
12087
+ "name": "delete_state",
12088
+ "description": "Delete State",
12089
+ "parameters": {
12090
+ "type": "object",
12091
+ "properties": {}
12092
+ }
12093
+ }
12094
+ },
12095
+ {
12096
+ "type": "function",
12097
+ "function": {
12098
+ "name": "state_options",
12099
+ "description": "State Options",
12100
+ "parameters": {
12101
+ "type": "object",
12102
+ "properties": {}
12103
+ }
12104
+ }
12105
+ },
12106
+ {
12107
+ "type": "function",
12108
+ "function": {
12109
+ "name": "list_labels",
12110
+ "description": "List Labels",
12111
+ "parameters": {
12112
+ "type": "object",
12113
+ "properties": {
12114
+ "filterStatus": {
12115
+ "type": "string",
12116
+ "description": "filterStatus parameter",
12117
+ "enum": [
12118
+ "active",
12119
+ "archived"
12120
+ ]
11239
12121
  },
11240
- "pageBefore": {
11241
- "type": "string",
11242
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12122
+ "pageSize": {
12123
+ "type": "integer",
12124
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
11243
12125
  }
11244
12126
  }
11245
12127
  }
@@ -11248,17 +12130,17 @@
11248
12130
  {
11249
12131
  "type": "function",
11250
12132
  "function": {
11251
- "name": "create_note",
11252
- "description": "Create Note",
12133
+ "name": "create_label",
12134
+ "description": "Create Label",
11253
12135
  "parameters": {
11254
- "title": "CreateNoteRequestBody",
12136
+ "title": "CreateLabelRequestBody",
11255
12137
  "type": "object",
11256
12138
  "required": [
11257
12139
  "data"
11258
12140
  ],
11259
12141
  "properties": {
11260
12142
  "data": {
11261
- "title": "CreateNoteRequestBodyData",
12143
+ "title": "CreateLabelRequestBodyData",
11262
12144
  "type": "object",
11263
12145
  "required": [
11264
12146
  "type",
@@ -11268,37 +12150,50 @@
11268
12150
  "type": {
11269
12151
  "type": "string",
11270
12152
  "enum": [
11271
- "notes"
12153
+ "labels"
11272
12154
  ]
11273
12155
  },
11274
12156
  "attributes": {
11275
- "title": "NoteAttributesSchema",
12157
+ "title": "LabelAttributesSchema",
11276
12158
  "type": "object",
11277
12159
  "properties": {
11278
12160
  "name": {
11279
- "type": "string"
12161
+ "type": "string",
12162
+ "description": "Display name. Unique within a scope by convention but not enforced."
11280
12163
  },
11281
- "status": {
11282
- "type": "string"
12164
+ "color": {
12165
+ "type": "string",
12166
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11283
12167
  },
11284
- "details": {
11285
- "type": "object",
11286
- "additionalProperties": {
11287
- "type": "string"
11288
- },
11289
- "description": "Multilingual note details keyed by language code"
12168
+ "description": {
12169
+ "type": "string"
11290
12170
  },
11291
- "source": {
12171
+ "scope": {
11292
12172
  "type": "string",
11293
- "description": "Source of the note"
12173
+ "enum": [
12174
+ "tenant",
12175
+ "user"
12176
+ ],
12177
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11294
12178
  },
11295
- "ttl": {
12179
+ "ownerId": {
11296
12180
  "type": "string",
11297
- "description": "Time-to-live expiration timestamp"
12181
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11298
12182
  },
11299
- "meta": {
11300
- "type": "object",
11301
- "additionalProperties": true
12183
+ "resourceTypes": {
12184
+ "type": "array",
12185
+ "items": {
12186
+ "type": "string"
12187
+ },
12188
+ "description": "Optional UI hint: if set, the frontend only exposes this label in the picker for these resource types (emails, candidates, ...). Not enforced server-side."
12189
+ },
12190
+ "status": {
12191
+ "type": "string",
12192
+ "enum": [
12193
+ "active",
12194
+ "archived"
12195
+ ],
12196
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11302
12197
  },
11303
12198
  "timestamps": {
11304
12199
  "title": "ResourceTimestampsSchema",
@@ -11315,87 +12210,6 @@
11315
12210
  }
11316
12211
  }
11317
12212
  }
11318
- },
11319
- "relationships": {
11320
- "title": "NoteRelationshipsSchema",
11321
- "type": "object",
11322
- "properties": {
11323
- "candidate": {
11324
- "title": "NoteRelationshipsCandidateSchema",
11325
- "type": "object",
11326
- "properties": {
11327
- "data": {
11328
- "title": "NoteRelationshipsCandidateDataSchema",
11329
- "type": "object",
11330
- "properties": {
11331
- "type": {
11332
- "type": "string"
11333
- },
11334
- "id": {
11335
- "type": "string"
11336
- }
11337
- }
11338
- }
11339
- }
11340
- },
11341
- "translations": {
11342
- "title": "NoteRelationshipsTranslationsSchema",
11343
- "type": "object",
11344
- "properties": {
11345
- "data": {
11346
- "type": "array",
11347
- "items": {
11348
- "title": "NoteRelationshipsTranslationsDataSchema",
11349
- "type": "object",
11350
- "properties": {
11351
- "type": {
11352
- "type": "string"
11353
- },
11354
- "id": {
11355
- "type": "string"
11356
- }
11357
- }
11358
- }
11359
- }
11360
- }
11361
- },
11362
- "report": {
11363
- "title": "NoteRelationshipsReportSchema",
11364
- "type": "object",
11365
- "properties": {
11366
- "data": {
11367
- "title": "NoteRelationshipsReportDataSchema",
11368
- "type": "object",
11369
- "properties": {
11370
- "type": {
11371
- "type": "string"
11372
- },
11373
- "id": {
11374
- "type": "string"
11375
- }
11376
- }
11377
- }
11378
- }
11379
- },
11380
- "operation": {
11381
- "title": "NoteRelationshipsOperationSchema",
11382
- "type": "object",
11383
- "properties": {
11384
- "data": {
11385
- "title": "NoteRelationshipsOperationDataSchema",
11386
- "type": "object",
11387
- "properties": {
11388
- "type": {
11389
- "type": "string"
11390
- },
11391
- "id": {
11392
- "type": "string"
11393
- }
11394
- }
11395
- }
11396
- }
11397
- }
11398
- }
11399
12213
  }
11400
12214
  }
11401
12215
  }
@@ -11406,8 +12220,8 @@
11406
12220
  {
11407
12221
  "type": "function",
11408
12222
  "function": {
11409
- "name": "notes_options",
11410
- "description": "Notes Options",
12223
+ "name": "labels_options",
12224
+ "description": "Labels Options",
11411
12225
  "parameters": {
11412
12226
  "type": "object",
11413
12227
  "properties": {}
@@ -11417,8 +12231,8 @@
11417
12231
  {
11418
12232
  "type": "function",
11419
12233
  "function": {
11420
- "name": "show_note",
11421
- "description": "Show Note",
12234
+ "name": "show_label",
12235
+ "description": "Show Label",
11422
12236
  "parameters": {
11423
12237
  "type": "object",
11424
12238
  "properties": {}
@@ -11428,17 +12242,17 @@
11428
12242
  {
11429
12243
  "type": "function",
11430
12244
  "function": {
11431
- "name": "update_note",
11432
- "description": "Update Note",
12245
+ "name": "update_label",
12246
+ "description": "Update Label",
11433
12247
  "parameters": {
11434
- "title": "UpdateNoteRequestBody",
12248
+ "title": "UpdateLabelRequestBody",
11435
12249
  "type": "object",
11436
12250
  "required": [
11437
12251
  "data"
11438
12252
  ],
11439
12253
  "properties": {
11440
12254
  "data": {
11441
- "title": "UpdateNoteRequestBodyData",
12255
+ "title": "UpdateLabelRequestBodyData",
11442
12256
  "type": "object",
11443
12257
  "required": [
11444
12258
  "type",
@@ -11449,40 +12263,53 @@
11449
12263
  "type": {
11450
12264
  "type": "string",
11451
12265
  "enum": [
11452
- "notes"
12266
+ "labels"
11453
12267
  ]
11454
12268
  },
11455
12269
  "id": {
11456
12270
  "type": "string"
11457
12271
  },
11458
12272
  "attributes": {
11459
- "title": "NoteAttributesSchema",
12273
+ "title": "LabelAttributesSchema",
11460
12274
  "type": "object",
11461
12275
  "properties": {
11462
12276
  "name": {
11463
- "type": "string"
12277
+ "type": "string",
12278
+ "description": "Display name. Unique within a scope by convention but not enforced."
11464
12279
  },
11465
- "status": {
11466
- "type": "string"
12280
+ "color": {
12281
+ "type": "string",
12282
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11467
12283
  },
11468
- "details": {
11469
- "type": "object",
11470
- "additionalProperties": {
11471
- "type": "string"
11472
- },
11473
- "description": "Multilingual note details keyed by language code"
12284
+ "description": {
12285
+ "type": "string"
11474
12286
  },
11475
- "source": {
12287
+ "scope": {
11476
12288
  "type": "string",
11477
- "description": "Source of the note"
12289
+ "enum": [
12290
+ "tenant",
12291
+ "user"
12292
+ ],
12293
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11478
12294
  },
11479
- "ttl": {
12295
+ "ownerId": {
11480
12296
  "type": "string",
11481
- "description": "Time-to-live expiration timestamp"
12297
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11482
12298
  },
11483
- "meta": {
11484
- "type": "object",
11485
- "additionalProperties": true
12299
+ "resourceTypes": {
12300
+ "type": "array",
12301
+ "items": {
12302
+ "type": "string"
12303
+ },
12304
+ "description": "Optional UI hint: if set, the frontend only exposes this label in the picker for these resource types (emails, candidates, ...). Not enforced server-side."
12305
+ },
12306
+ "status": {
12307
+ "type": "string",
12308
+ "enum": [
12309
+ "active",
12310
+ "archived"
12311
+ ],
12312
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11486
12313
  },
11487
12314
  "timestamps": {
11488
12315
  "title": "ResourceTimestampsSchema",
@@ -11509,8 +12336,8 @@
11509
12336
  {
11510
12337
  "type": "function",
11511
12338
  "function": {
11512
- "name": "delete_note",
11513
- "description": "Delete Note",
12339
+ "name": "delete_label",
12340
+ "description": "Delete Label",
11514
12341
  "parameters": {
11515
12342
  "type": "object",
11516
12343
  "properties": {}
@@ -11520,8 +12347,8 @@
11520
12347
  {
11521
12348
  "type": "function",
11522
12349
  "function": {
11523
- "name": "note_options",
11524
- "description": "Note Options",
12350
+ "name": "label_options",
12351
+ "description": "Label Options",
11525
12352
  "parameters": {
11526
12353
  "type": "object",
11527
12354
  "properties": {}
@@ -11572,7 +12399,7 @@
11572
12399
  },
11573
12400
  "pageAfter": {
11574
12401
  "type": "string",
11575
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12402
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
11576
12403
  },
11577
12404
  "pageBefore": {
11578
12405
  "type": "string",
@@ -12119,7 +12946,7 @@
12119
12946
  },
12120
12947
  "pageAfter": {
12121
12948
  "type": "string",
12122
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12949
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
12123
12950
  },
12124
12951
  "pageBefore": {
12125
12952
  "type": "string",
@@ -12453,7 +13280,7 @@
12453
13280
  },
12454
13281
  "pageAfter": {
12455
13282
  "type": "string",
12456
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13283
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
12457
13284
  },
12458
13285
  "pageBefore": {
12459
13286
  "type": "string",
@@ -12797,7 +13624,7 @@
12797
13624
  },
12798
13625
  "pageAfter": {
12799
13626
  "type": "string",
12800
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13627
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
12801
13628
  },
12802
13629
  "pageBefore": {
12803
13630
  "type": "string",
@@ -13087,7 +13914,7 @@
13087
13914
  },
13088
13915
  "pageAfter": {
13089
13916
  "type": "string",
13090
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13917
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13091
13918
  },
13092
13919
  "pageBefore": {
13093
13920
  "type": "string",
@@ -13325,7 +14152,7 @@
13325
14152
  },
13326
14153
  "pageAfter": {
13327
14154
  "type": "string",
13328
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14155
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13329
14156
  },
13330
14157
  "pageBefore": {
13331
14158
  "type": "string",
@@ -13631,7 +14458,7 @@
13631
14458
  },
13632
14459
  "pageAfter": {
13633
14460
  "type": "string",
13634
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14461
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13635
14462
  },
13636
14463
  "pageBefore": {
13637
14464
  "type": "string",
@@ -13737,7 +14564,7 @@
13737
14564
  },
13738
14565
  "pageAfter": {
13739
14566
  "type": "string",
13740
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14567
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13741
14568
  },
13742
14569
  "pageBefore": {
13743
14570
  "type": "string",
@@ -13825,7 +14652,7 @@
13825
14652
  },
13826
14653
  "pageAfter": {
13827
14654
  "type": "string",
13828
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14655
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13829
14656
  },
13830
14657
  "pageBefore": {
13831
14658
  "type": "string",
@@ -13917,7 +14744,7 @@
13917
14744
  },
13918
14745
  "pageAfter": {
13919
14746
  "type": "string",
13920
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14747
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
13921
14748
  },
13922
14749
  "pageBefore": {
13923
14750
  "type": "string",
@@ -14114,7 +14941,7 @@
14114
14941
  },
14115
14942
  "pageAfter": {
14116
14943
  "type": "string",
14117
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14944
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
14118
14945
  },
14119
14946
  "pageBefore": {
14120
14947
  "type": "string",
@@ -14357,7 +15184,7 @@
14357
15184
  },
14358
15185
  "pageAfter": {
14359
15186
  "type": "string",
14360
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15187
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
14361
15188
  },
14362
15189
  "pageBefore": {
14363
15190
  "type": "string",
@@ -14418,12 +15245,62 @@
14418
15245
  "description": "The type of search to perform"
14419
15246
  },
14420
15247
  "query": {
14421
- "type": "object",
14422
- "description": "Search query parameters sent to OpenSearch. Supported keys for talent search: Semantic (full-text match) - \"search\" (multi-match across all text fields), \"name\", \"quickInsights\", \"skillsAndExpertise\", \"professionalExperience\", \"education\", \"experienceAndSeniority\", \"jobPositions\", \"keywords\", \"certifications\", \"industryExperience\", \"languagesSpoken\", \"locationPreferences\", \"personalityAndSoftSkills\", \"availability\", \"workPreferences\", \"workAuthorization\". Filters (exact match) - \"status\", \"source\", \"email\", \"gender\", \"shortCode\", \"isTalentPool\", \"relocationWillingness\", \"requiresSponsorship\", \"careerBreak\". IDs - \"jobId\", \"talentId\"."
15248
+ "description": "Search query parameters sent to OpenSearch. Shape varies by finder `type`. OpenAPI can't express the full type/query correlation as a strict discriminated union (the discriminator lives on the sibling `type` field, not on `query` itself), so this is encoded as `oneOf` over per-type query schemas. Clients should pick the shape matching the `type` they are posting.",
15249
+ "oneOf": [
15250
+ {
15251
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
15252
+ },
15253
+ {
15254
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
15255
+ },
15256
+ {
15257
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
15258
+ },
15259
+ {
15260
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
15261
+ }
15262
+ ]
14423
15263
  },
14424
15264
  "results": {
15265
+ "title": "FinderResultsSchema",
14425
15266
  "type": "object",
14426
- "description": "The search results returned from OpenSearch (auto-populated)"
15267
+ "description": "OpenSearch-shaped results attached to the finder record after the search runs. Hits array items carry whatever subset of the index schema was projected.",
15268
+ "properties": {
15269
+ "total": {
15270
+ "type": "integer",
15271
+ "description": "Count of matching documents before pagination."
15272
+ },
15273
+ "hits": {
15274
+ "type": "array",
15275
+ "items": {
15276
+ "title": "FinderResultHitSchema",
15277
+ "type": "object",
15278
+ "description": "Single hit from the OpenSearch query. The `id` equals the underlying resource id (emailId, talentId, candidateId, jobId, ...) so the frontend can navigate directly to that resource. Additional fields vary by finder `type`.",
15279
+ "properties": {
15280
+ "id": {
15281
+ "type": "string",
15282
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
15283
+ },
15284
+ "tenantId": {
15285
+ "type": "string"
15286
+ },
15287
+ "status": {
15288
+ "type": "string"
15289
+ },
15290
+ "source": {
15291
+ "type": "string"
15292
+ },
15293
+ "created": {
15294
+ "type": "string"
15295
+ },
15296
+ "shortCode": {
15297
+ "type": "string"
15298
+ }
15299
+ },
15300
+ "additionalProperties": true
15301
+ }
15302
+ }
15303
+ }
14427
15304
  },
14428
15305
  "status": {
14429
15306
  "type": "string",
@@ -14645,12 +15522,62 @@
14645
15522
  "description": "The type of search to perform"
14646
15523
  },
14647
15524
  "query": {
14648
- "type": "object",
14649
- "description": "Search query parameters sent to OpenSearch. Supported keys for talent search: Semantic (full-text match) - \"search\" (multi-match across all text fields), \"name\", \"quickInsights\", \"skillsAndExpertise\", \"professionalExperience\", \"education\", \"experienceAndSeniority\", \"jobPositions\", \"keywords\", \"certifications\", \"industryExperience\", \"languagesSpoken\", \"locationPreferences\", \"personalityAndSoftSkills\", \"availability\", \"workPreferences\", \"workAuthorization\". Filters (exact match) - \"status\", \"source\", \"email\", \"gender\", \"shortCode\", \"isTalentPool\", \"relocationWillingness\", \"requiresSponsorship\", \"careerBreak\". IDs - \"jobId\", \"talentId\"."
15525
+ "description": "Search query parameters sent to OpenSearch. Shape varies by finder `type`. OpenAPI can't express the full type/query correlation as a strict discriminated union (the discriminator lives on the sibling `type` field, not on `query` itself), so this is encoded as `oneOf` over per-type query schemas. Clients should pick the shape matching the `type` they are posting.",
15526
+ "oneOf": [
15527
+ {
15528
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
15529
+ },
15530
+ {
15531
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
15532
+ },
15533
+ {
15534
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
15535
+ },
15536
+ {
15537
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
15538
+ }
15539
+ ]
14650
15540
  },
14651
15541
  "results": {
15542
+ "title": "FinderResultsSchema",
14652
15543
  "type": "object",
14653
- "description": "The search results returned from OpenSearch (auto-populated)"
15544
+ "description": "OpenSearch-shaped results attached to the finder record after the search runs. Hits array items carry whatever subset of the index schema was projected.",
15545
+ "properties": {
15546
+ "total": {
15547
+ "type": "integer",
15548
+ "description": "Count of matching documents before pagination."
15549
+ },
15550
+ "hits": {
15551
+ "type": "array",
15552
+ "items": {
15553
+ "title": "FinderResultHitSchema",
15554
+ "type": "object",
15555
+ "description": "Single hit from the OpenSearch query. The `id` equals the underlying resource id (emailId, talentId, candidateId, jobId, ...) so the frontend can navigate directly to that resource. Additional fields vary by finder `type`.",
15556
+ "properties": {
15557
+ "id": {
15558
+ "type": "string",
15559
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
15560
+ },
15561
+ "tenantId": {
15562
+ "type": "string"
15563
+ },
15564
+ "status": {
15565
+ "type": "string"
15566
+ },
15567
+ "source": {
15568
+ "type": "string"
15569
+ },
15570
+ "created": {
15571
+ "type": "string"
15572
+ },
15573
+ "shortCode": {
15574
+ "type": "string"
15575
+ }
15576
+ },
15577
+ "additionalProperties": true
15578
+ }
15579
+ }
15580
+ }
14654
15581
  },
14655
15582
  "status": {
14656
15583
  "type": "string",
@@ -14769,7 +15696,7 @@
14769
15696
  },
14770
15697
  "pageAfter": {
14771
15698
  "type": "string",
14772
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15699
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
14773
15700
  },
14774
15701
  "pageBefore": {
14775
15702
  "type": "string",
@@ -15028,7 +15955,7 @@
15028
15955
  },
15029
15956
  "pageAfter": {
15030
15957
  "type": "string",
15031
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15958
+ "description": "Opaque base64-encoded cursor returned by a previous list response, used for forward cursor-based pagination. Pass the value verbatim; do not decode or mutate it."
15032
15959
  },
15033
15960
  "pageBefore": {
15034
15961
  "type": "string",