@smartytalent/mcp-tools 0.1.33-dev.0 → 0.1.33-dev.10

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 +1198 -238
  2. package/package.json +1 -1
package/dist/tools.json CHANGED
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "pageAfter": {
45
45
  "type": "string",
46
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
46
+ "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."
47
47
  },
48
48
  "pageBefore": {
49
49
  "type": "string",
@@ -799,7 +799,7 @@
799
799
  },
800
800
  "pageAfter": {
801
801
  "type": "string",
802
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
802
+ "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."
803
803
  },
804
804
  "pageBefore": {
805
805
  "type": "string",
@@ -1540,7 +1540,7 @@
1540
1540
  },
1541
1541
  "pageAfter": {
1542
1542
  "type": "string",
1543
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
1543
+ "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."
1544
1544
  },
1545
1545
  "pageBefore": {
1546
1546
  "type": "string",
@@ -1882,7 +1882,7 @@
1882
1882
  },
1883
1883
  "pageAfter": {
1884
1884
  "type": "string",
1885
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
1885
+ "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."
1886
1886
  },
1887
1887
  "pageBefore": {
1888
1888
  "type": "string",
@@ -2150,7 +2150,7 @@
2150
2150
  },
2151
2151
  "pageAfter": {
2152
2152
  "type": "string",
2153
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
2153
+ "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."
2154
2154
  },
2155
2155
  "pageBefore": {
2156
2156
  "type": "string",
@@ -3367,7 +3367,7 @@
3367
3367
  },
3368
3368
  "pageAfter": {
3369
3369
  "type": "string",
3370
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
3370
+ "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."
3371
3371
  },
3372
3372
  "pageBefore": {
3373
3373
  "type": "string",
@@ -4632,7 +4632,7 @@
4632
4632
  },
4633
4633
  "pageAfter": {
4634
4634
  "type": "string",
4635
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
4635
+ "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."
4636
4636
  },
4637
4637
  "pageBefore": {
4638
4638
  "type": "string",
@@ -5873,7 +5873,7 @@
5873
5873
  },
5874
5874
  "pageAfter": {
5875
5875
  "type": "string",
5876
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
5876
+ "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."
5877
5877
  },
5878
5878
  "pageBefore": {
5879
5879
  "type": "string",
@@ -6168,7 +6168,7 @@
6168
6168
  },
6169
6169
  "pageAfter": {
6170
6170
  "type": "string",
6171
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
6171
+ "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."
6172
6172
  },
6173
6173
  "pageBefore": {
6174
6174
  "type": "string",
@@ -6430,7 +6430,7 @@
6430
6430
  },
6431
6431
  "pageAfter": {
6432
6432
  "type": "string",
6433
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
6433
+ "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."
6434
6434
  },
6435
6435
  "pageBefore": {
6436
6436
  "type": "string",
@@ -6714,10 +6714,45 @@
6714
6714
  "properties": {
6715
6715
  "filterStatus": {
6716
6716
  "type": "string",
6717
- "description": "Returns emails with the current status (active, archived). If not provided, the default value will be set to 'active'.",
6717
+ "description": "Filter by the email's lifecycle status. Omit to return all statuses.",
6718
6718
  "enum": [
6719
- "active",
6720
- "archived"
6719
+ "draft",
6720
+ "scheduled",
6721
+ "sent",
6722
+ "suppressed",
6723
+ "archived",
6724
+ "failed",
6725
+ "pending"
6726
+ ]
6727
+ },
6728
+ "filterConversationId": {
6729
+ "type": "string",
6730
+ "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`)."
6731
+ },
6732
+ "filterDirection": {
6733
+ "type": "string",
6734
+ "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.",
6735
+ "enum": [
6736
+ "inbound",
6737
+ "outbound"
6738
+ ]
6739
+ },
6740
+ "filterIds": {
6741
+ "type": "string",
6742
+ "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."
6743
+ },
6744
+ "filterIsSystemSpam": {
6745
+ "type": "boolean",
6746
+ "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."
6747
+ },
6748
+ "sort": {
6749
+ "type": "string",
6750
+ "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.",
6751
+ "enum": [
6752
+ "-created",
6753
+ "created",
6754
+ "-modified",
6755
+ "modified"
6721
6756
  ]
6722
6757
  },
6723
6758
  "filterCreatedFrom": {
@@ -6746,7 +6781,7 @@
6746
6781
  },
6747
6782
  "pageAfter": {
6748
6783
  "type": "string",
6749
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
6784
+ "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."
6750
6785
  },
6751
6786
  "pageBefore": {
6752
6787
  "type": "string",
@@ -6792,7 +6827,25 @@
6792
6827
  "type": "string"
6793
6828
  },
6794
6829
  "status": {
6795
- "type": "string"
6830
+ "type": "string",
6831
+ "enum": [
6832
+ "draft",
6833
+ "scheduled",
6834
+ "sent",
6835
+ "suppressed",
6836
+ "archived",
6837
+ "failed",
6838
+ "pending"
6839
+ ],
6840
+ "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."
6841
+ },
6842
+ "direction": {
6843
+ "type": "string",
6844
+ "enum": [
6845
+ "inbound",
6846
+ "outbound"
6847
+ ],
6848
+ "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."
6796
6849
  },
6797
6850
  "emailFrom": {
6798
6851
  "type": "string"
@@ -6800,27 +6853,33 @@
6800
6853
  "emailTo": {
6801
6854
  "type": "string"
6802
6855
  },
6856
+ "emailCc": {
6857
+ "type": "array",
6858
+ "items": {
6859
+ "type": "string"
6860
+ },
6861
+ "description": "CC recipients. Each entry is an RFC 5322 address string."
6862
+ },
6863
+ "emailBcc": {
6864
+ "type": "array",
6865
+ "items": {
6866
+ "type": "string"
6867
+ },
6868
+ "description": "BCC recipients. Each entry is an RFC 5322 address string."
6869
+ },
6803
6870
  "subject": {
6804
- "oneOf": [
6805
- {
6806
- "type": "string"
6807
- },
6808
- {
6809
- "type": "object",
6810
- "additionalProperties": true
6811
- }
6812
- ]
6871
+ "type": "object",
6872
+ "additionalProperties": {
6873
+ "type": "string"
6874
+ },
6875
+ "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`."
6813
6876
  },
6814
6877
  "body": {
6815
- "oneOf": [
6816
- {
6817
- "type": "string"
6818
- },
6819
- {
6820
- "type": "object",
6821
- "additionalProperties": true
6822
- }
6823
- ]
6878
+ "type": "object",
6879
+ "additionalProperties": {
6880
+ "type": "string"
6881
+ },
6882
+ "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."
6824
6883
  },
6825
6884
  "shortCode": {
6826
6885
  "type": "string"
@@ -6837,11 +6896,78 @@
6837
6896
  "isExternalSender": {
6838
6897
  "type": "boolean"
6839
6898
  },
6899
+ "attachments": {
6900
+ "type": "array",
6901
+ "items": {
6902
+ "type": "object",
6903
+ "properties": {
6904
+ "fileName": {
6905
+ "type": "string",
6906
+ "description": "Display name shown in the mail client and used as the attachment filename on send."
6907
+ },
6908
+ "url": {
6909
+ "type": "string",
6910
+ "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."
6911
+ },
6912
+ "type": {
6913
+ "type": "string",
6914
+ "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`."
6915
+ },
6916
+ "fileId": {
6917
+ "type": "string",
6918
+ "description": "When `type == \"files\"`, the file resource ID so the frontend can resolve the latest file metadata (status, processing state) without parsing the URL."
6919
+ },
6920
+ "size": {
6921
+ "type": "integer",
6922
+ "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."
6923
+ },
6924
+ "contentType": {
6925
+ "type": "string",
6926
+ "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."
6927
+ },
6928
+ "thumbnailUrl": {
6929
+ "type": "string",
6930
+ "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."
6931
+ }
6932
+ }
6933
+ },
6934
+ "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."
6935
+ },
6936
+ "conversationLanguageCode": {
6937
+ "type": "string",
6938
+ "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."
6939
+ },
6940
+ "parentEmailId": {
6941
+ "type": "string",
6942
+ "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."
6943
+ },
6944
+ "fromUserId": {
6945
+ "type": "string",
6946
+ "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."
6947
+ },
6948
+ "fromCandidateId": {
6949
+ "type": "string",
6950
+ "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."
6951
+ },
6952
+ "isSystemSpam": {
6953
+ "type": "boolean",
6954
+ "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)."
6955
+ },
6956
+ "scheduleId": {
6957
+ "type": "string",
6958
+ "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."
6959
+ },
6960
+ "scheduledFireAt": {
6961
+ "type": "string",
6962
+ "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."
6963
+ },
6840
6964
  "ttl": {
6841
6965
  "type": "string"
6842
6966
  },
6843
6967
  "sendScheduleDate": {
6844
- "type": "string"
6968
+ "type": "string",
6969
+ "deprecated": true,
6970
+ "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."
6845
6971
  },
6846
6972
  "meta": {
6847
6973
  "type": "object",
@@ -6962,6 +7088,25 @@
6962
7088
  }
6963
7089
  }
6964
7090
  }
7091
+ },
7092
+ "schedule": {
7093
+ "title": "EmailRelationshipsScheduleSchema",
7094
+ "type": "object",
7095
+ "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.",
7096
+ "properties": {
7097
+ "data": {
7098
+ "title": "EmailRelationshipsScheduleDataSchema",
7099
+ "type": "object",
7100
+ "properties": {
7101
+ "type": {
7102
+ "type": "string"
7103
+ },
7104
+ "id": {
7105
+ "type": "string"
7106
+ }
7107
+ }
7108
+ }
7109
+ }
6965
7110
  }
6966
7111
  }
