@smartytalent/mcp-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 +1195 -240
  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",
@@ -6729,6 +6729,32 @@
6729
6729
  "type": "string",
6730
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
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"
6756
+ ]
6757
+ },
6732
6758
  "filterCreatedFrom": {
6733
6759
  "type": "string",
6734
6760
  "description": "Filters results to include only those created from the specified date and time. The value must be in ISO 8601 format."
@@ -6755,7 +6781,7 @@
6755
6781
  },
6756
6782
  "pageAfter": {
6757
6783
  "type": "string",
6758
- "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."
6759
6785
  },
6760
6786
  "pageBefore": {
6761
6787
  "type": "string",
@@ -6801,7 +6827,25 @@
6801
6827
  "type": "string"
6802
6828
  },
6803
6829
  "status": {
6804
- "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."
6805
6849
  },
6806
6850
  "emailFrom": {
6807
6851
  "type": "string"
@@ -6809,27 +6853,33 @@
6809
6853
  "emailTo": {
6810
6854
  "type": "string"
6811
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
+ },
6812
6870
  "subject": {
6813
- "oneOf": [
6814
- {
6815
- "type": "string"
6816
- },
6817
- {
6818
- "type": "object",
6819
- "additionalProperties": true
6820
- }
6821
- ]
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`."
6822
6876
  },
6823
6877
  "body": {
6824
- "oneOf": [
6825
- {
6826
- "type": "string"
6827
- },
6828
- {
6829
- "type": "object",
6830
- "additionalProperties": true
6831
- }
6832
- ]
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."
6833
6883
  },
6834
6884
  "shortCode": {
6835
6885
  "type": "string"
@@ -6846,11 +6896,78 @@
6846
6896
  "isExternalSender": {
6847
6897
  "type": "boolean"
6848
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
+ },
6849
6964
  "ttl": {
6850
6965
  "type": "string"
6851
6966
  },
6852
6967
  "sendScheduleDate": {
6853
- "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."
6854
6971
  },
6855
6972
  "meta": {
6856
6973
  "type": "object",
@@ -6971,6 +7088,25 @@
6971
7088
  }
6972
7089
  }
6973
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
+ }
6974
7110
  }
6975
7111
  }
6976
7112
  },
@@ -7050,7 +7186,25 @@
7050
7186
  "type": "string"
7051
7187
  },
7052
7188
  "status": {
7053
- "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."
7054
7208
  },
7055
7209
  "emailFrom": {
7056
7210
  "type": "string"
@@ -7058,27 +7212,33 @@
7058
7212
  "emailTo": {
7059
7213
  "type": "string"
7060
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
+ },
7061
7229
  "subject": {
7062
- "oneOf": [
7063
- {
7064
- "type": "string"
7065
- },
7066
- {
7067
- "type": "object",
7068
- "additionalProperties": true
7069
- }
7070
- ]
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`."
7071
7235
  },
7072
7236
  "body": {
7073
- "oneOf": [
7074
- {
7075
- "type": "string"
7076
- },
7077
- {
7078
- "type": "object",
7079
- "additionalProperties": true
7080
- }
7081
- ]
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."
7082
7242
  },
7083
7243
  "shortCode": {
7084
7244
  "type": "string"
@@ -7095,11 +7255,78 @@
7095
7255
  "isExternalSender": {
7096
7256
  "type": "boolean"
7097
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
+ },
7098
7323
  "ttl": {
7099
7324
  "type": "string"
7100
7325
  },
7101
7326
  "sendScheduleDate": {
7102
- "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."
7103
7330
  },
7104
7331
  "meta": {
7105
7332
  "type": "object",
@@ -7197,7 +7424,7 @@
7197
7424
  },
7198
7425
  "pageAfter": {
7199
7426
  "type": "string",
7200
- "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."
7201
7428
  },
7202
7429
  "pageBefore": {
7203
7430
  "type": "string",
@@ -7486,7 +7713,7 @@
7486
7713
  },
7487
7714
  "pageAfter": {
7488
7715
  "type": "string",
7489
- "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."
7490
7717
  },
7491
7718
  "pageBefore": {
7492
7719
  "type": "string",
@@ -8373,7 +8600,7 @@
8373
8600
  },
8374
8601
  "pageAfter": {
8375
8602
  "type": "string",
8376
- "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."
8377
8604
  },
8378
8605
  "pageBefore": {
8379
8606
  "type": "string",
@@ -8429,8 +8656,10 @@
8429
8656
  "pending",
8430
8657
  "fired",
8431
8658
  "cancelled",
8432
- "failed"
8433
- ]
8659
+ "failed",
8660
+ "paused"
8661
+ ],
8662
+ "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`."
8434
8663
  },
8435
8664
  "fireAt": {
8436
8665
  "type": "string",
@@ -8577,6 +8806,24 @@
8577
8806
  }
8578
8807
  }
8579
8808
  }
8809
+ },
8810
+ "email": {
8811
+ "title": "ScheduleRelationshipsEmailSchema",
8812
+ "type": "object",
8813
+ "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.",
8814
+ "properties": {
8815
+ "data": {
8816
+ "type": "object",
8817
+ "properties": {
8818
+ "type": {
8819
+ "type": "string"
8820
+ },
8821
+ "id": {
8822
+ "type": "string"
8823
+ }
8824
+ }
8825
+ }
8826
+ }
8580
8827
  }
8581
8828
  }
8582
8829
  }
@@ -8676,8 +8923,10 @@
8676
8923
  "pending",
8677
8924
  "fired",
8678
8925
  "cancelled",
8679
- "failed"
8680
- ]
8926
+ "failed",
8927
+ "paused"
8928
+ ],
8929
+ "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`."
8681
8930
  },