6967
7112
  },
@@ -7041,7 +7186,25 @@
7041
7186
  "type": "string"
7042
7187
  },
7043
7188
  "status": {
7044
- "type": "string"
7189
+ "type": "string",
7190
+ "enum": [
7191
+ "draft",
7192
+ "scheduled",
7193
+ "sent",
7194
+ "suppressed",
7195
+ "archived",
7196
+ "failed",
7197
+ "pending"
7198
+ ],
7199
+ "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."
7200
+ },
7201
+ "direction": {
7202
+ "type": "string",
7203
+ "enum": [
7204
+ "inbound",
7205
+ "outbound"
7206
+ ],
7207
+ "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."
7045
7208
  },
7046
7209
  "emailFrom": {
7047
7210
  "type": "string"
@@ -7049,27 +7212,33 @@
7049
7212
  "emailTo": {
7050
7213
  "type": "string"
7051
7214
  },
7215
+ "emailCc": {
7216
+ "type": "array",
7217
+ "items": {
7218
+ "type": "string"
7219
+ },
7220
+ "description": "CC recipients. Each entry is an RFC 5322 address string."
7221
+ },
7222
+ "emailBcc": {
7223
+ "type": "array",
7224
+ "items": {
7225
+ "type": "string"
7226
+ },
7227
+ "description": "BCC recipients. Each entry is an RFC 5322 address string."
7228
+ },
7052
7229
  "subject": {
7053
- "oneOf": [
7054
- {
7055
- "type": "string"
7056
- },
7057
- {
7058
- "type": "object",
7059
- "additionalProperties": true
7060
- }
7061
- ]
7230
+ "type": "object",
7231
+ "additionalProperties": {
7232
+ "type": "string"
7233
+ },
7234
+ "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`."
7062
7235
  },
7063
7236
  "body": {
7064
- "oneOf": [
7065
- {
7066
- "type": "string"
7067
- },
7068
- {
7069
- "type": "object",
7070
- "additionalProperties": true
7071
- }
7072
- ]
7237
+ "type": "object",
7238
+ "additionalProperties": {
7239
+ "type": "string"
7240
+ },
7241
+ "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."
7073
7242
  },
7074
7243
  "shortCode": {
7075
7244
  "type": "string"
@@ -7086,11 +7255,78 @@
7086
7255
  "isExternalSender": {
7087
7256
  "type": "boolean"
7088
7257
  },
7258
+ "attachments": {
7259
+ "type": "array",
7260
+ "items": {
7261
+ "type": "object",
7262
+ "properties": {
7263
+ "fileName": {
7264
+ "type": "string",
7265
+ "description": "Display name shown in the mail client and used as the attachment filename on send."
7266
+ },
7267
+ "url": {
7268
+ "type": "string",
7269
+ "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."
7270
+ },
7271
+ "type": {
7272
+ "type": "string",
7273
+ "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`."
7274
+ },
7275
+ "fileId": {
7276
+ "type": "string",
7277
+ "description": "When `type == \"files\"`, the file resource ID so the frontend can resolve the latest file metadata (status, processing state) without parsing the URL."
7278
+ },
7279
+ "size": {
7280
+ "type": "integer",
7281
+ "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."
7282
+ },
7283
+ "contentType": {
7284
+ "type": "string",
7285
+ "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."
7286
+ },
7287
+ "thumbnailUrl": {
7288
+ "type": "string",
7289
+ "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."
7290
+ }
7291
+ }
7292
+ },
7293
+ "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."
7294
+ },
7295
+ "conversationLanguageCode": {
7296
+ "type": "string",
7297
+ "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."
7298
+ },
7299
+ "parentEmailId": {
7300
+ "type": "string",
7301
+ "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."
7302
+ },
7303
+ "fromUserId": {
7304
+ "type": "string",
7305
+ "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."
7306
+ },
7307
+ "fromCandidateId": {
7308
+ "type": "string",
7309
+ "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."
7310
+ },
7311
+ "isSystemSpam": {
7312
+ "type": "boolean",
7313
+ "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)."
7314
+ },
7315
+ "scheduleId": {
7316
+ "type": "string",
7317
+ "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."
7318
+ },
7319
+ "scheduledFireAt": {
7320
+ "type": "string",
7321
+ "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."
7322
+ },
7089
7323
  "ttl": {
7090
7324
  "type": "string"
7091
7325
  },
7092
7326
  "sendScheduleDate": {
7093
- "type": "string"
7327
+ "type": "string",
7328
+ "deprecated": true,
7329
+ "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."
7094
7330
  },
7095
7331
  "meta": {
7096
7332
  "type": "object",
@@ -7188,7 +7424,7 @@
7188
7424
  },
7189
7425
  "pageAfter": {
7190
7426
  "type": "string",
7191
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
7427
+ "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."
7192
7428
  },
7193
7429
  "pageBefore": {
7194
7430
  "type": "string",
@@ -7477,7 +7713,7 @@
7477
7713
  },
7478
7714
  "pageAfter": {
7479
7715
  "type": "string",
7480
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
7716
+ "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."
7481
7717
  },
7482
7718
  "pageBefore": {
7483
7719
  "type": "string",
@@ -8364,7 +8600,7 @@
8364
8600
  },
8365
8601
  "pageAfter": {
8366
8602
  "type": "string",
8367
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
8603
+ "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."
8368
8604
  },
8369
8605
  "pageBefore": {
8370
8606
  "type": "string",
@@ -8568,6 +8804,24 @@
8568
8804
  }
8569
8805
  }
8570
8806
  }