8682
8931
  "fireAt": {
8683
8932
  "type": "string",
@@ -8824,21 +9073,39 @@
8824
9073
  }
8825
9074
  }
8826
9075
  }
8827
- }
8828
- }
8829
- }
8830
- }
8831
- }
8832
- }
8833
- }
8834
- },
8835
- "required": [
8836
- "scheduleId",
8837
- "requestBody"
8838
- ]
8839
- },
8840
- "_meta": {
8841
- "method": "PATCH",
9076
+ },
9077
+ "email": {
9078
+ "title": "ScheduleRelationshipsEmailSchema",
9079
+ "type": "object",
9080
+ "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.",
9081
+ "properties": {
9082
+ "data": {
9083
+ "type": "object",
9084
+ "properties": {
9085
+ "type": {
9086
+ "type": "string"
9087
+ },
9088
+ "id": {
9089
+ "type": "string"
9090
+ }
9091
+ }
9092
+ }
9093
+ }
9094
+ }
9095
+ }
9096
+ }
9097
+ }
9098
+ }
9099
+ }
9100
+ }
9101
+ },
9102
+ "required": [
9103
+ "scheduleId",
9104
+ "requestBody"
9105
+ ]
9106
+ },
9107
+ "_meta": {
9108
+ "method": "PATCH",
8842
9109
  "path": "/v1/schedules/{scheduleId}",
8843
9110
  "operationId": "updateSchedule"
8844
9111
  }
@@ -9176,7 +9443,7 @@
9176
9443
  },
9177
9444
  "pageAfter": {
9178
9445
  "type": "string",
9179
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
9446
+ "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."
9180
9447
  },
9181
9448
  "pageBefore": {
9182
9449
  "type": "string",
@@ -9909,7 +10176,7 @@
9909
10176
  },
9910
10177
  "pageAfter": {
9911
10178
  "type": "string",
9912
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10179
+ "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."
9913
10180
  },
9914
10181
  "pageBefore": {
9915
10182
  "type": "string",
@@ -10232,7 +10499,7 @@
10232
10499
  },
10233
10500
  "pageAfter": {
10234
10501
  "type": "string",
10235
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10502
+ "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."
10236
10503
  },
10237
10504
  "pageBefore": {
10238
10505
  "type": "string",
@@ -10497,7 +10764,7 @@
10497
10764
  },
10498
10765
  "pageAfter": {
10499
10766
  "type": "string",
10500
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
10767
+ "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."
10501
10768
  },
10502
10769
  "pageBefore": {
10503
10770
  "type": "string",
@@ -10942,7 +11209,7 @@
10942
11209
  },
10943
11210
  "pageAfter": {
10944
11211
  "type": "string",
10945
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11212
+ "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."
10946
11213
  },
10947
11214
  "pageBefore": {
10948
11215
  "type": "string",
@@ -11275,7 +11542,7 @@
11275
11542
  },
11276
11543
  "pageAfter": {
11277
11544
  "type": "string",
11278
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11545
+ "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."
11279
11546
  },
11280
11547
  "pageBefore": {
11281
11548
  "type": "string",
@@ -11603,7 +11870,7 @@
11603
11870
  },
11604
11871
  "pageAfter": {
11605
11872
  "type": "string",
11606
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
11873
+ "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."
11607
11874
  },
11608
11875
  "pageBefore": {
11609
11876
  "type": "string",
@@ -11642,33 +11909,689 @@
11642
11909
  ]
11643
11910
  },