8807
+ },
8808
+ "email": {
8809
+ "title": "ScheduleRelationshipsEmailSchema",
8810
+ "type": "object",
8811
+ "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.",
8812
+ "properties": {
8813
+ "data": {
8814
+ "type": "object",
8815
+ "properties": {
8816
+ "type": {
8817
+ "type": "string"
8818
+ },
8819
+ "id": {
8820
+ "type": "string"
8821
+ }
8822
+ }
8823
+ }
8824
+ }
8571
8825
  }
8572
8826
  }
8573
8827
  }
@@ -8815,20 +9069,38 @@
8815
9069
  }
8816
9070
  }
8817
9071
  }
8818
- }
8819
- }
8820
- }
8821
- }
8822
- }
8823
- }
8824
- }
8825
- },
8826
- "required": [
8827
- "scheduleId",
8828
- "requestBody"
8829
- ]
8830
- },
8831
- "_meta": {
9072
+ },
9073
+ "email": {
9074
+ "title": "ScheduleRelationshipsEmailSchema",
9075
+ "type": "object",
9076
+ "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.",
9077
+ "properties": {
9078
+ "data": {
9079
+ "type": "object",
9080
+ "properties": {
9081
+ "type": {
9082
+ "type": "string"
9083
+ },
9084
+ "id": {
9085
+ "type": "string"
9086
+ }
9087
+ }
9088
+ }
9089
+ }
9090
+ }
9091
+ }
9092
+ }
9093
+ }
9094
+ }
9095
+ }
9096
+ }
9097
+ },
9098
+ "required": [
9099
+ "scheduleId",
9100
+ "requestBody"
9101
+ ]
9102
+ },
9103
+ "_meta": {
8832
9104
  "method": "PATCH",
8833
9105
  "path": "/v1/schedules/{scheduleId}",
8834
9106
  "operationId": "updateSchedule"
@@ -9167,7 +9439,7 @@
9167
9439
  },
9168
9440
  "pageAfter": {
9169
9441
  "type": "string",
9170
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
9442
+ "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."
9171
9443
  },
9172
9444
  "pageBefore": {
9173
9445
  "type": "string",
@@ -9900,7 +10172,7 @@
9900
10172
  },
9901
10173
  "pageAfter": {
9902
10174
  "type": "string",
9903
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10175
+ "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."
9904
10176
  },
9905
10177
  "pageBefore": {
9906
10178
  "type": "string",
@@ -10223,7 +10495,7 @@
10223
10495
  },
10224
10496
  "pageAfter": {
10225
10497
  "type": "string",
10226
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10498
+ "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."
10227
10499
  },
10228
10500
  "pageBefore": {
10229
10501
  "type": "string",
@@ -10488,7 +10760,7 @@
10488
10760
  },
10489
10761
  "pageAfter": {
10490
10762
  "type": "string",
10491
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10763
+ "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."
10492
10764
  },
10493
10765
  "pageBefore": {
10494
10766
  "type": "string",
@@ -10933,7 +11205,7 @@
10933
11205
  },
10934
11206
  "pageAfter": {
10935
11207
  "type": "string",
10936
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11208
+ "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."
10937
11209
  },
10938
11210
  "pageBefore": {
10939
11211
  "type": "string",
@@ -11266,7 +11538,7 @@
11266
11538
  },
11267
11539
  "pageAfter": {
11268
11540
  "type": "string",
11269
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11541
+ "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."
11270
11542
  },
11271
11543
  "pageBefore": {
11272
11544
  "type": "string",
@@ -11594,7 +11866,7 @@
11594
11866
  },
11595
11867
  "pageAfter": {
11596
11868
  "type": "string",
11597
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11869
+ "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."
11598
11870
  },
11599
11871
  "pageBefore": {
11600
11872
  "type": "string",
@@ -11633,33 +11905,689 @@
11633
11905
  ]
11634
11906
  },
11635
11907
  "attributes": {
11636
- "title": "NoteAttributesSchema",
11908
+ "title": "NoteAttributesSchema",
11909
+ "type": "object",
11910
+ "properties": {
11911
+ "name": {
11912
+ "type": "string"
11913
+ },
11914
+ "status": {
11915
+ "type": "string"
11916
+ },
11917
+ "details": {
11918
+ "type": "object",
11919
+ "additionalProperties": {
11920
+ "type": "string"
11921
+ },
11922
+ "description": "Multilingual note details keyed by language code"
11923
+ },
11924
+ "source": {
11925
+ "type": "string",
11926
+ "description": "Source of the note"
11927
+ },
11928
+ "ttl": {
11929
+ "type": "string",
11930
+ "description": "Time-to-live expiration timestamp"
11931
+ },
11932
+ "meta": {
11933
+ "type": "object",
11934
+ "additionalProperties": true
11935
+ },
11936
+ "timestamps": {
11937
+ "title": "ResourceTimestampsSchema",
11938
+ "type": "object",
11939
+ "properties": {
11940
+ "created": {
11941
+ "type": "string",
11942
+ "format": "date-time"
11943
+ },
11944
+ "modified": {
11945
+ "type": "string",
11946
+ "format": "date-time"
11947
+ }
11948
+ }
11949
+ }
11950
+ }
11951
+ },
11952
+ "relationships": {
11953
+ "title": "NoteRelationshipsSchema",
11954
+ "type": "object",
11955
+ "properties": {
11956
+ "candidate": {
11957
+ "title": "NoteRelationshipsCandidateSchema",
11958
+ "type": "object",
11959
+ "properties": {
11960
+ "data": {
11961
+ "title": "NoteRelationshipsCandidateDataSchema",
11962
+ "type": "object",
11963
+ "properties": {
11964
+ "type": {
11965
+ "type": "string"
11966
+ },
11967
+ "id": {
11968
+ "type": "string"
11969
+ }
11970
+ }
11971
+ }
11972
+ }
11973
+ },
11974
+ "translations": {
11975
+ "title": "NoteRelationshipsTranslationsSchema",
11976
+ "type": "object",
11977
+ "properties": {
11978
+ "data": {
11979
+ "type": "array",
11980
+ "items": {
11981
+ "title": "NoteRelationshipsTranslationsDataSchema",
11982
+ "type": "object",
11983
+ "properties": {
11984
+ "type": {
11985
+ "type": "string"
11986
+ },
11987
+ "id": {
11988
+ "type": "string"
11989
+ }
11990
+ }
11991
+ }
11992
+ }
11993
+ }
11994
+ },
11995
+ "report": {
11996
+ "title": "NoteRelationshipsReportSchema",
11997
+ "type": "object",
11998
+ "properties": {
11999
+ "data": {
12000
+ "title": "NoteRelationshipsReportDataSchema",
12001
+ "type": "object",
12002
+ "properties": {
12003
+ "type": {
12004
+ "type": "string"
12005
+ },
12006
+ "id": {
12007
+ "type": "string"
12008
+ }
12009
+ }
12010
+ }
12011
+ }
12012
+ },
12013
+ "operation": {
12014
+ "title": "NoteRelationshipsOperationSchema",
12015
+ "type": "object",
12016
+ "properties": {
12017
+ "data": {
12018
+ "title": "NoteRelationshipsOperationDataSchema",
12019
+ "type": "object",
12020
+ "properties": {
12021
+ "type": {
12022
+ "type": "string"
12023
+ },
12024
+ "id": {
12025
+ "type": "string"
12026
+ }
12027
+ }
12028
+ }
12029
+ }
12030
+ }
12031
+ }
12032
+ }
12033
+ }
12034
+ }
12035
+ }
12036
+ },
12037
+ "_meta": {
12038
+ "method": "POST",
12039
+ "path": "/v1/notes",
12040
+ "operationId": "createNote"
12041
+ }
12042
+ },
12043
+ {
12044
+ "name": "notes_options",
12045
+ "description": "Notes Options",
12046
+ "inputSchema": {
12047
+ "type": "object",
12048
+ "properties": {}
12049
+ },
12050
+ "_meta": {
12051
+ "method": "OPTIONS",
12052
+ "path": "/v1/notes",
12053
+ "operationId": "notesOptions"
12054
+ }
12055
+ },
12056
+ {
12057
+ "name": "show_note",
12058
+ "description": "Show Note",
12059
+ "inputSchema": {
12060
+ "type": "object",
12061
+ "properties": {}
12062
+ },
12063
+ "_meta": {
12064
+ "method": "GET",
12065
+ "path": "/v1/notes/{noteId}",
12066
+ "operationId": "showNote"
12067
+ }
12068
+ },
12069
+ {
12070
+ "name": "update_note",
12071
+ "description": "Update Note",
12072
+ "inputSchema": {
12073
+ "title": "UpdateNoteRequestBody",
12074
+ "type": "object",
12075
+ "required": [
12076
+ "data"
12077
+ ],
12078
+ "properties": {
12079
+ "data": {
12080
+ "title": "UpdateNoteRequestBodyData",
12081
+ "type": "object",
12082
+ "required": [
12083
+ "type",
12084
+ "id",
12085
+ "attributes"
12086
+ ],
12087
+ "properties": {
12088
+ "type": {
12089
+ "type": "string",
12090
+ "enum": [
12091
+ "notes"
12092
+ ]
12093
+ },
12094
+ "id": {
12095
+ "type": "string"
12096
+ },
12097
+ "attributes": {
12098
+ "title": "NoteAttributesSchema",
12099
+ "type": "object",
12100
+ "properties": {
12101
+ "name": {
12102
+ "type": "string"
12103
+ },
12104
+ "status": {
12105
+ "type": "string"
12106
+ },
12107
+ "details": {
12108
+ "type": "object",
12109
+ "additionalProperties": {
12110
+ "type": "string"
12111
+ },
12112
+ "description": "Multilingual note details keyed by language code"
12113
+ },
12114
+ "source": {
12115
+ "type": "string",
12116
+ "description": "Source of the note"
12117
+ },
12118
+ "ttl": {
12119
+ "type": "string",
12120
+ "description": "Time-to-live expiration timestamp"
12121
+ },
12122
+ "meta": {
12123
+ "type": "object",
12124
+ "additionalProperties": true
12125
+ },
12126
+ "timestamps": {
12127
+ "title": "ResourceTimestampsSchema",
12128
+ "type": "object",
12129
+ "properties": {
12130
+ "created": {
12131
+ "type": "string",
12132
+ "format": "date-time"
12133
+ },
12134
+ "modified": {
12135
+ "type": "string",
12136
+ "format": "date-time"
12137
+ }
12138
+ }
12139
+ }
12140
+ }
12141
+ }
12142
+ }
12143
+ }
12144
+ }
12145
+ },
12146
+ "_meta": {
12147
+ "method": "PATCH",
12148
+ "path": "/v1/notes/{noteId}",
12149
+ "operationId": "updateNote"
12150
+ }
12151
+ },
12152
+ {
12153
+ "name": "delete_note",
12154
+ "description": "Delete Note",
12155
+ "inputSchema": {
12156
+ "type": "object",
12157
+ "properties": {}
12158
+ },
12159
+ "_meta": {
12160
+ "method": "DELETE",
12161
+ "path": "/v1/notes/{noteId}",
12162
+ "operationId": "deleteNote"
12163
+ }
12164
+ },
12165
+ {
12166
+ "name": "note_options",
12167
+ "description": "Note Options",
12168
+ "inputSchema": {
12169
+ "type": "object",
12170
+ "properties": {}
12171
+ },
12172
+ "_meta": {
12173
+ "method": "OPTIONS",
12174
+ "path": "/v1/notes/{noteId}",
12175
+ "operationId": "noteOptions"
12176
+ }
12177
+ },
12178
+ {
12179
+ "name": "list_states",
12180
+ "description": "List States",
12181
+ "inputSchema": {
12182
+ "type": "object",
12183
+ "properties": {
12184
+ "filterResourceType": {
12185
+ "type": "string",
12186
+ "description": "Only return states for this resource type.",
12187
+ "enum": [
12188
+ "emails",
12189
+ "candidates",
12190
+ "conversations",
12191
+ "jobs",
12192
+ "talents",
12193
+ "personas",
12194
+ "reports",
12195
+ "tasks"
12196
+ ]
12197
+ },
12198
+ "filterResourceIds": {
12199
+ "type": "string",
12200
+ "description": "Comma-separated list of resource ids to batch-fetch. Requires `filterResourceType`."
12201
+ },
12202
+ "folder": {
12203
+ "type": "string",
12204
+ "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."
12205
+ },
12206
+ "pageSize": {
12207
+ "type": "integer",
12208
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
12209
+ },
12210
+ "pageAfter": {
12211
+ "type": "string",
12212
+ "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."
12213
+ },
12214
+ "pageBefore": {
12215
+ "type": "string",
12216
+ "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12217
+ }
12218
+ }
12219
+ },
12220
+ "_meta": {
12221
+ "method": "GET",
12222
+ "path": "/v1/states",
12223
+ "operationId": "listStates"
12224
+ }
12225
+ },
12226
+ {
12227
+ "name": "create_state",
12228
+ "description": "Upsert State",
12229
+ "inputSchema": {
12230
+ "title": "CreateStateRequestBody",
12231
+ "type": "object",
12232
+ "required": [
12233
+ "data"
12234
+ ],
12235
+ "properties": {
12236
+ "data": {
12237
+ "title": "CreateStateRequestBodyData",
12238
+ "type": "object",
12239
+ "required": [
12240
+ "type",
12241
+ "attributes"
12242
+ ],
12243
+ "properties": {
12244
+ "type": {
12245
+ "type": "string",
12246
+ "enum": [
12247
+ "states"
12248
+ ]
12249
+ },
12250
+ "attributes": {
12251
+ "title": "StateAttributesSchema",
12252
+ "type": "object",
12253
+ "properties": {
12254
+ "userId": {
12255
+ "type": "string",
12256
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
12257
+ },
12258
+ "resourceType": {
12259
+ "type": "string",
12260
+ "enum": [
12261
+ "emails",
12262
+ "candidates",
12263
+ "conversations",
12264
+ "jobs",
12265
+ "talents",
12266
+ "personas",
12267
+ "reports",
12268
+ "tasks"
12269
+ ],
12270
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
12271
+ },
12272
+ "resourceId": {
12273
+ "type": "string",
12274
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
12275
+ },
12276
+ "isSeen": {
12277
+ "type": "boolean",
12278
+ "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."
12279
+ },
12280
+ "isStarred": {
12281
+ "type": "boolean",
12282
+ "description": "True if the user has starred/favourited the resource."
12283
+ },
12284
+ "isSpam": {
12285
+ "type": "boolean",
12286
+ "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."
12287
+ },
12288
+ "seenAt": {
12289
+ "type": "string",
12290
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
12291
+ },
12292
+ "starredAt": {
12293
+ "type": "string",
12294
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
12295
+ },
12296
+ "spamAt": {
12297
+ "type": "string",
12298
+ "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."
12299
+ },
12300
+ "resourceCreatedAt": {
12301
+ "type": "string",
12302
+ "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."
12303
+ },
12304
+ "flags": {
12305
+ "type": "object",
12306
+ "additionalProperties": true,
12307
+ "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."
12308
+ },
12309
+ "timestamps": {
12310
+ "title": "ResourceTimestampsSchema",
12311
+ "type": "object",
12312
+ "properties": {
12313
+ "created": {
12314
+ "type": "string",
12315
+ "format": "date-time"
12316
+ },
12317
+ "modified": {
12318
+ "type": "string",
12319
+ "format": "date-time"
12320
+ }
12321
+ }
12322
+ }
12323
+ }
12324
+ }
12325
+ }
12326
+ }
12327
+ }
12328
+ },
12329
+ "_meta": {
12330
+ "method": "POST",
12331
+ "path": "/v1/states",
12332
+ "operationId": "createState"
12333
+ }
12334
+ },
12335
+ {
12336
+ "name": "states_options",
12337
+ "description": "States Options",
12338
+ "inputSchema": {
12339
+ "type": "object",
12340
+ "properties": {}
12341
+ },
12342
+ "_meta": {
12343
+ "method": "OPTIONS",
12344
+ "path": "/v1/states",
12345
+ "operationId": "statesOptions"
12346
+ }
12347
+ },
12348
+ {
12349
+ "name": "show_state",
12350
+ "description": "Show State",
12351
+ "inputSchema": {
12352
+ "type": "object",
12353
+ "properties": {}
12354
+ },
12355
+ "_meta": {
12356
+ "method": "GET",
12357
+ "path": "/v1/states/{stateId}",
12358
+ "operationId": "showState"
12359
+ }
12360
+ },
12361
+ {
12362
+ "name": "update_state",
12363
+ "description": "Update State",
12364
+ "inputSchema": {
12365
+ "title": "UpdateStateRequestBody",
12366
+ "type": "object",
12367
+ "required": [
12368
+ "data"
12369
+ ],
12370
+ "properties": {
12371
+ "data": {
12372
+ "title": "UpdateStateRequestBodyData",
12373
+ "type": "object",
12374
+ "required": [
12375
+ "type",
12376
+ "id",
12377
+ "attributes"
12378
+ ],
12379
+ "properties": {
12380
+ "type": {
12381
+ "type": "string",
12382
+ "enum": [
12383
+ "states"
12384
+ ]
12385
+ },
12386
+ "id": {
12387
+ "type": "string"
12388
+ },
12389
+ "attributes": {
12390
+ "title": "StateAttributesSchema",
12391
+ "type": "object",
12392
+ "properties": {
12393
+ "userId": {
12394
+ "type": "string",
12395
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
12396
+ },
12397
+ "resourceType": {
12398
+ "type": "string",
12399
+ "enum": [
12400
+ "emails",
12401
+ "candidates",
12402
+ "conversations",
12403
+ "jobs",
12404
+ "talents",
12405
+ "personas",
12406
+ "reports",
12407
+ "tasks"
12408
+ ],
12409
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
12410
+ },
12411
+ "resourceId": {
12412
+ "type": "string",
12413
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
12414
+ },
12415
+ "isSeen": {
12416
+ "type": "boolean",
12417
+ "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."
12418
+ },
12419
+ "isStarred": {
12420
+ "type": "boolean",
12421
+ "description": "True if the user has starred/favourited the resource."
12422
+ },
12423
+ "isSpam": {
12424
+ "type": "boolean",
12425
+ "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."
12426
+ },
12427
+ "seenAt": {
12428
+ "type": "string",
12429
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
12430
+ },
12431
+ "starredAt": {
12432
+ "type": "string",
12433
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
12434
+ },
12435
+ "spamAt": {
12436
+ "type": "string",
12437
+ "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."
12438
+ },
12439
+ "resourceCreatedAt": {
12440
+ "type": "string",
12441
+ "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."
12442
+ },
12443
+ "flags": {
12444
+ "type": "object",
12445
+ "additionalProperties": true,
12446
+ "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."
12447
+ },
12448
+ "timestamps": {
12449
+ "title": "ResourceTimestampsSchema",
12450
+ "type": "object",
12451
+ "properties": {
12452
+ "created": {
12453
+ "type": "string",
12454
+ "format": "date-time"
12455
+ },
12456
+ "modified": {
12457
+ "type": "string",
12458
+ "format": "date-time"
12459
+ }
12460
+ }
12461
+ }
12462
+ }
12463
+ }
12464
+ }
12465
+ }
12466
+ }
12467
+ },
12468
+ "_meta": {
12469
+ "method": "PATCH",
12470
+ "path": "/v1/states/{stateId}",
12471
+ "operationId": "updateState"
12472
+ }
12473
+ },
12474
+ {
12475
+ "name": "delete_state",
12476
+ "description": "Delete State",
12477
+ "inputSchema": {
12478
+ "type": "object",
12479
+ "properties": {}
12480
+ },
12481
+ "_meta": {
12482
+ "method": "DELETE",
12483
+ "path": "/v1/states/{stateId}",
12484
+ "operationId": "deleteState"
12485
+ }
12486
+ },
12487
+ {
12488
+ "name": "state_options",
12489
+ "description": "State Options",
12490
+ "inputSchema": {
12491
+ "type": "object",
12492
+ "properties": {}
12493
+ },
12494
+ "_meta": {
12495
+ "method": "OPTIONS",
12496
+ "path": "/v1/states/{stateId}",
12497
+ "operationId": "stateOptions"
12498
+ }
12499
+ },
12500
+ {
12501
+ "name": "list_labels",
12502
+ "description": "List Labels",
12503
+ "inputSchema": {
12504
+ "type": "object",
12505
+ "properties": {
12506
+ "filterStatus": {
12507
+ "type": "string",
12508
+ "description": "filterStatus parameter",
12509
+ "enum": [
12510
+ "active",
12511
+ "archived"
12512
+ ]
12513
+ },
12514
+ "pageSize": {
12515
+ "type": "integer",
12516
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
12517
+ }
12518
+ }
12519
+ },
12520
+ "_meta": {
12521
+ "method": "GET",
12522
+ "path": "/v1/labels",
12523
+ "operationId": "listLabels"
12524
+ }
12525
+ },
12526
+ {
12527
+ "name": "create_label",
12528
+ "description": "Create Label",
12529
+ "inputSchema": {
12530
+ "title": "CreateLabelRequestBody",
12531
+ "type": "object",
12532
+ "required": [
12533
+ "data"
12534
+ ],
12535
+ "properties": {
12536
+ "data": {
12537
+ "title": "CreateLabelRequestBodyData",
12538
+ "type": "object",
12539
+ "required": [
12540
+ "type",
12541
+ "attributes"
12542
+ ],
12543
+ "properties": {
12544
+ "type": {
12545
+ "type": "string",
12546
+ "enum": [
12547
+ "labels"
12548
+ ]
12549
+ },
12550
+ "attributes": {
12551
+ "title": "LabelAttributesSchema",
11637
12552
  "type": "object",
11638
12553
  "properties": {
11639
12554
  "name": {
11640
- "type": "string"
12555
+ "type": "string",
12556
+ "description": "Display name. Unique within a scope by convention but not enforced."
11641
12557
  },
11642
- "status": {
11643
- "type": "string"
12558
+ "color": {
12559
+ "type": "string",
12560
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11644
12561
  },
11645
- "details": {
11646
- "type": "object",
11647
- "additionalProperties": {
11648
- "type": "string"
11649
- },
11650
- "description": "Multilingual note details keyed by language code"
12562
+ "description": {
12563
+ "type": "string"
11651
12564
  },
11652
- "source": {
12565
+ "scope": {
11653
12566
  "type": "string",
11654
- "description": "Source of the note"
12567
+ "enum": [
12568
+ "tenant",
12569
+ "user"
12570
+ ],
12571
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11655
12572
  },
11656
- "ttl": {
12573
+ "ownerId": {
11657
12574
  "type": "string",
11658
- "description": "Time-to-live expiration timestamp"
12575
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11659
12576
  },
11660
- "meta": {
11661
- "type": "object",
11662
- "additionalProperties": true
12577
+ "resourceTypes": {
12578
+ "type": "array",
12579
+ "items": {
12580
+ "type": "string"
12581
+ },
12582
+ "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."
12583
+ },
12584
+ "status": {
12585
+ "type": "string",
12586
+ "enum": [
12587
+ "active",
12588
+ "archived"
12589
+ ],
12590
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11663
12591
  },
11664
12592
  "timestamps": {
11665
12593
  "title": "ResourceTimestampsSchema",
@@ -11676,87 +12604,6 @@
11676
12604
  }
11677
12605
  }
11678
12606
  }
11679
- },
11680
- "relationships": {
11681
- "title": "NoteRelationshipsSchema",
11682
- "type": "object",
11683
- "properties": {
11684
- "candidate": {
11685
- "title": "NoteRelationshipsCandidateSchema",
11686
- "type": "object",
11687
- "properties": {
11688
- "data": {
11689
- "title": "NoteRelationshipsCandidateDataSchema",
11690
- "type": "object",
11691
- "properties": {
11692
- "type": {
11693
- "type": "string"
11694
- },
11695
- "id": {
11696
- "type": "string"
11697
- }
11698
- }
11699
- }
11700
- }
11701
- },
11702
- "translations": {
11703
- "title": "NoteRelationshipsTranslationsSchema",
11704
- "type": "object",
11705
- "properties": {
11706
- "data": {
11707
- "type": "array",
11708
- "items": {
11709
- "title": "NoteRelationshipsTranslationsDataSchema",
11710
- "type": "object",
11711
- "properties": {
11712
- "type": {
11713
- "type": "string"
11714
- },
11715
- "id": {
11716
- "type": "string"
11717
- }
11718
- }
11719
- }
11720
- }
11721
- }
11722
- },
11723
- "report": {
11724
- "title": "NoteRelationshipsReportSchema",
11725
- "type": "object",
11726
- "properties": {
11727
- "data": {
11728
- "title": "NoteRelationshipsReportDataSchema",
11729
- "type": "object",
11730
- "properties": {
11731
- "type": {
11732
- "type": "string"
11733
- },
11734
- "id": {
11735
- "type": "string"
11736
- }
11737
- }
11738
- }
11739
- }
11740
- },
11741
- "operation": {
11742
- "title": "NoteRelationshipsOperationSchema",
11743
- "type": "object",
11744
- "properties": {
11745
- "data": {
11746
- "title": "NoteRelationshipsOperationDataSchema",
11747
- "type": "object",
11748
- "properties": {
11749
- "type": {
11750
- "type": "string"
11751
- },
11752
- "id": {
11753
- "type": "string"
11754
- }
11755
- }
11756
- }
11757
- }
11758
- }
11759
- }
11760
12607
  }
11761
12608
  }
11762
12609
  }
@@ -11764,48 +12611,48 @@
11764
12611
  },
11765
12612
  "_meta": {
11766
12613
  "method": "POST",
11767
- "path": "/v1/notes",
11768
- "operationId": "createNote"
12614
+ "path": "/v1/labels",
12615
+ "operationId": "createLabel"
11769
12616
  }
11770
12617
  },
11771
12618
  {
11772
- "name": "notes_options",
11773
- "description": "Notes Options",
12619
+ "name": "labels_options",
12620
+ "description": "Labels Options",
11774
12621
  "inputSchema": {
11775
12622
  "type": "object",
11776
12623
  "properties": {}
11777
12624
  },
11778
12625
  "_meta": {
11779
12626
  "method": "OPTIONS",
11780
- "path": "/v1/notes",
11781
- "operationId": "notesOptions"
12627
+ "path": "/v1/labels",
12628
+ "operationId": "labelsOptions"
11782
12629
  }
11783
12630
  },
11784
12631
  {
11785
- "name": "show_note",
11786
- "description": "Show Note",
12632
+ "name": "show_label",
12633
+ "description": "Show Label",
11787
12634
  "inputSchema": {
11788
12635
  "type": "object",
11789
12636
  "properties": {}
11790
12637
  },
11791
12638
  "_meta": {
11792
12639
  "method": "GET",
11793
- "path": "/v1/notes/{noteId}",
11794
- "operationId": "showNote"
12640
+ "path": "/v1/labels/{labelId}",
12641
+ "operationId": "showLabel"
11795
12642
  }
11796
12643
  },
11797
12644
  {
11798
- "name": "update_note",
11799
- "description": "Update Note",
12645
+ "name": "update_label",
12646
+ "description": "Update Label",
11800
12647
  "inputSchema": {
11801
- "title": "UpdateNoteRequestBody",
12648
+ "title": "UpdateLabelRequestBody",
11802
12649
  "type": "object",
11803
12650
  "required": [
11804
12651
  "data"
11805
12652
  ],
11806
12653
  "properties": {
11807
12654
  "data": {
11808
- "title": "UpdateNoteRequestBodyData",
12655
+ "title": "UpdateLabelRequestBodyData",
11809
12656
  "type": "object",
11810
12657
  "required": [
11811
12658
  "type",
@@ -11816,40 +12663,53 @@
11816
12663
  "type": {
11817
12664
  "type": "string",
11818
12665
  "enum": [
11819
- "notes"
12666
+ "labels"
11820
12667
  ]
11821
12668
  },
11822
12669
  "id": {
11823
12670
  "type": "string"
11824
12671
  },
11825
12672
  "attributes": {
11826
- "title": "NoteAttributesSchema",
12673
+ "title": "LabelAttributesSchema",
11827
12674
  "type": "object",
11828
12675
  "properties": {
11829
12676
  "name": {
11830
- "type": "string"
12677
+ "type": "string",
12678
+ "description": "Display name. Unique within a scope by convention but not enforced."
11831
12679
  },
11832
- "status": {
11833
- "type": "string"
12680
+ "color": {
12681
+ "type": "string",
12682
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11834
12683
  },
11835
- "details": {
11836
- "type": "object",
11837
- "additionalProperties": {
11838
- "type": "string"
11839
- },
11840
- "description": "Multilingual note details keyed by language code"
12684
+ "description": {
12685
+ "type": "string"
11841
12686
  },
11842
- "source": {
12687
+ "scope": {
11843
12688
  "type": "string",
11844
- "description": "Source of the note"
12689
+ "enum": [
12690
+ "tenant",
12691
+ "user"
12692
+ ],
12693
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11845
12694
  },
11846
- "ttl": {
12695
+ "ownerId": {
11847
12696
  "type": "string",
11848
- "description": "Time-to-live expiration timestamp"
12697
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11849
12698
  },
11850
- "meta": {
11851
- "type": "object",
11852
- "additionalProperties": true
12699
+ "resourceTypes": {
12700
+ "type": "array",
12701
+ "items": {
12702
+ "type": "string"
12703
+ },
12704
+ "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."
12705
+ },
12706
+ "status": {
12707
+ "type": "string",
12708
+ "enum": [
12709
+ "active",
12710
+ "archived"
12711
+ ],
12712
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11853
12713
  },
11854
12714
  "timestamps": {
11855
12715
  "title": "ResourceTimestampsSchema",
@@ -11873,34 +12733,34 @@
11873
12733
  },
11874
12734
  "_meta": {
11875
12735
  "method": "PATCH",
11876
- "path": "/v1/notes/{noteId}",
11877
- "operationId": "updateNote"
12736
+ "path": "/v1/labels/{labelId}",
12737
+ "operationId": "updateLabel"
11878
12738
  }
11879
12739
  },
11880
12740
  {
11881
- "name": "delete_note",
11882
- "description": "Delete Note",
12741
+ "name": "delete_label",
12742
+ "description": "Delete Label",
11883
12743
  "inputSchema": {
11884
12744
  "type": "object",
11885
12745
  "properties": {}
11886
12746
  },
11887
12747
  "_meta": {
11888
12748
  "method": "DELETE",
11889
- "path": "/v1/notes/{noteId}",
11890
- "operationId": "deleteNote"
12749
+ "path": "/v1/labels/{labelId}",
12750
+ "operationId": "deleteLabel"
11891
12751
  }
11892
12752
  },
11893
12753
  {
11894
- "name": "note_options",
11895
- "description": "Note Options",
12754
+ "name": "label_options",
12755
+ "description": "Label Options",
11896
12756
  "inputSchema": {
11897
12757
  "type": "object",
11898
12758
  "properties": {}
11899
12759
  },
11900
12760
  "_meta": {
11901
12761
  "method": "OPTIONS",
11902
- "path": "/v1/notes/{noteId}",
11903
- "operationId": "noteOptions"
12762
+ "path": "/v1/labels/{labelId}",
12763
+ "operationId": "labelOptions"
11904
12764
  }
11905
12765
  },
11906
12766
  {
@@ -11945,7 +12805,7 @@
11945
12805
  },
11946
12806
  "pageAfter": {
11947
12807
  "type": "string",
11948
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12808
+ "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."
11949
12809
  },
11950
12810
  "pageBefore": {
11951
12811
  "type": "string",
@@ -12522,7 +13382,7 @@
12522
13382
  },
12523
13383
  "pageAfter": {
12524
13384
  "type": "string",
12525
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13385
+ "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."
12526
13386
  },
12527
13387
  "pageBefore": {
12528
13388
  "type": "string",
@@ -12870,7 +13730,7 @@
12870
13730
  },
12871
13731
  "pageAfter": {
12872
13732
  "type": "string",
12873
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13733
+ "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."
12874
13734
  },
12875
13735
  "pageBefore": {
12876
13736
  "type": "string",
@@ -13228,7 +14088,7 @@
13228
14088
  },
13229
14089
  "pageAfter": {
13230
14090
  "type": "string",
13231
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14091
+ "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."
13232
14092
  },
13233
14093
  "pageBefore": {
13234
14094
  "type": "string",
@@ -13532,7 +14392,7 @@
13532
14392
  },
13533
14393
  "pageAfter": {
13534
14394
  "type": "string",
13535
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14395
+ "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."
13536
14396
  },
13537
14397
  "pageBefore": {
13538
14398
  "type": "string",
@@ -13784,7 +14644,7 @@
13784
14644
  },
13785
14645
  "pageAfter": {
13786
14646
  "type": "string",
13787
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14647
+ "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."
13788
14648
  },
13789
14649
  "pageBefore": {
13790
14650
  "type": "string",
@@ -14104,7 +14964,7 @@
14104
14964
  },
14105
14965
  "pageAfter": {
14106
14966
  "type": "string",
14107
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14967
+ "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."
14108
14968
  },
14109
14969
  "pageBefore": {
14110
14970
  "type": "string",
@@ -14220,7 +15080,7 @@
14220
15080
  },
14221
15081
  "pageAfter": {
14222
15082
  "type": "string",
14223
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15083
+ "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."
14224
15084
  },
14225
15085
  "pageBefore": {
14226
15086
  "type": "string",
@@ -14318,7 +15178,7 @@
14318
15178
  },
14319
15179
  "pageAfter": {
14320
15180
  "type": "string",
14321
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15181
+ "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."
14322
15182
  },
14323
15183
  "pageBefore": {
14324
15184
  "type": "string",
@@ -14420,7 +15280,7 @@
14420
15280
  },
14421
15281
  "pageAfter": {
14422
15282
  "type": "string",
14423
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15283
+ "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."
14424
15284
  },
14425
15285
  "pageBefore": {
14426
15286
  "type": "string",
@@ -14625,7 +15485,7 @@
14625
15485
  },
14626
15486
  "pageAfter": {
14627
15487
  "type": "string",
14628
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15488
+ "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."
14629
15489
  },
14630
15490
  "pageBefore": {
14631
15491
  "type": "string",
@@ -14882,7 +15742,7 @@
14882
15742
  },
14883
15743
  "pageAfter": {
14884
15744
  "type": "string",
14885
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15745
+ "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."
14886
15746
  },
14887
15747
  "pageBefore": {
14888
15748
  "type": "string",
@@ -14945,12 +15805,62 @@
14945
15805
  "description": "The type of search to perform"
14946
15806
  },
14947
15807
  "query": {
14948
- "type": "object",
14949
- "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\"."
15808
+ "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.",
15809
+ "oneOf": [
15810
+ {
15811
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
15812
+ },
15813
+ {
15814
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
15815
+ },
15816
+ {
15817
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
15818
+ },
15819
+ {
15820
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
15821
+ }
15822
+ ]
14950
15823
  },
14951
15824
  "results": {
15825
+ "title": "FinderResultsSchema",
14952
15826
  "type": "object",
14953
- "description": "The search results returned from OpenSearch (auto-populated)"
15827
+ "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.",
15828
+ "properties": {
15829
+ "total": {
15830
+ "type": "integer",
15831
+ "description": "Count of matching documents before pagination."
15832
+ },
15833
+ "hits": {
15834
+ "type": "array",
15835
+ "items": {
15836
+ "title": "FinderResultHitSchema",
15837
+ "type": "object",
15838
+ "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`.",
15839
+ "properties": {
15840
+ "id": {
15841
+ "type": "string",
15842
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
15843
+ },
15844
+ "tenantId": {
15845
+ "type": "string"
15846
+ },
15847
+ "status": {
15848
+ "type": "string"
15849
+ },
15850
+ "source": {
15851
+ "type": "string"
15852
+ },
15853
+ "created": {
15854
+ "type": "string"
15855
+ },
15856
+ "shortCode": {
15857
+ "type": "string"
15858
+ }
15859
+ },
15860
+ "additionalProperties": true
15861
+ }
15862
+ }
15863
+ }
14954
15864
  },
14955
15865
  "status": {
14956
15866
  "type": "string",
@@ -15178,12 +16088,62 @@
15178
16088
  "description": "The type of search to perform"
15179
16089
  },
15180
16090
  "query": {
15181
- "type": "object",
15182
- "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\"."
16091
+ "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.",
16092
+ "oneOf": [
16093
+ {
16094
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
16095
+ },
16096
+ {
16097
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
16098
+ },
16099
+ {
16100
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
16101
+ },
16102
+ {
16103
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
16104
+ }
16105
+ ]
15183
16106
  },
15184
16107
  "results": {
16108
+ "title": "FinderResultsSchema",
15185
16109
  "type": "object",
15186
- "description": "The search results returned from OpenSearch (auto-populated)"
16110
+ "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.",
16111
+ "properties": {
16112
+ "total": {
16113
+ "type": "integer",
16114
+ "description": "Count of matching documents before pagination."
16115
+ },
16116
+ "hits": {
16117
+ "type": "array",
16118
+ "items": {
16119
+ "title": "FinderResultHitSchema",
16120
+ "type": "object",
16121
+ "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`.",
16122
+ "properties": {
16123
+ "id": {
16124
+ "type": "string",
16125
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
16126
+ },
16127
+ "tenantId": {
16128
+ "type": "string"
16129
+ },
16130
+ "status": {
16131
+ "type": "string"
16132
+ },
16133
+ "source": {
16134
+ "type": "string"
16135
+ },
16136
+ "created": {
16137
+ "type": "string"
16138
+ },
16139
+ "shortCode": {
16140
+ "type": "string"
16141
+ }
16142
+ },
16143
+ "additionalProperties": true
16144
+ }
16145
+ }
16146
+ }
15187
16147
  },
15188
16148
  "status": {
15189
16149
  "type": "string",
@@ -15308,7 +16268,7 @@
15308
16268
  },
15309
16269
  "pageAfter": {
15310
16270
  "type": "string",
15311
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
16271
+ "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."
15312
16272
  },
15313
16273
  "pageBefore": {
15314
16274
  "type": "string",
@@ -15581,7 +16541,7 @@
15581
16541
  },
15582
16542
  "pageAfter": {
15583
16543
  "type": "string",
15584
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
16544
+ "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."
15585
16545
  },
15586
16546
  "pageBefore": {
15587
16547
  "type": "string",