11644
11911
  "attributes": {
11645
- "title": "NoteAttributesSchema",
11912
+ "title": "NoteAttributesSchema",
11913
+ "type": "object",
11914
+ "properties": {
11915
+ "name": {
11916
+ "type": "string"
11917
+ },
11918
+ "status": {
11919
+ "type": "string"
11920
+ },
11921
+ "details": {
11922
+ "type": "object",
11923
+ "additionalProperties": {
11924
+ "type": "string"
11925
+ },
11926
+ "description": "Multilingual note details keyed by language code"
11927
+ },
11928
+ "source": {
11929
+ "type": "string",
11930
+ "description": "Source of the note"
11931
+ },
11932
+ "ttl": {
11933
+ "type": "string",
11934
+ "description": "Time-to-live expiration timestamp"
11935
+ },
11936
+ "meta": {
11937
+ "type": "object",
11938
+ "additionalProperties": true
11939
+ },
11940
+ "timestamps": {
11941
+ "title": "ResourceTimestampsSchema",
11942
+ "type": "object",
11943
+ "properties": {
11944
+ "created": {
11945
+ "type": "string",
11946
+ "format": "date-time"
11947
+ },
11948
+ "modified": {
11949
+ "type": "string",
11950
+ "format": "date-time"
11951
+ }
11952
+ }
11953
+ }
11954
+ }
11955
+ },
11956
+ "relationships": {
11957
+ "title": "NoteRelationshipsSchema",
11958
+ "type": "object",
11959
+ "properties": {
11960
+ "candidate": {
11961
+ "title": "NoteRelationshipsCandidateSchema",
11962
+ "type": "object",
11963
+ "properties": {
11964
+ "data": {
11965
+ "title": "NoteRelationshipsCandidateDataSchema",
11966
+ "type": "object",
11967
+ "properties": {
11968
+ "type": {
11969
+ "type": "string"
11970
+ },
11971
+ "id": {
11972
+ "type": "string"
11973
+ }
11974
+ }
11975
+ }
11976
+ }
11977
+ },
11978
+ "translations": {
11979
+ "title": "NoteRelationshipsTranslationsSchema",
11980
+ "type": "object",
11981
+ "properties": {
11982
+ "data": {
11983
+ "type": "array",
11984
+ "items": {
11985
+ "title": "NoteRelationshipsTranslationsDataSchema",
11986
+ "type": "object",
11987
+ "properties": {
11988
+ "type": {
11989
+ "type": "string"
11990
+ },
11991
+ "id": {
11992
+ "type": "string"
11993
+ }
11994
+ }
11995
+ }
11996
+ }
11997
+ }
11998
+ },
11999
+ "report": {
12000
+ "title": "NoteRelationshipsReportSchema",
12001
+ "type": "object",
12002
+ "properties": {
12003
+ "data": {
12004
+ "title": "NoteRelationshipsReportDataSchema",
12005
+ "type": "object",
12006
+ "properties": {
12007
+ "type": {
12008
+ "type": "string"
12009
+ },
12010
+ "id": {
12011
+ "type": "string"
12012
+ }
12013
+ }
12014
+ }
12015
+ }
12016
+ },
12017
+ "operation": {
12018
+ "title": "NoteRelationshipsOperationSchema",
12019
+ "type": "object",
12020
+ "properties": {
12021
+ "data": {
12022
+ "title": "NoteRelationshipsOperationDataSchema",
12023
+ "type": "object",
12024
+ "properties": {
12025
+ "type": {
12026
+ "type": "string"
12027
+ },
12028
+ "id": {
12029
+ "type": "string"
12030
+ }
12031
+ }
12032
+ }
12033
+ }
12034
+ }
12035
+ }
12036
+ }
12037
+ }
12038
+ }
12039
+ }
12040
+ },
12041
+ "_meta": {
12042
+ "method": "POST",
12043
+ "path": "/v1/notes",
12044
+ "operationId": "createNote"
12045
+ }
12046
+ },
12047
+ {
12048
+ "name": "notes_options",
12049
+ "description": "Notes Options",
12050
+ "inputSchema": {
12051
+ "type": "object",
12052
+ "properties": {}
12053
+ },
12054
+ "_meta": {
12055
+ "method": "OPTIONS",
12056
+ "path": "/v1/notes",
12057
+ "operationId": "notesOptions"
12058
+ }
12059
+ },
12060
+ {
12061
+ "name": "show_note",
12062
+ "description": "Show Note",
12063
+ "inputSchema": {
12064
+ "type": "object",
12065
+ "properties": {}
12066
+ },
12067
+ "_meta": {
12068
+ "method": "GET",
12069
+ "path": "/v1/notes/{noteId}",
12070
+ "operationId": "showNote"
12071
+ }
12072
+ },
12073
+ {
12074
+ "name": "update_note",
12075
+ "description": "Update Note",
12076
+ "inputSchema": {
12077
+ "title": "UpdateNoteRequestBody",
12078
+ "type": "object",
12079
+ "required": [
12080
+ "data"
12081
+ ],
12082
+ "properties": {
12083
+ "data": {
12084
+ "title": "UpdateNoteRequestBodyData",
12085
+ "type": "object",
12086
+ "required": [
12087
+ "type",
12088
+ "id",
12089
+ "attributes"
12090
+ ],
12091
+ "properties": {
12092
+ "type": {
12093
+ "type": "string",
12094
+ "enum": [
12095
+ "notes"
12096
+ ]
12097
+ },
12098
+ "id": {
12099
+ "type": "string"
12100
+ },
12101
+ "attributes": {
12102
+ "title": "NoteAttributesSchema",
12103
+ "type": "object",
12104
+ "properties": {
12105
+ "name": {
12106
+ "type": "string"
12107
+ },
12108
+ "status": {
12109
+ "type": "string"
12110
+ },
12111
+ "details": {
12112
+ "type": "object",
12113
+ "additionalProperties": {
12114
+ "type": "string"
12115
+ },
12116
+ "description": "Multilingual note details keyed by language code"
12117
+ },
12118
+ "source": {
12119
+ "type": "string",
12120
+ "description": "Source of the note"
12121
+ },
12122
+ "ttl": {
12123
+ "type": "string",
12124
+ "description": "Time-to-live expiration timestamp"
12125
+ },
12126
+ "meta": {
12127
+ "type": "object",
12128
+ "additionalProperties": true
12129
+ },
12130
+ "timestamps": {
12131
+ "title": "ResourceTimestampsSchema",
12132
+ "type": "object",
12133
+ "properties": {
12134
+ "created": {
12135
+ "type": "string",
12136
+ "format": "date-time"
12137
+ },
12138
+ "modified": {
12139
+ "type": "string",
12140
+ "format": "date-time"
12141
+ }
12142
+ }
12143
+ }
12144
+ }
12145
+ }
12146
+ }
12147
+ }
12148
+ }
12149
+ },
12150
+ "_meta": {
12151
+ "method": "PATCH",
12152
+ "path": "/v1/notes/{noteId}",
12153
+ "operationId": "updateNote"
12154
+ }
12155
+ },
12156
+ {
12157
+ "name": "delete_note",
12158
+ "description": "Delete Note",
12159
+ "inputSchema": {
12160
+ "type": "object",
12161
+ "properties": {}
12162
+ },
12163
+ "_meta": {
12164
+ "method": "DELETE",
12165
+ "path": "/v1/notes/{noteId}",
12166
+ "operationId": "deleteNote"
12167
+ }
12168
+ },
12169
+ {
12170
+ "name": "note_options",
12171
+ "description": "Note Options",
12172
+ "inputSchema": {
12173
+ "type": "object",
12174
+ "properties": {}
12175
+ },
12176
+ "_meta": {
12177
+ "method": "OPTIONS",
12178
+ "path": "/v1/notes/{noteId}",
12179
+ "operationId": "noteOptions"
12180
+ }
12181
+ },
12182
+ {
12183
+ "name": "list_states",
12184
+ "description": "List States",
12185
+ "inputSchema": {
12186
+ "type": "object",
12187
+ "properties": {
12188
+ "filterResourceType": {
12189
+ "type": "string",
12190
+ "description": "Only return states for this resource type.",
12191
+ "enum": [
12192
+ "emails",
12193
+ "candidates",
12194
+ "conversations",
12195
+ "jobs",
12196
+ "talents",
12197
+ "personas",
12198
+ "reports",
12199
+ "tasks"
12200
+ ]
12201
+ },
12202
+ "filterResourceIds": {
12203
+ "type": "string",
12204
+ "description": "Comma-separated list of resource ids to batch-fetch. Requires `filterResourceType`."
12205
+ },
12206
+ "folder": {
12207
+ "type": "string",
12208
+ "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."
12209
+ },
12210
+ "pageSize": {
12211
+ "type": "integer",
12212
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
12213
+ },
12214
+ "pageAfter": {
12215
+ "type": "string",
12216
+ "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."
12217
+ },
12218
+ "pageBefore": {
12219
+ "type": "string",
12220
+ "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12221
+ }
12222
+ }
12223
+ },
12224
+ "_meta": {
12225
+ "method": "GET",
12226
+ "path": "/v1/states",
12227
+ "operationId": "listStates"
12228
+ }
12229
+ },
12230
+ {
12231
+ "name": "create_state",
12232
+ "description": "Upsert State",
12233
+ "inputSchema": {
12234
+ "title": "CreateStateRequestBody",
12235
+ "type": "object",
12236
+ "required": [
12237
+ "data"
12238
+ ],
12239
+ "properties": {
12240
+ "data": {
12241
+ "title": "CreateStateRequestBodyData",
12242
+ "type": "object",
12243
+ "required": [
12244
+ "type",
12245
+ "attributes"
12246
+ ],
12247
+ "properties": {
12248
+ "type": {
12249
+ "type": "string",
12250
+ "enum": [
12251
+ "states"
12252
+ ]
12253
+ },
12254
+ "attributes": {
12255
+ "title": "StateAttributesSchema",
12256
+ "type": "object",
12257
+ "properties": {
12258
+ "userId": {
12259
+ "type": "string",
12260
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
12261
+ },
12262
+ "resourceType": {
12263
+ "type": "string",
12264
+ "enum": [
12265
+ "emails",
12266
+ "candidates",
12267
+ "conversations",
12268
+ "jobs",
12269
+ "talents",
12270
+ "personas",
12271
+ "reports",
12272
+ "tasks"
12273
+ ],
12274
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
12275
+ },
12276
+ "resourceId": {
12277
+ "type": "string",
12278
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
12279
+ },
12280
+ "isSeen": {
12281
+ "type": "boolean",
12282
+ "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."
12283
+ },
12284
+ "isStarred": {
12285
+ "type": "boolean",
12286
+ "description": "True if the user has starred/favourited the resource."
12287
+ },
12288
+ "isSpam": {
12289
+ "type": "boolean",
12290
+ "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."
12291
+ },
12292
+ "seenAt": {
12293
+ "type": "string",
12294
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
12295
+ },
12296
+ "starredAt": {
12297
+ "type": "string",
12298
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
12299
+ },
12300
+ "spamAt": {
12301
+ "type": "string",
12302
+ "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."
12303
+ },
12304
+ "resourceCreatedAt": {
12305
+ "type": "string",
12306
+ "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."
12307
+ },
12308
+ "flags": {
12309
+ "type": "object",
12310
+ "additionalProperties": true,
12311
+ "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."
12312
+ },
12313
+ "timestamps": {
12314
+ "title": "ResourceTimestampsSchema",
12315
+ "type": "object",
12316
+ "properties": {
12317
+ "created": {
12318
+ "type": "string",
12319
+ "format": "date-time"
12320
+ },
12321
+ "modified": {
12322
+ "type": "string",
12323
+ "format": "date-time"
12324
+ }
12325
+ }
12326
+ }
12327
+ }
12328
+ }
12329
+ }
12330
+ }
12331
+ }
12332
+ },
12333
+ "_meta": {
12334
+ "method": "POST",
12335
+ "path": "/v1/states",
12336
+ "operationId": "createState"
12337
+ }
12338
+ },
12339
+ {
12340
+ "name": "states_options",
12341
+ "description": "States Options",
12342
+ "inputSchema": {
12343
+ "type": "object",
12344
+ "properties": {}
12345
+ },
12346
+ "_meta": {
12347
+ "method": "OPTIONS",
12348
+ "path": "/v1/states",
12349
+ "operationId": "statesOptions"
12350
+ }
12351
+ },
12352
+ {
12353
+ "name": "show_state",
12354
+ "description": "Show State",
12355
+ "inputSchema": {
12356
+ "type": "object",
12357
+ "properties": {}
12358
+ },
12359
+ "_meta": {
12360
+ "method": "GET",
12361
+ "path": "/v1/states/{stateId}",
12362
+ "operationId": "showState"
12363
+ }
12364
+ },
12365
+ {
12366
+ "name": "update_state",
12367
+ "description": "Update State",
12368
+ "inputSchema": {
12369
+ "title": "UpdateStateRequestBody",
12370
+ "type": "object",
12371
+ "required": [
12372
+ "data"
12373
+ ],
12374
+ "properties": {
12375
+ "data": {
12376
+ "title": "UpdateStateRequestBodyData",
12377
+ "type": "object",
12378
+ "required": [
12379
+ "type",
12380
+ "id",
12381
+ "attributes"
12382
+ ],
12383
+ "properties": {
12384
+ "type": {
12385
+ "type": "string",
12386
+ "enum": [
12387
+ "states"
12388
+ ]
12389
+ },
12390
+ "id": {
12391
+ "type": "string"
12392
+ },
12393
+ "attributes": {
12394
+ "title": "StateAttributesSchema",
12395
+ "type": "object",
12396
+ "properties": {
12397
+ "userId": {
12398
+ "type": "string",
12399
+ "description": "Owner of this state row. Always the authenticated user; never set by the client."
12400
+ },
12401
+ "resourceType": {
12402
+ "type": "string",
12403
+ "enum": [
12404
+ "emails",
12405
+ "candidates",
12406
+ "conversations",
12407
+ "jobs",
12408
+ "talents",
12409
+ "personas",
12410
+ "reports",
12411
+ "tasks"
12412
+ ],
12413
+ "description": "The kind of resource this state describes. Lives in the composite id as `{resourceType}:{resourceId}`."
12414
+ },
12415
+ "resourceId": {
12416
+ "type": "string",
12417
+ "description": "Id of the resource this state describes (e.g. an emailId, candidateId)."
12418
+ },
12419
+ "isSeen": {
12420
+ "type": "boolean",
12421
+ "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."
12422
+ },
12423
+ "isStarred": {
12424
+ "type": "boolean",
12425
+ "description": "True if the user has starred/favourited the resource."
12426
+ },
12427
+ "isSpam": {
12428
+ "type": "boolean",
12429
+ "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."
12430
+ },
12431
+ "seenAt": {
12432
+ "type": "string",
12433
+ "description": "ISO 8601 timestamp of the user's most recent open. Absent means never seen."
12434
+ },
12435
+ "starredAt": {
12436
+ "type": "string",
12437
+ "description": "ISO 8601 timestamp of when the user starred the resource. Absent means not starred; used as the sort key for the `Starred` folder."
12438
+ },
12439
+ "spamAt": {
12440
+ "type": "string",
12441
+ "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."
12442
+ },
12443
+ "resourceCreatedAt": {
12444
+ "type": "string",
12445
+ "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."
12446
+ },
12447
+ "flags": {
12448
+ "type": "object",
12449
+ "additionalProperties": true,
12450
+ "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."
12451
+ },
12452
+ "timestamps": {
12453
+ "title": "ResourceTimestampsSchema",
12454
+ "type": "object",
12455
+ "properties": {
12456
+ "created": {
12457
+ "type": "string",
12458
+ "format": "date-time"
12459
+ },
12460
+ "modified": {
12461
+ "type": "string",
12462
+ "format": "date-time"
12463
+ }
12464
+ }
12465
+ }
12466
+ }
12467
+ }
12468
+ }
12469
+ }
12470
+ }
12471
+ },
12472
+ "_meta": {
12473
+ "method": "PATCH",
12474
+ "path": "/v1/states/{stateId}",
12475
+ "operationId": "updateState"
12476
+ }
12477
+ },
12478
+ {
12479
+ "name": "delete_state",
12480
+ "description": "Delete State",
12481
+ "inputSchema": {
12482
+ "type": "object",
12483
+ "properties": {}
12484
+ },
12485
+ "_meta": {
12486
+ "method": "DELETE",
12487
+ "path": "/v1/states/{stateId}",
12488
+ "operationId": "deleteState"
12489
+ }
12490
+ },
12491
+ {
12492
+ "name": "state_options",
12493
+ "description": "State Options",
12494
+ "inputSchema": {
12495
+ "type": "object",
12496
+ "properties": {}
12497
+ },
12498
+ "_meta": {
12499
+ "method": "OPTIONS",
12500
+ "path": "/v1/states/{stateId}",
12501
+ "operationId": "stateOptions"
12502
+ }
12503
+ },
12504
+ {
12505
+ "name": "list_labels",
12506
+ "description": "List Labels",
12507
+ "inputSchema": {
12508
+ "type": "object",
12509
+ "properties": {
12510
+ "filterStatus": {
12511
+ "type": "string",
12512
+ "description": "filterStatus parameter",
12513
+ "enum": [
12514
+ "active",
12515
+ "archived"
12516
+ ]
12517
+ },
12518
+ "pageSize": {
12519
+ "type": "integer",
12520
+ "description": "Specifies the number of items to retrieve per page. The maximum value is 100."
12521
+ }
12522
+ }
12523
+ },
12524
+ "_meta": {
12525
+ "method": "GET",
12526
+ "path": "/v1/labels",
12527
+ "operationId": "listLabels"
12528
+ }
12529
+ },
12530
+ {
12531
+ "name": "create_label",
12532
+ "description": "Create Label",
12533
+ "inputSchema": {
12534
+ "title": "CreateLabelRequestBody",
12535
+ "type": "object",
12536
+ "required": [
12537
+ "data"
12538
+ ],
12539
+ "properties": {
12540
+ "data": {
12541
+ "title": "CreateLabelRequestBodyData",
12542
+ "type": "object",
12543
+ "required": [
12544
+ "type",
12545
+ "attributes"
12546
+ ],
12547
+ "properties": {
12548
+ "type": {
12549
+ "type": "string",
12550
+ "enum": [
12551
+ "labels"
12552
+ ]
12553
+ },
12554
+ "attributes": {
12555
+ "title": "LabelAttributesSchema",
11646
12556
  "type": "object",
11647
12557
  "properties": {
11648
12558
  "name": {
11649
- "type": "string"
12559
+ "type": "string",
12560
+ "description": "Display name. Unique within a scope by convention but not enforced."
11650
12561
  },
11651
- "status": {
11652
- "type": "string"
12562
+ "color": {
12563
+ "type": "string",
12564
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11653
12565
  },
11654
- "details": {
11655
- "type": "object",
11656
- "additionalProperties": {
11657
- "type": "string"
11658
- },
11659
- "description": "Multilingual note details keyed by language code"
12566
+ "description": {
12567
+ "type": "string"
11660
12568
  },
11661
- "source": {
12569
+ "scope": {
11662
12570
  "type": "string",
11663
- "description": "Source of the note"
12571
+ "enum": [
12572
+ "tenant",
12573
+ "user"
12574
+ ],
12575
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11664
12576
  },
11665
- "ttl": {
12577
+ "ownerId": {
11666
12578
  "type": "string",
11667
- "description": "Time-to-live expiration timestamp"
12579
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11668
12580
  },
11669
- "meta": {
11670
- "type": "object",
11671
- "additionalProperties": true
12581
+ "resourceTypes": {
12582
+ "type": "array",
12583
+ "items": {
12584
+ "type": "string"
12585
+ },
12586
+ "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."
12587
+ },
12588
+ "status": {
12589
+ "type": "string",
12590
+ "enum": [
12591
+ "active",
12592
+ "archived"
12593
+ ],
12594
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11672
12595
  },
11673
12596
  "timestamps": {
11674
12597
  "title": "ResourceTimestampsSchema",
@@ -11685,87 +12608,6 @@
11685
12608
  }
11686
12609
  }
11687
12610
  }
11688
- },
11689
- "relationships": {
11690
- "title": "NoteRelationshipsSchema",
11691
- "type": "object",
11692
- "properties": {
11693
- "candidate": {
11694
- "title": "NoteRelationshipsCandidateSchema",
11695
- "type": "object",
11696
- "properties": {
11697
- "data": {
11698
- "title": "NoteRelationshipsCandidateDataSchema",
11699
- "type": "object",
11700
- "properties": {
11701
- "type": {
11702
- "type": "string"
11703
- },
11704
- "id": {
11705
- "type": "string"
11706
- }
11707
- }
11708
- }
11709
- }
11710
- },
11711
- "translations": {
11712
- "title": "NoteRelationshipsTranslationsSchema",
11713
- "type": "object",
11714
- "properties": {
11715
- "data": {
11716
- "type": "array",
11717
- "items": {
11718
- "title": "NoteRelationshipsTranslationsDataSchema",
11719
- "type": "object",
11720
- "properties": {
11721
- "type": {
11722
- "type": "string"
11723
- },
11724
- "id": {
11725
- "type": "string"
11726
- }
11727
- }
11728
- }
11729
- }
11730
- }
11731
- },
11732
- "report": {
11733
- "title": "NoteRelationshipsReportSchema",
11734
- "type": "object",
11735
- "properties": {
11736
- "data": {
11737
- "title": "NoteRelationshipsReportDataSchema",
11738
- "type": "object",
11739
- "properties": {
11740
- "type": {
11741
- "type": "string"
11742
- },
11743
- "id": {
11744
- "type": "string"
11745
- }
11746
- }
11747
- }
11748
- }
11749
- },
11750
- "operation": {
11751
- "title": "NoteRelationshipsOperationSchema",
11752
- "type": "object",
11753
- "properties": {
11754
- "data": {
11755
- "title": "NoteRelationshipsOperationDataSchema",
11756
- "type": "object",
11757
- "properties": {
11758
- "type": {
11759
- "type": "string"
11760
- },
11761
- "id": {
11762
- "type": "string"
11763
- }
11764
- }
11765
- }
11766
- }
11767
- }
11768
- }
11769
12611
  }
11770
12612
  }
11771
12613
  }
@@ -11773,48 +12615,48 @@
11773
12615
  },
11774
12616
  "_meta": {
11775
12617
  "method": "POST",
11776
- "path": "/v1/notes",
11777
- "operationId": "createNote"
12618
+ "path": "/v1/labels",
12619
+ "operationId": "createLabel"
11778
12620
  }
11779
12621
  },
11780
12622
  {
11781
- "name": "notes_options",
11782
- "description": "Notes Options",
12623
+ "name": "labels_options",
12624
+ "description": "Labels Options",
11783
12625
  "inputSchema": {
11784
12626
  "type": "object",
11785
12627
  "properties": {}
11786
12628
  },
11787
12629
  "_meta": {
11788
12630
  "method": "OPTIONS",
11789
- "path": "/v1/notes",
11790
- "operationId": "notesOptions"
12631
+ "path": "/v1/labels",
12632
+ "operationId": "labelsOptions"
11791
12633
  }
11792
12634
  },
11793
12635
  {
11794
- "name": "show_note",
11795
- "description": "Show Note",
12636
+ "name": "show_label",
12637
+ "description": "Show Label",
11796
12638
  "inputSchema": {
11797
12639
  "type": "object",
11798
12640
  "properties": {}
11799
12641
  },
11800
12642
  "_meta": {
11801
12643
  "method": "GET",
11802
- "path": "/v1/notes/{noteId}",
11803
- "operationId": "showNote"
12644
+ "path": "/v1/labels/{labelId}",
12645
+ "operationId": "showLabel"
11804
12646
  }
11805
12647
  },
11806
12648
  {
11807
- "name": "update_note",
11808
- "description": "Update Note",
12649
+ "name": "update_label",
12650
+ "description": "Update Label",
11809
12651
  "inputSchema": {
11810
- "title": "UpdateNoteRequestBody",
12652
+ "title": "UpdateLabelRequestBody",
11811
12653
  "type": "object",
11812
12654
  "required": [
11813
12655
  "data"
11814
12656
  ],
11815
12657
  "properties": {
11816
12658
  "data": {
11817
- "title": "UpdateNoteRequestBodyData",
12659
+ "title": "UpdateLabelRequestBodyData",
11818
12660
  "type": "object",
11819
12661
  "required": [
11820
12662
  "type",
@@ -11825,40 +12667,53 @@
11825
12667
  "type": {
11826
12668
  "type": "string",
11827
12669
  "enum": [
11828
- "notes"
12670
+ "labels"
11829
12671
  ]
11830
12672
  },
11831
12673
  "id": {
11832
12674
  "type": "string"
11833
12675
  },
11834
12676
  "attributes": {
11835
- "title": "NoteAttributesSchema",
12677
+ "title": "LabelAttributesSchema",
11836
12678
  "type": "object",
11837
12679
  "properties": {
11838
12680
  "name": {
11839
- "type": "string"
12681
+ "type": "string",
12682
+ "description": "Display name. Unique within a scope by convention but not enforced."
11840
12683
  },
11841
- "status": {
11842
- "type": "string"
12684
+ "color": {
12685
+ "type": "string",
12686
+ "description": "Hex or CSS-named color the UI uses to render the label pill."
11843
12687
  },
11844
- "details": {
11845
- "type": "object",
11846
- "additionalProperties": {
11847
- "type": "string"
11848
- },
11849
- "description": "Multilingual note details keyed by language code"
12688
+ "description": {
12689
+ "type": "string"
11850
12690
  },
11851
- "source": {
12691
+ "scope": {
11852
12692
  "type": "string",
11853
- "description": "Source of the note"
12693
+ "enum": [
12694
+ "tenant",
12695
+ "user"
12696
+ ],
12697
+ "description": "tenant = visible to every user in the tenant; user = visible only to the owner."
11854
12698
  },
11855
- "ttl": {
12699
+ "ownerId": {
11856
12700
  "type": "string",
11857
- "description": "Time-to-live expiration timestamp"
12701
+ "description": "Set server-side from the caller. Tenant-scope: tenantId. User-scope: the authenticated user's full userId."
11858
12702
  },
11859
- "meta": {
11860
- "type": "object",
11861
- "additionalProperties": true
12703
+ "resourceTypes": {
12704
+ "type": "array",
12705
+ "items": {
12706
+ "type": "string"
12707
+ },
12708
+ "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."
12709
+ },
12710
+ "status": {
12711
+ "type": "string",
12712
+ "enum": [
12713
+ "active",
12714
+ "archived"
12715
+ ],
12716
+ "description": "Archived labels stay readable (for historical assignments) but disappear from the default list."
11862
12717
  },
11863
12718
  "timestamps": {
11864
12719
  "title": "ResourceTimestampsSchema",
@@ -11882,34 +12737,34 @@
11882
12737
  },
11883
12738
  "_meta": {
11884
12739
  "method": "PATCH",
11885
- "path": "/v1/notes/{noteId}",
11886
- "operationId": "updateNote"
12740
+ "path": "/v1/labels/{labelId}",
12741
+ "operationId": "updateLabel"
11887
12742
  }
11888
12743
  },
11889
12744
  {
11890
- "name": "delete_note",
11891
- "description": "Delete Note",
12745
+ "name": "delete_label",
12746
+ "description": "Delete Label",
11892
12747
  "inputSchema": {
11893
12748
  "type": "object",
11894
12749
  "properties": {}
11895
12750
  },
11896
12751
  "_meta": {
11897
12752
  "method": "DELETE",
11898
- "path": "/v1/notes/{noteId}",
11899
- "operationId": "deleteNote"
12753
+ "path": "/v1/labels/{labelId}",
12754
+ "operationId": "deleteLabel"
11900
12755
  }
11901
12756
  },
11902
12757
  {
11903
- "name": "note_options",
11904
- "description": "Note Options",
12758
+ "name": "label_options",
12759
+ "description": "Label Options",
11905
12760
  "inputSchema": {
11906
12761
  "type": "object",
11907
12762
  "properties": {}
11908
12763
  },
11909
12764
  "_meta": {
11910
12765
  "method": "OPTIONS",
11911
- "path": "/v1/notes/{noteId}",
11912
- "operationId": "noteOptions"
12766
+ "path": "/v1/labels/{labelId}",
12767
+ "operationId": "labelOptions"
11913
12768
  }
11914
12769
  },
11915
12770
  {
@@ -11954,7 +12809,7 @@
11954
12809
  },
11955
12810
  "pageAfter": {
11956
12811
  "type": "string",
11957
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
12812
+ "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."
11958
12813
  },
11959
12814
  "pageBefore": {
11960
12815
  "type": "string",
@@ -12531,7 +13386,7 @@
12531
13386
  },
12532
13387
  "pageAfter": {
12533
13388
  "type": "string",
12534
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13389
+ "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."
12535
13390
  },
12536
13391
  "pageBefore": {
12537
13392
  "type": "string",
@@ -12879,7 +13734,7 @@
12879
13734
  },
12880
13735
  "pageAfter": {
12881
13736
  "type": "string",
12882
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
13737
+ "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."
12883
13738
  },
12884
13739
  "pageBefore": {
12885
13740
  "type": "string",
@@ -13237,7 +14092,7 @@
13237
14092
  },
13238
14093
  "pageAfter": {
13239
14094
  "type": "string",
13240
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14095
+ "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."
13241
14096
  },
13242
14097
  "pageBefore": {
13243
14098
  "type": "string",
@@ -13541,7 +14396,7 @@
13541
14396
  },
13542
14397
  "pageAfter": {
13543
14398
  "type": "string",
13544
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14399
+ "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."
13545
14400
  },
13546
14401
  "pageBefore": {
13547
14402
  "type": "string",
@@ -13793,7 +14648,7 @@
13793
14648
  },
13794
14649
  "pageAfter": {
13795
14650
  "type": "string",
13796
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14651
+ "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."
13797
14652
  },
13798
14653
  "pageBefore": {
13799
14654
  "type": "string",
@@ -14113,7 +14968,7 @@
14113
14968
  },
14114
14969
  "pageAfter": {
14115
14970
  "type": "string",
14116
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
14971
+ "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."
14117
14972
  },
14118
14973
  "pageBefore": {
14119
14974
  "type": "string",
@@ -14229,7 +15084,7 @@
14229
15084
  },
14230
15085
  "pageAfter": {
14231
15086
  "type": "string",
14232
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15087
+ "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."
14233
15088
  },
14234
15089
  "pageBefore": {
14235
15090
  "type": "string",
@@ -14327,7 +15182,7 @@
14327
15182
  },
14328
15183
  "pageAfter": {
14329
15184
  "type": "string",
14330
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15185
+ "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."
14331
15186
  },
14332
15187
  "pageBefore": {
14333
15188
  "type": "string",
@@ -14429,7 +15284,7 @@
14429
15284
  },
14430
15285
  "pageAfter": {
14431
15286
  "type": "string",
14432
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15287
+ "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."
14433
15288
  },
14434
15289
  "pageBefore": {
14435
15290
  "type": "string",
@@ -14634,7 +15489,7 @@
14634
15489
  },
14635
15490
  "pageAfter": {
14636
15491
  "type": "string",
14637
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15492
+ "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."
14638
15493
  },
14639
15494
  "pageBefore": {
14640
15495
  "type": "string",
@@ -14891,7 +15746,7 @@
14891
15746
  },
14892
15747
  "pageAfter": {
14893
15748
  "type": "string",
14894
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
15749
+ "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."
14895
15750
  },
14896
15751
  "pageBefore": {
14897
15752
  "type": "string",
@@ -14954,12 +15809,62 @@
14954
15809
  "description": "The type of search to perform"
14955
15810
  },
14956
15811
  "query": {
14957
- "type": "object",
14958
- "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\"."
15812
+ "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.",
15813
+ "oneOf": [
15814
+ {
15815
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
15816
+ },
15817
+ {
15818
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
15819
+ },
15820
+ {
15821
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
15822
+ },
15823
+ {
15824
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
15825
+ }
15826
+ ]
14959
15827
  },
14960
15828
  "results": {
15829
+ "title": "FinderResultsSchema",
14961
15830
  "type": "object",
14962
- "description": "The search results returned from OpenSearch (auto-populated)"
15831
+ "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.",
15832
+ "properties": {
15833
+ "total": {
15834
+ "type": "integer",
15835
+ "description": "Count of matching documents before pagination."
15836
+ },
15837
+ "hits": {
15838
+ "type": "array",
15839
+ "items": {
15840
+ "title": "FinderResultHitSchema",
15841
+ "type": "object",
15842
+ "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`.",
15843
+ "properties": {
15844
+ "id": {
15845
+ "type": "string",
15846
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
15847
+ },
15848
+ "tenantId": {
15849
+ "type": "string"
15850
+ },
15851
+ "status": {
15852
+ "type": "string"
15853
+ },
15854
+ "source": {
15855
+ "type": "string"
15856
+ },
15857
+ "created": {
15858
+ "type": "string"
15859
+ },
15860
+ "shortCode": {
15861
+ "type": "string"
15862
+ }
15863
+ },
15864
+ "additionalProperties": true
15865
+ }
15866
+ }
15867
+ }
14963
15868
  },
14964
15869
  "status": {
14965
15870
  "type": "string",
@@ -15187,12 +16092,62 @@
15187
16092
  "description": "The type of search to perform"
15188
16093
  },
15189
16094
  "query": {
15190
- "type": "object",
15191
- "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\"."
16095
+ "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.",
16096
+ "oneOf": [
16097
+ {
16098
+ "$ref": "#/components/schemas/FinderQueryTalentsSchema"
16099
+ },
16100
+ {
16101
+ "$ref": "#/components/schemas/FinderQueryCandidatesSchema"
16102
+ },
16103
+ {
16104
+ "$ref": "#/components/schemas/FinderQueryJobsSchema"
16105
+ },
16106
+ {
16107
+ "$ref": "#/components/schemas/FinderQueryEmailsSchema"
16108
+ }
16109
+ ]
15192
16110
  },
15193
16111
  "results": {
16112
+ "title": "FinderResultsSchema",
15194
16113
  "type": "object",
15195
- "description": "The search results returned from OpenSearch (auto-populated)"
16114
+ "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.",
16115
+ "properties": {
16116
+ "total": {
16117
+ "type": "integer",
16118
+ "description": "Count of matching documents before pagination."
16119
+ },
16120
+ "hits": {
16121
+ "type": "array",
16122
+ "items": {
16123
+ "title": "FinderResultHitSchema",
16124
+ "type": "object",
16125
+ "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`.",
16126
+ "properties": {
16127
+ "id": {
16128
+ "type": "string",
16129
+ "description": "The underlying resource id (emailId / talentId / candidateId / jobId)."
16130
+ },
16131
+ "tenantId": {
16132
+ "type": "string"
16133
+ },
16134
+ "status": {
16135
+ "type": "string"
16136
+ },
16137
+ "source": {
16138
+ "type": "string"
16139
+ },
16140
+ "created": {
16141
+ "type": "string"
16142
+ },
16143
+ "shortCode": {
16144
+ "type": "string"
16145
+ }
16146
+ },
16147
+ "additionalProperties": true
16148
+ }
16149
+ }
16150
+ }
15196
16151
  },
15197
16152
  "status": {
15198
16153
  "type": "string",
@@ -15317,7 +16272,7 @@
15317
16272
  },
15318
16273
  "pageAfter": {
15319
16274
  "type": "string",
15320
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
16275
+ "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."
15321
16276
  },
15322
16277
  "pageBefore": {
15323
16278
  "type": "string",
@@ -15590,7 +16545,7 @@
15590
16545
  },
15591
16546
  "pageAfter": {
15592
16547
  "type": "string",
15593
- "description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
16548
+ "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."
15594
16549
  },
15595
16550
  "pageBefore": {
15596
16551
  "type": "string",