From c3ce127ac9a0e5087f106aea54bd4d52f909bd69 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Tue, 11 Aug 2026 00:32:18 +0000 Subject: [PATCH] ## Ruby SDK Changes: * `kombo.ats.get_ats_notes()`: **Added** * `kombo.ats.create_candidate()`: * `request.body.remote_fields` **Changed** * `kombo.ats.create_application()`: * `request.body.remote_fields` **Changed** --- .speakeasy/gen.lock | 240 +++++++++++++----- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 12 +- Gemfile.lock | 2 +- README.md | 1 + RELEASES.md | 12 +- .../operations/getatsapplicationsrequest.md | 2 +- docs/models/operations/getatsnotesrequest.md | 17 ++ docs/models/operations/getatsnotesresponse.md | 11 + docs/models/shared/author.md | 12 + .../shared/getatsnotespositiveresponse.md | 9 + .../shared/getatsnotespositiveresponsedata.md | 9 + .../getatsnotespositiveresponseresult.md | 20 ++ docs/models/shared/name.md | 1 + .../postatscandidatesrequestbodybullhorn.md | 9 +- ...atscandidatesrequestbodypilogacandidate.md | 7 +- ...obsjobidapplicationsrequestbodybullhorn.md | 9 +- ...dapplicationsrequestbodypilogacandidate.md | 7 +- docs/sdks/ats/README.md | 56 +++- docs/sdks/general/README.md | 2 +- kombo.gemspec | 2 +- lib/kombo/ats.rb | 159 ++++++++++++ lib/kombo/general.rb | 2 +- lib/kombo/models/operations.rb | 2 + .../operations/getatsapplications_request.rb | 2 +- .../models/operations/getatsnotes_request.rb | 82 ++++++ .../models/operations/getatsnotes_request.rbi | 31 +++ .../models/operations/getatsnotes_response.rb | 56 ++++ .../operations/getatsnotes_response.rbi | 19 ++ lib/kombo/models/shared.rb | 4 + lib/kombo/models/shared/author.rb | 48 ++++ lib/kombo/models/shared/author.rbi | 21 ++ .../shared/getatsnotespositiveresponse.rb | 39 +++ .../shared/getatsnotespositiveresponse.rbi | 15 ++ .../getatsnotespositiveresponse_data.rb | 36 +++ .../getatsnotespositiveresponse_data.rbi | 15 ++ .../getatsnotespositiveresponse_result.rb | 84 ++++++ .../getatsnotespositiveresponse_result.rbi | 37 +++ lib/kombo/models/shared/name.rb | 1 + .../postatscandidatesrequestbody_bullhorn.rb | 8 +- .../postatscandidatesrequestbody_bullhorn.rbi | 2 + ...scandidatesrequestbody_piloga_candidate.rb | 9 +- ...candidatesrequestbody_piloga_candidate.rbi | 2 + ...bsjobidapplicationsrequestbody_bullhorn.rb | 8 +- ...sjobidapplicationsrequestbody_bullhorn.rbi | 2 + ...pplicationsrequestbody_piloga_candidate.rb | 9 +- ...plicationsrequestbody_piloga_candidate.rbi | 2 + lib/kombo/sdkconfiguration.rb | 6 +- lib/kombo/utils/retries.rb | 43 +++- 49 files changed, 1084 insertions(+), 102 deletions(-) create mode 100644 docs/models/operations/getatsnotesrequest.md create mode 100644 docs/models/operations/getatsnotesresponse.md create mode 100644 docs/models/shared/author.md create mode 100644 docs/models/shared/getatsnotespositiveresponse.md create mode 100644 docs/models/shared/getatsnotespositiveresponsedata.md create mode 100644 docs/models/shared/getatsnotespositiveresponseresult.md create mode 100644 lib/kombo/models/operations/getatsnotes_request.rb create mode 100644 lib/kombo/models/operations/getatsnotes_request.rbi create mode 100644 lib/kombo/models/operations/getatsnotes_response.rb create mode 100644 lib/kombo/models/operations/getatsnotes_response.rbi create mode 100644 lib/kombo/models/shared/author.rb create mode 100644 lib/kombo/models/shared/author.rbi create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse.rb create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse.rbi create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse_data.rb create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse_result.rb create mode 100644 lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 907cf2ab..e4a139dc 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: 2.0.0 id: a945ea15-b620-47b9-9868-c165c173bf88 management: - docChecksum: da87c0bff2b2c2419968fa39284dc718 + docChecksum: 045d3f9432784414152310e79ba300d4 docVersion: 1.0.0 - speakeasyVersion: 1.791.0 - generationVersion: 2.924.0 - releaseVersion: 1.2.5 - configChecksum: 85c64242982e837940439223e20bde56 + speakeasyVersion: 1.793.0 + generationVersion: 2.928.0 + releaseVersion: 1.2.6 + configChecksum: 91c6f41fa4821ff37df4f1a9108a3a13 repoURL: https://github.com/kombohq/ruby-sdk.git installationURL: https://github.com/kombohq/ruby-sdk published: true persistentEdits: - generation_id: 483169d6-d171-4b96-8b43-03b13f3a2aad - pristine_commit_hash: 46400bda64b62ffbc4282761e408adb7a234c240 - pristine_tree_hash: 441d101d3016a8164c0a26871516060c3cd5399b + generation_id: 8248b8ef-adaf-4a90-9429-60095abe34b5 + pristine_commit_hash: 27d67716eed79a561246b137d29190c214c60774 + pristine_tree_hash: 92bae7c4e4abebc8dde746874c82f92b628f6349 features: ruby: constsAndDefaults: 0.1.4 @@ -54,8 +54,8 @@ trackedFiles: pristine_git_object: b0ea40558f3ca80dcf7d30b159d34a1e5ab33440 Gemfile.lock: id: 21fb5836b499 - last_write_checksum: sha1:fc573c89abc478ff8930050fddcb9388ad4d260c - pristine_git_object: 9cc074e8e091b5c1cc24417667d65362fee32e86 + last_write_checksum: sha1:957dfda0a56d8a653c2781d7d2f6f97797b79cfb + pristine_git_object: 3b5bc6b76149edd6c2f11f5d782e8b7ed069831e Rakefile: id: 44b7fa1ba503 last_write_checksum: sha1:c572639efdae8c7b24141ee5c02d8f009e101ed8 @@ -126,8 +126,8 @@ trackedFiles: pristine_git_object: 6df2309e1c3f45320269c36446c80ac368b77285 docs/models/operations/getatsapplicationsrequest.md: id: b1609ebcb91d - last_write_checksum: sha1:075b179f7bb73db9455b5d4a2f94ec7ebf51364e - pristine_git_object: 518974c9a14330bcfe9bb6fd95fb78cf240d9e19 + last_write_checksum: sha1:24a2d6101cc5334c50c99f1cffc78ea691baf7b0 + pristine_git_object: da052e0eccba40744673cef621e8006434e0bf41 docs/models/operations/getatsapplicationsresponse.md: id: 9ec04a7afe66 last_write_checksum: sha1:377e87b8b5602e6e31a2fbc211cdb57f68b9ecab @@ -172,6 +172,14 @@ trackedFiles: id: 6f621740851c last_write_checksum: sha1:717603e3d461afc3b045a82e79d60cfe60d99198 pristine_git_object: 3bc0671bd5b344d3e6b0da70337e886200e69aeb + docs/models/operations/getatsnotesrequest.md: + id: 3426196532aa + last_write_checksum: sha1:1532fec08ce631c06819e68b86c900db8d1d6a5b + pristine_git_object: d95bccbc9cce88af9c26bcaadfa5eb678f860498 + docs/models/operations/getatsnotesresponse.md: + id: c54c04062921 + last_write_checksum: sha1:a3894575b3548ad5267566e186b53b3dd6bb3dc8 + pristine_git_object: 1248be04ccf1f0f6da7ee8160dbdbf26b96895ee docs/models/operations/getatsoffersrequest.md: id: 6b43bae3be30 last_write_checksum: sha1:a57246e81d3ce7ef0e8c23946b6e844d27c57bac @@ -632,6 +640,10 @@ trackedFiles: id: 10a715bdf38c last_write_checksum: sha1:ffee8a5df152525f5f154a502f3af07f2b62be97 pristine_git_object: bf7d59de18e2dbb5cfdc672080434322f8c9673b + docs/models/shared/author.md: + id: 710084ad12bb + last_write_checksum: sha1:08fa8fc09f454399ed3da5ae40b8ae7fea3c2fc9 + pristine_git_object: 35fd48902eb5cc45d7c20b21bb3b766a573b7129 docs/models/shared/bankaccount.md: id: 33bf0def5f28 last_write_checksum: sha1:099843a096dd8552506a58f0cd96c5d8d7b24419 @@ -1264,6 +1276,18 @@ trackedFiles: id: a90f6fba76f9 last_write_checksum: sha1:95d99fc991e4439ccdd614c02284ab2576bacb6d pristine_git_object: 4fe139bcb3cfb5f2647463531861d80613419072 + docs/models/shared/getatsnotespositiveresponse.md: + id: f0123268f4ea + last_write_checksum: sha1:57e0d97756ad970244dd7427c8469aabe73c970c + pristine_git_object: 251f42b5d0fb5e0aa2e04ec5ab0a12db528257ca + docs/models/shared/getatsnotespositiveresponsedata.md: + id: 85b1363399c7 + last_write_checksum: sha1:47743ee2f203dab96b4a6772dfbb053a7c83ef70 + pristine_git_object: bf8903d3bfc22653e7a360dea4e7826302a1744a + docs/models/shared/getatsnotespositiveresponseresult.md: + id: de91e2021b27 + last_write_checksum: sha1:0ce7846e8998e37767544980ee24507b87e66971 + pristine_git_object: 4382f59743331c5783507dddfcc80fa08a061a6d docs/models/shared/getatsofferspositiveresponse.md: id: 6406956aacb3 last_write_checksum: sha1:414f2dc2ec44f051054a92f18f0902f22a170e22 @@ -2106,8 +2130,8 @@ trackedFiles: pristine_git_object: 58d1e21a9c1429370493b8f4bb3c25d87fe9b26c docs/models/shared/name.md: id: bfbb7874446d - last_write_checksum: sha1:90773e590b0aa53ceb682eb32b026818e67800fb - pristine_git_object: 008e7c1f7cf9564006a6c80e3f3d5577bdcc3278 + last_write_checksum: sha1:128614951cb4a9dd41a82c784bfde1a8578a5755 + pristine_git_object: fc6ececaaf7094eb7799202ca54406c78a785de1 docs/models/shared/offer.md: id: 87c20251f010 last_write_checksum: sha1:cea54f0f3578e3dd864fed7c05b49a432baefcc7 @@ -2566,8 +2590,8 @@ trackedFiles: pristine_git_object: 18f36e775ffef72a221acf1f5e47101267bcae1b docs/models/shared/postatscandidatesrequestbodybullhorn.md: id: 3bcd43241426 - last_write_checksum: sha1:5a89b7399812742438124442097e6f52329de7c0 - pristine_git_object: 67db10db51520ce1645ccd3406bae78bfd1391b7 + last_write_checksum: sha1:0931e02637220cf99b695b7ed72f2211f19d05c9 + pristine_git_object: aebd54f2e962506cfb6ba6c8818f2a9c8b45e5d0 docs/models/shared/postatscandidatesrequestbodycandidate.md: id: ef185ffc7f0a last_write_checksum: sha1:d98e0d26aba70d8e8b814b55a5b4bb2fc3c53917 @@ -2726,8 +2750,8 @@ trackedFiles: pristine_git_object: 9a52c4f5f09b403541d7460fd6d8e4dff43bbc96 docs/models/shared/postatscandidatesrequestbodypilogacandidate.md: id: ecd7acf6efdf - last_write_checksum: sha1:9dfff4ee00434d9769404f0b3bf15a297c67d2ec - pristine_git_object: ca4b9fb7563a06512e6338d6aa932218163f87a1 + last_write_checksum: sha1:34e216646090c1b7fbaaaa60a272b2e6eb2a984f + pristine_git_object: 11a49de0f89a6abac67a86c6fe97572cfcb79758 docs/models/shared/postatscandidatesrequestbodypinpoint.md: id: 5e8fcb2e7fbb last_write_checksum: sha1:8e1f4b23ca7ce1f5f9bbe288e1d2f3b500ac4298 @@ -3154,8 +3178,8 @@ trackedFiles: pristine_git_object: bb947a20ed15af23fd3daf2346aa4f46fba91173 docs/models/shared/postatsjobsjobidapplicationsrequestbodybullhorn.md: id: cc3cb7a56a12 - last_write_checksum: sha1:37e7d0133e9efe152809e8db3ab4a9c4fe78d080 - pristine_git_object: da2a32fdbd0f658c235688d4ea09d70cd7a1991d + last_write_checksum: sha1:852d78873a345300150290463d8398ef6a57a45a + pristine_git_object: 3db553c793186daf52aa64f9aa132295a205c1b7 docs/models/shared/postatsjobsjobidapplicationsrequestbodycandidate.md: id: b41e8d784a07 last_write_checksum: sha1:752dda9943d77cb4298ed633aacbcfdecc943b93 @@ -3314,8 +3338,8 @@ trackedFiles: pristine_git_object: 91ce5fd9a0a31e7631b960479e486721566bfeb2 docs/models/shared/postatsjobsjobidapplicationsrequestbodypilogacandidate.md: id: ec8f56b4291f - last_write_checksum: sha1:281790f674088e83cdec9af422e5366753f42b82 - pristine_git_object: 5da3d81b9c60e09ce5caa08c9f353d6a4c2f07b6 + last_write_checksum: sha1:857b8c97a985b688ac4bcc40ce4f8accb5ae2b8c + pristine_git_object: 399a3b001f8470325ae41aa4862ef2420e6ef72a docs/models/shared/postatsjobsjobidapplicationsrequestbodypinpoint.md: id: 3219fce64c25 last_write_checksum: sha1:147ae3c91b2277e592a749427e2af7ea32e501f1 @@ -4226,24 +4250,24 @@ trackedFiles: pristine_git_object: 4ec47c439ee6c708a9e50cf19dbd45f2bed38bb3 docs/sdks/ats/README.md: id: 24fafa267f6c - last_write_checksum: sha1:fe903e208341c386066fd154e6dd3ba880bee163 - pristine_git_object: 7865708553de216d6bd420aee9386dc045afe414 + last_write_checksum: sha1:fc612edfc9a286578a1bee3bf8939edc6c28306f + pristine_git_object: 672dedecd47661e4f4c903bcf0aa6d5f5f668e12 docs/sdks/connect/README.md: id: 074a4658c86b last_write_checksum: sha1:5a99a354767ff47f77d4e16ae7669346bc3f5851 pristine_git_object: ea63e68d96e99d9fc55cc53805523eb487b62dd7 docs/sdks/general/README.md: id: ce0ada6fa2e1 - last_write_checksum: sha1:e61b228c018c7f9ba31cccec329a9e0bba6d8181 - pristine_git_object: 4167f844f9708fb84d0db3596c49cf0f8cf0f22a + last_write_checksum: sha1:f24e71831105dd1e23de3946734976c7ca86f939 + pristine_git_object: 9f5db68ddae27aba81605fd3071647750826f377 docs/sdks/hris/README.md: id: 0baa868a038c last_write_checksum: sha1:87d1167bd44b7353b9ebdedced15be45a85734dc pristine_git_object: 5083d2ba5fe09066617b232c52d785f38e20c30f kombo.gemspec: id: 476dd5dc2d31 - last_write_checksum: sha1:ccbb742a588412e293963e2d5dda9c894633ca9a - pristine_git_object: 73512c23f390b642a32f19b9de2f2aa19e95c128 + last_write_checksum: sha1:3a01171275eac2401d8c37e3803e446f7b6ce321 + pristine_git_object: cd9f528eb144e225ac2a3e9a5dc315efb0958288 lib/crystalline.rb: id: eca767cf937a last_write_checksum: sha1:b6ec0a2833f58ba9a6f07c9637fdca05e59006d3 @@ -4278,16 +4302,16 @@ trackedFiles: pristine_git_object: 9912b85ec8978cf1e3c6c237464cdc78577448b3 lib/kombo/ats.rb: id: de47f540d26c - last_write_checksum: sha1:30a9aae4145236db7b9dcd8a6289948d4d193374 - pristine_git_object: d89d63acd2c37c82b829678fc0f715cf7ce3406c + last_write_checksum: sha1:e767fcf99fe341aa319d207a34a37b3ce9626aa5 + pristine_git_object: 4c9bf674cc6203b4f55d078a7460737ff45e95bb lib/kombo/connect.rb: id: 915f4913d259 last_write_checksum: sha1:f79d6910c8375497c52ac5bd0c2599833456a253 pristine_git_object: 8f6448cc95e312ec494cf40001850f3214d3b395 lib/kombo/general.rb: id: b25b5d515a10 - last_write_checksum: sha1:2f5dd8fc2ba08ccb0db41f432cc740486628424e - pristine_git_object: e277ef19aaf25d41bf05d485595d738fa7914190 + last_write_checksum: sha1:a32bfbf47f958b6f919cfe063c116d55175ae44e + pristine_git_object: 37c0c92ef3b3e774c340e17a6e6c388eac2f8868 lib/kombo/hris.rb: id: 13c3ecc1e9af last_write_checksum: sha1:09e7bc0edc4c456f95923469378d13ba8050a5e1 @@ -4338,8 +4362,8 @@ trackedFiles: pristine_git_object: eca362fdd927309a031439a897aab5d45c03d509 lib/kombo/models/operations.rb: id: 0dabe81114b0 - last_write_checksum: sha1:fc0640892eda8a1f5d0b11ae8961328a382ab037 - pristine_git_object: 2661afcf32f59316fd405be87cdfc496f22d6b62 + last_write_checksum: sha1:d684a1365a39244a5ea19ce2fea407146a4a6902 + pristine_git_object: d6fb2ca5d5c56b547ed783f54a6f6b2916e7b280 lib/kombo/models/operations/deleteatscandidatescandidateidtags_request.rb: id: ae79d39fb2e8 last_write_checksum: sha1:ea4eef09846b81f0b867e27126e2a58309fdcf30 @@ -4422,8 +4446,8 @@ trackedFiles: pristine_git_object: 1335126f59ef0a7180ae3e8b2e5e1e734cb70998 lib/kombo/models/operations/getatsapplications_request.rb: id: 48abe3c3cda5 - last_write_checksum: sha1:3ee546a0a9ba3d2f836b507a21a7be2fc9d281c9 - pristine_git_object: 63e6977a45b6182bbdfe845b7cab3add1a132264 + last_write_checksum: sha1:ef3970b2b2983d7dec6ad51168c74268ae348077 + pristine_git_object: 197dcec1f3bdb1ec4278d78dfc61e931b05d12d3 lib/kombo/models/operations/getatsapplications_request.rbi: id: 459bae711699 last_write_checksum: sha1:23e66206464c815b1c3fb0259b3a205d9e32e1b5 @@ -4532,6 +4556,22 @@ trackedFiles: id: 4f35656299bd last_write_checksum: sha1:31453da101f9982fbdb98dd7faa251108b43f51a pristine_git_object: 68e26c7d77074fd7f85a4d65a1bb8b8ed0726299 + lib/kombo/models/operations/getatsnotes_request.rb: + id: 6837bed36554 + last_write_checksum: sha1:843ac18f11af5043c7fe47e3b4f4d4e52cf340ee + pristine_git_object: 61546bf1fde83f6a714081bb495e09231383e85f + lib/kombo/models/operations/getatsnotes_request.rbi: + id: ec0febd20141 + last_write_checksum: sha1:1a56e66e246426fc50e85bb49138d6dd737adf1c + pristine_git_object: b0a8edbf8f992288acfa08eb78133b9f2e7fc3c5 + lib/kombo/models/operations/getatsnotes_response.rb: + id: 99ee72a6c945 + last_write_checksum: sha1:f77272f6bf92e09a985d686fc57e49c2c4d6933f + pristine_git_object: c2a34a131847f2235dff495d824482219792867c + lib/kombo/models/operations/getatsnotes_response.rbi: + id: a7d8b321c88e + last_write_checksum: sha1:7faa6e4e18fe44073a1278c133810c0fba81c502 + pristine_git_object: 68380196d9263faeae97b676ba3fcc0bbc457107 lib/kombo/models/operations/getatsoffers_request.rb: id: 802568a36380 last_write_checksum: sha1:e9bc6100bcedf058aa94ece91cd05c244921eaf4 @@ -5302,8 +5342,8 @@ trackedFiles: pristine_git_object: 5db5c38680c5bd96726d6594f41b5646f4053832 lib/kombo/models/shared.rb: id: 243803bd4275 - last_write_checksum: sha1:e29b0db36c40dcae4ada1ee3b4681c6a821fd459 - pristine_git_object: 8c9a52e0b88b5c33a3f4801a2ee11cecefb5c66f + last_write_checksum: sha1:0c7c8b12d21cfc20e102deb926b4e847e2d158b3 + pristine_git_object: 3113c34ce422a97c901eba3d54bcd5e00cc6d516 lib/kombo/models/shared/a3innuvanomina.rb: id: 9fd5b4269e9a last_write_checksum: sha1:aa902ab1d9ad08d60bab27183578daae819e2614 @@ -5456,6 +5496,14 @@ trackedFiles: id: 8969275a3109 last_write_checksum: sha1:2e602c57b4f5e6e79199b3061e5d0691b5389b0e pristine_git_object: a775781771c274b23aa76d4aa211bddd25b7705d + lib/kombo/models/shared/author.rb: + id: b06c0c5d69a1 + last_write_checksum: sha1:4c9642606051b8524b94ca57ba74337860fd289d + pristine_git_object: 5a8c21ae2ea065edf1994d3d011fa50c2676fad5 + lib/kombo/models/shared/author.rbi: + id: c8a172deac2c + last_write_checksum: sha1:721e32bb9b5af40e4f3aabff3875b4006224b86b + pristine_git_object: 86c7a905912cd4f85805d8dc89d1a0dfd5040a27 lib/kombo/models/shared/bank_account.rb: id: cbddc021dd0c last_write_checksum: sha1:fdafc6cff915468b38def6c84443a478c515a1a7 @@ -6720,6 +6768,30 @@ trackedFiles: id: eb36bf94ddcc last_write_checksum: sha1:d1a68276e9bcdaa17448c09ef939f1a92f9e02a2 pristine_git_object: dbef6a158f012617ad8b69f9f8a405a981d9d970 + lib/kombo/models/shared/getatsnotespositiveresponse.rb: + id: 5b30afc9af6b + last_write_checksum: sha1:a4c760c0b7b7c480b0045dfcfd6a4ddef3914e6b + pristine_git_object: a24bbeebbcf4127c9355c8373c8bc32f101cf785 + lib/kombo/models/shared/getatsnotespositiveresponse.rbi: + id: 41f7e3a31856 + last_write_checksum: sha1:8f36df85cc4244f6813cba6b32f48afa65c9fce7 + pristine_git_object: 05bedaf9c8be49962661d218fa78f021c59de764 + lib/kombo/models/shared/getatsnotespositiveresponse_data.rb: + id: d79815dfa5a2 + last_write_checksum: sha1:697bd26a6a92dbf59cc3e8e033e2f95f06579ca2 + pristine_git_object: dc3895e055b83264fd1968ad91616ebb86fff9c5 + lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi: + id: 2a23c5131a90 + last_write_checksum: sha1:4d3733ea3f0d86d1232b5cedc4337b556952cb6d + pristine_git_object: 592a8ddb0c00945f29f21e5ea398f530812288c9 + lib/kombo/models/shared/getatsnotespositiveresponse_result.rb: + id: 97ae5e2ba975 + last_write_checksum: sha1:bf3a75a71ee1a3ac32ae3935e91b1b331faa9a87 + pristine_git_object: dd0d1299beb639204ee8d0b92fc78fb261b7364d + lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi: + id: 074e0548da43 + last_write_checksum: sha1:56e86efcc15bbbb8c850d6870d4bc2d89d49a611 + pristine_git_object: 04210c1d2ab8cebc5889c77ea53db6c347de3c2e lib/kombo/models/shared/getatsofferspositiveresponse.rb: id: 001e43ade0d8 last_write_checksum: sha1:e024501190d54dfe011d2d8eb3752af29838f78d @@ -8402,8 +8474,8 @@ trackedFiles: pristine_git_object: a5023fa2db093e48596a7e2decb2f966f07909e7 lib/kombo/models/shared/name.rb: id: 70047deb719d - last_write_checksum: sha1:374db43a1e7bafb2f69fc5105ca2396a954db27e - pristine_git_object: 5e69025c920754324f9a407f714ab17d6c8b5e69 + last_write_checksum: sha1:5f31d63ec314b05d9218ab400e5db13810402e1e + pristine_git_object: 868a98d550ac43636ed41fb8c9edc6330854c039 lib/kombo/models/shared/name.rbi: id: 42b088602335 last_write_checksum: sha1:269e15d7d41493ba578d91bbf5cc64adc55f775c @@ -9322,12 +9394,12 @@ trackedFiles: pristine_git_object: d4f77881b31f14f0bd4c1c33ccba6b80ff851795 lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb: id: b36f32dac5ec - last_write_checksum: sha1:dbd86f038420074fa7c4f79f312cff02f711062d - pristine_git_object: 0ae0a214a4e2d5b85f063069e6a488dc158cbc8a + last_write_checksum: sha1:edce5f2a59ada5e0a02e1a5f858402ec20f266ad + pristine_git_object: 351ea384f39b308f7829b8aa5725ea940dcf5dc2 lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi: id: c72037656bf7 - last_write_checksum: sha1:dbda8f2e7674e50d7d55693ad9bcb1f0febf8b8d - pristine_git_object: 95723a1a49beb48be7b05848ffc261ca86f2a87a + last_write_checksum: sha1:f6fce756bdd857f03261da18b79e78cc088f3c36 + pristine_git_object: a01a4a0a2a3fa5ee9fd61430bbd0866a49eee3ac lib/kombo/models/shared/postatscandidatesrequestbody_candidate.rb: id: 626455ee7b9d last_write_checksum: sha1:facc247fd9e63d5467c3568b70fa0eaa0e55d198 @@ -9642,12 +9714,12 @@ trackedFiles: pristine_git_object: baeac8ada797ed9207e7293ce709d6bf79484237 lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb: id: 2617401ac4da - last_write_checksum: sha1:199cc6e0c6f58a7837de44c593b7131db2fe2003 - pristine_git_object: a5bc12f03242f30b0f79ffc9c3a7e3c61b51fcaf + last_write_checksum: sha1:3e845a72a234a83476ee4143db170c64cf5a6dbc + pristine_git_object: 9c4e0b05f5950123d591385c97860e3364853119 lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi: id: aa9293108d8d - last_write_checksum: sha1:19a4e1ffab3f4659505715a89c791514fa5120e8 - pristine_git_object: fca6d47213defef211201147a1df2c0876bc5296 + last_write_checksum: sha1:235f963ec89db10786ba267614d7cc589f9fc4ac + pristine_git_object: c56c8aa0581c5ec801105193528666dc0e7bcf3f lib/kombo/models/shared/postatscandidatesrequestbody_pinpoint.rb: id: af9fe07a7018 last_write_checksum: sha1:7d72f464a1fcfc441c528a4566a36fa39216d8d3 @@ -10498,12 +10570,12 @@ trackedFiles: pristine_git_object: 1e3985a301bc729a23b31092f2fe042a92bb197d lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb: id: c8d58cb7f763 - last_write_checksum: sha1:293be6b647c7c3691d0bb7356222c57005ea0987 - pristine_git_object: b000251c63856381611560ff72629c6f373fead1 + last_write_checksum: sha1:4769f6264a321656d7670fcea11cf17e774e0bdc + pristine_git_object: 8af8adac339712471ff140fe1a97e691e072a26d lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi: id: ed115d047564 - last_write_checksum: sha1:5470622f3f6ab540812bbcec9f8fde92f23c2b34 - pristine_git_object: f34f714e039e71c5feb50361e3d3803d581d013d + last_write_checksum: sha1:5a60744d60a1aad998770e45f98662c3a6623ab2 + pristine_git_object: 060bd49065e39cc58ba5d8687690e848317785bd lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_candidate.rb: id: d5f7704ee0d3 last_write_checksum: sha1:6e8047dae6c278ddfa6fc070f6b71d0e726f78f7 @@ -10818,12 +10890,12 @@ trackedFiles: pristine_git_object: e4f5daf07457805589c53866686385ec7a1426be lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb: id: aa033b76ac31 - last_write_checksum: sha1:aea931a3914cbe835f5bb7b339b8d76b4643a070 - pristine_git_object: badce235a4546f76ead1b57e4685584a864f73bd + last_write_checksum: sha1:00b2a4dfb98a69419d3b213d62c7a778c3bbc02c + pristine_git_object: 1588eaf777425da28a9e5617ba307471d4e7ee7b lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi: id: ef4cc0eb1087 - last_write_checksum: sha1:3cfa591f118995bf2ef18567bafa145b67134f3b - pristine_git_object: 6e49f225babeff8331995a88b869d554523085bf + last_write_checksum: sha1:fe4c5a923e7cd5eca8ff160bd4a2fa909decb7f5 + pristine_git_object: 5bf79ac2e4715cd70c6ffd7851cb6911f30c289d lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_pinpoint.rb: id: ab6af7bcf9ff last_write_checksum: sha1:38f799706994104c81419a36eed8e6c342951c69 @@ -12646,8 +12718,8 @@ trackedFiles: pristine_git_object: cc0af5d0bc79da7ef48343408db80c1436d75ef9 lib/kombo/sdkconfiguration.rb: id: 576e58b2ad72 - last_write_checksum: sha1:b0b8cfa3acfcc6be1d7e825cc02111007671f2c0 - pristine_git_object: 1896edae2f859b0c0d387f9c67287b914e341fed + last_write_checksum: sha1:2f04d8667aaeb15c90113e555f32a5be3e736b65 + pristine_git_object: 5b0fcb92c9c65536f1eae4ef865d917f45556e02 lib/kombo/sdkconfiguration.rbi: id: d1d4becc3542 last_write_checksum: sha1:d6a79e38280d703264428e6158d6d796ba61d63f @@ -12670,8 +12742,8 @@ trackedFiles: pristine_git_object: 60b1632c1fe7366447be407af8a70053a921cb8c lib/kombo/utils/retries.rb: id: cc2c6893c0ca - last_write_checksum: sha1:fd275790351a873c293029bfaa175d7ab39e09ce - pristine_git_object: a5f6b78a247ac75e06cd0d995e1256ff6e5889cd + last_write_checksum: sha1:9d233f998cde2ad91df1323efc6a8f586bd0c1f4 + pristine_git_object: 43b76e48f0970f5156c964133a9782b23fdc92f9 lib/kombo/utils/security.rb: id: 28ce45224e5a last_write_checksum: sha1:7abfebe0d2870ac85b67d3efe1797ace2dedd124 @@ -15250,4 +15322,52 @@ examples: application/json: {"status": "success", "data": {"link": "https://hopeful-toothbrush.net"}} default: application/json: {"status": "error", "error": {"code": "PLATFORM.RATE_LIMIT_EXCEEDED", "title": null, "message": "", "log_url": "https://married-yin.org/"}} + GetAtsNotes: + speakeasy-default-get-ats-notes: + parameters: + query: + page_size: 100 + include_deleted: false + ignore_unsupported_filters: false + header: + X-Integration-Id: "workday:HWUTwvyx2wLoSUHphiWVrp28" + responses: + "200": + application/json: {"status": "success", "data": {"next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=", "results": [{"id": "H77fDF8uvEzGNPRubiz5DvQ7", "remote_id": "32", "candidate_id": "26vafvWSRmbhNcxJYqjCzuJg", "application_id": "H5daSm8e85Dmvmne3wLeCPhX", "author_id": "5J7L4b48wBfffYwek9Az9pkM", "title": "Screening call", "content_html": "Available from March, looking for a hybrid role in Berlin.", "is_private": true, "remote_created_at": "2022-08-07T14:01:29.196Z", "remote_updated_at": "2022-08-07T14:01:29.196Z", "changed_at": "2022-08-07T14:01:29.196Z", "remote_deleted_at": null, "author": {"id": "26vafvWSRmbhNcxJYqjCzuJg", "remote_id": "32", "first_name": "John", "last_name": "Doe", "email": "john.doe@kombo.dev"}}]}} + default: + application/json: {"status": "error", "error": {"code": "ATS.JOB_CLOSED", "title": "", "message": "", "log_url": "https://outlandish-brief.biz/"}} + example1: + parameters: + query: + page_size: 100 + include_deleted: false + ignore_unsupported_filters: false + header: + X-Integration-Id: "workday:HWUTwvyx2wLoSUHphiWVrp28" + responses: + "200": + application/json: {"status": "success", "data": {"next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=", "results": [{"id": "H77fDF8uvEzGNPRubiz5DvQ7", "remote_id": "32", "candidate_id": "26vafvWSRmbhNcxJYqjCzuJg", "application_id": "H5daSm8e85Dmvmne3wLeCPhX", "author_id": "5J7L4b48wBfffYwek9Az9pkM", "title": "Screening call", "content_html": "Available from March, looking for a hybrid role in Berlin.", "is_private": true, "remote_created_at": "2022-08-07T14:01:29.196Z", "remote_updated_at": "2022-08-07T14:01:29.196Z", "changed_at": "2022-08-07T14:01:29.196Z", "remote_deleted_at": null, "author": {"id": "26vafvWSRmbhNcxJYqjCzuJg", "remote_id": "32", "first_name": "John", "last_name": "Doe", "email": "john.doe@kombo.dev"}}]}} + Error Response: + parameters: + query: + page_size: 100 + include_deleted: false + ignore_unsupported_filters: false + header: + X-Integration-Id: "workday:HWUTwvyx2wLoSUHphiWVrp28" + responses: + default: + application/json: {"status": "error", "error": {"code": "INTEGRATION.MODEL_NOT_AVAILABLE", "title": "This data model isn't supported for the selected integration.", "message": "The \"employees\" model is not yet available for Greenhouse. Please reach out to Kombo if you need this functionality.", "log_url": "https://app.kombo.dev/my-prod/logs?interactionId=123456"}} + Minimal Error Response: + parameters: + query: + page_size: 100 + include_deleted: false + ignore_unsupported_filters: false + header: + X-Integration-Id: "workday:HWUTwvyx2wLoSUHphiWVrp28" + responses: + default: + application/json: {"status": "error", "error": {"code": null, "title": null, "message": "The message is always in the response.", "log_url": null}} examplesVersion: 1.0.2 +releaseNotes: "## Ruby SDK Changes:\n* `kombo.ats.get_ats_notes()`: **Added**\n* `kombo.ats.create_candidate()`: \n * `request.body.remote_fields` **Changed**\n* `kombo.ats.create_application()`: \n * `request.body.remote_fields` **Changed**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 6005041e..f3a511c3 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -31,7 +31,7 @@ generation: generateNewTests: true skipResponseBodyAssertions: false ruby: - version: 1.2.5 + version: 1.2.6 additionalDependencies: development: irb: "" diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index a90a10eb..6da89b86 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.791.0 +speakeasyVersion: 1.793.0 sources: kombo-prepared-spec: sourceNamespace: kombo-api - sourceRevisionDigest: sha256:eb1dc10690894387b28e95abdbb6fdabbf0487732d768fe517c531e939067667 - sourceBlobDigest: sha256:2a0870c417dba29d8989de5f0d60dc06dbd6418cd4f0da47c0a4491177d6aa3e + sourceRevisionDigest: sha256:854a327f8aec7e3c1aeab9f10147af163706b08cbf4a7d83371d69890d66e765 + sourceBlobDigest: sha256:a19ef6296c8b75862f7d553e501cbdac2c0bd98f3002ed81962384dbafd0cd25 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: kombo-ruby: source: kombo-prepared-spec sourceNamespace: kombo-api - sourceRevisionDigest: sha256:eb1dc10690894387b28e95abdbb6fdabbf0487732d768fe517c531e939067667 - sourceBlobDigest: sha256:2a0870c417dba29d8989de5f0d60dc06dbd6418cd4f0da47c0a4491177d6aa3e + sourceRevisionDigest: sha256:854a327f8aec7e3c1aeab9f10147af163706b08cbf4a7d83371d69890d66e765 + sourceBlobDigest: sha256:a19ef6296c8b75862f7d553e501cbdac2c0bd98f3002ed81962384dbafd0cd25 codeSamplesNamespace: kombo-api-python-ruby-code-samples - codeSamplesRevisionDigest: sha256:9ae0d19b613ec70ac72d723fcc803d1bc29a017906244afbd59e6bf62d047fbc + codeSamplesRevisionDigest: sha256:a48930d18a207fd4bee01d11c261ed39ea0e2f0afbec79c57501885675a1932f workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/Gemfile.lock b/Gemfile.lock index 9cc074e8..3b5bc6b7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - kombo (1.2.5) + kombo (1.2.6) base64 (>= 0.2.0, < 1.0) faraday (>= 2.14.3) faraday-multipart (~> 1.2.0) diff --git a/README.md b/README.md index 9811b652..4ecd36df 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,7 @@ s = ::Kombo::Kombo.new( * [get_offers](docs/sdks/ats/README.md#get_offers) - Get offers * [get_rejection_reasons](docs/sdks/ats/README.md#get_rejection_reasons) - Get rejection reasons * [get_interviews](docs/sdks/ats/README.md#get_interviews) - Get interviews +* [get_ats_notes](docs/sdks/ats/README.md#get_ats_notes) - Get notes * [import_tracked_application](docs/sdks/ats/README.md#import_tracked_application) - Import tracked application ### [Connect](docs/sdks/connect/README.md) diff --git a/RELEASES.md b/RELEASES.md index 7cfe4759..258e3c7d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -198,4 +198,14 @@ Based on: ### Generated - [ruby v1.2.5] . ### Releases -- [Ruby Gems v1.2.5] https://rubygems.org/gems/kombo/versions/1.2.5 - . \ No newline at end of file +- [Ruby Gems v1.2.5] https://rubygems.org/gems/kombo/versions/1.2.5 - . + +## 2026-08-11 00:29:48 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.793.0 (2.928.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [ruby v1.2.6] . +### Releases +- [Ruby Gems v1.2.6] https://rubygems.org/gems/kombo/versions/1.2.6 - . \ No newline at end of file diff --git a/docs/models/operations/getatsapplicationsrequest.md b/docs/models/operations/getatsapplicationsrequest.md index 518974c9..da052e0e 100644 --- a/docs/models/operations/getatsapplicationsrequest.md +++ b/docs/models/operations/getatsapplicationsrequest.md @@ -8,7 +8,7 @@ | `integration_id` | *T.nilable(::String)* | :heavy_minus_sign: | ID of the integration you want to interact with. | workday:HWUTwvyx2wLoSUHphiWVrp28 | | `cursor` | *T.nilable(::String)* | :heavy_minus_sign: | An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. | | | `page_size` | *T.nilable(::Integer)* | :heavy_minus_sign: | The number of results to return per page. Maximum is 250. | | -| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `candidate` \| n/a \| ✓ Yes \|
\| `candidate` → `tags` \| ✗ No \| ✗ No \|
\| `current_stage` \| n/a \| ✓ Yes \|
\| `job` \| ✗ No \| ✗ No \|
\| `interviews` \| ✓ Yes \| ✓ Yes \|
\| `offers` \| ✓ Yes \| ✓ Yes \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | +| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `candidate` \| n/a \| ✓ Yes \|
\| `candidate` → `tags` \| ✗ No \| ✗ No \|
\| `current_stage` \| ✗ No \| ✗ No \|
\| `job` \| ✗ No \| ✗ No \|
\| `interviews` \| ✓ Yes \| ✓ Yes \|
\| `offers` \| ✓ Yes \| ✓ Yes \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | | `include_deleted` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. | | | `ignore_unsupported_filters` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. | | | `ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. | | diff --git a/docs/models/operations/getatsnotesrequest.md b/docs/models/operations/getatsnotesrequest.md new file mode 100644 index 00000000..d95bccbc --- /dev/null +++ b/docs/models/operations/getatsnotesrequest.md @@ -0,0 +1,17 @@ +# GetAtsNotesRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `integration_id` | *T.nilable(::String)* | :heavy_minus_sign: | ID of the integration you want to interact with. | workday:HWUTwvyx2wLoSUHphiWVrp28 | +| `cursor` | *T.nilable(::String)* | :heavy_minus_sign: | An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. | | +| `page_size` | *T.nilable(::Integer)* | :heavy_minus_sign: | The number of results to return per page. Maximum is 250. | | +| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `author` \| ✗ No \| ✗ No \|
\| `application` \| ✗ No \| ✗ No \|
\| `candidate` \| ✗ No \| ✗ No \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | +| `include_deleted` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. | | +| `ignore_unsupported_filters` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. | | +| `ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. | | +| `remote_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of remote IDs. | | +| `candidate_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of candidate IDs. Prefer filtering by `candidate_ids` when you want to download the full context available for a candidate, across all their applications. | | +| `application_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of application IDs. Use filtering by `application_ids` only if you want the context available for specific applications. Results do not include notes that only link to the candidate, but not the application. | | \ No newline at end of file diff --git a/docs/models/operations/getatsnotesresponse.md b/docs/models/operations/getatsnotesresponse.md new file mode 100644 index 00000000..1248be04 --- /dev/null +++ b/docs/models/operations/getatsnotesresponse.md @@ -0,0 +1,11 @@ +# GetAtsNotesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `content_type` | *::String* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *::Integer* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [Faraday::Response](https://www.rubydoc.info/gems/faraday/Faraday/Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `get_ats_notes_positive_response` | [T.nilable(Models::Shared::GetAtsNotesPositiveResponse)](../../models/shared/getatsnotespositiveresponse.md) | :heavy_minus_sign: | GET /ats/notes Positive response | \ No newline at end of file diff --git a/docs/models/shared/author.md b/docs/models/shared/author.md new file mode 100644 index 00000000..35fd4890 --- /dev/null +++ b/docs/models/shared/author.md @@ -0,0 +1,12 @@ +# Author + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *::String* | :heavy_check_mark: | The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. | +| `remote_id` | *T.nilable(::String)* | :heavy_check_mark: | The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. | +| `first_name` | *T.nilable(::String)* | :heavy_check_mark: | First name of the user. | +| `last_name` | *T.nilable(::String)* | :heavy_check_mark: | Last name of the user. | +| `email` | *T.nilable(::String)* | :heavy_minus_sign: | Email of the user. If the email address is invalid, it will be set to null. | \ No newline at end of file diff --git a/docs/models/shared/getatsnotespositiveresponse.md b/docs/models/shared/getatsnotespositiveresponse.md new file mode 100644 index 00000000..251f42b5 --- /dev/null +++ b/docs/models/shared/getatsnotespositiveresponse.md @@ -0,0 +1,9 @@ +# GetAtsNotesPositiveResponse + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `status` | *::String* | :heavy_check_mark: | N/A | | +| `data` | [Models::Shared::GetAtsNotesPositiveResponseData](../../models/shared/getatsnotespositiveresponsedata.md) | :heavy_check_mark: | N/A | {
"next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
"results": [
{
"id": "H77fDF8uvEzGNPRubiz5DvQ7",
"remote_id": "32",
"candidate_id": "26vafvWSRmbhNcxJYqjCzuJg",
"application_id": "H5daSm8e85Dmvmne3wLeCPhX",
"author_id": "5J7L4b48wBfffYwek9Az9pkM",
"title": "Screening call",
"content_html": "Available from March, looking for a hybrid role in Berlin.",
"is_private": true,
"remote_created_at": "2022-08-07T14:01:29.196Z",
"remote_updated_at": "2022-08-07T14:01:29.196Z",
"remote_data": null,
"changed_at": "2022-08-07T14:01:29.196Z",
"remote_deleted_at": null,
"author": {
"id": "26vafvWSRmbhNcxJYqjCzuJg",
"remote_id": "32",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@kombo.dev"
}
}
]
} | \ No newline at end of file diff --git a/docs/models/shared/getatsnotespositiveresponsedata.md b/docs/models/shared/getatsnotespositiveresponsedata.md new file mode 100644 index 00000000..bf8903d3 --- /dev/null +++ b/docs/models/shared/getatsnotespositiveresponsedata.md @@ -0,0 +1,9 @@ +# GetAtsNotesPositiveResponseData + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `next_` | *T.nilable(::String)* | :heavy_check_mark: | Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. | +| `results` | T::Array<[Models::Shared::GetAtsNotesPositiveResponseResult](../../models/shared/getatsnotespositiveresponseresult.md)> | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/shared/getatsnotespositiveresponseresult.md b/docs/models/shared/getatsnotespositiveresponseresult.md new file mode 100644 index 00000000..4382f597 --- /dev/null +++ b/docs/models/shared/getatsnotespositiveresponseresult.md @@ -0,0 +1,20 @@ +# GetAtsNotesPositiveResponseResult + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *::String* | :heavy_check_mark: | The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. | | +| `remote_id` | *::String* | :heavy_check_mark: | The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. | | +| `candidate_id` | *::String* | :heavy_check_mark: | The Kombo ID of the candidate this note is about. The ID can be used to retrieve the candidate from the `get candidates` endpoint. | | +| `application_id` | *T.nilable(::String)* | :heavy_check_mark: | The Kombo ID of the application this note is about, when the note is tied to a specific application. Some systems attach notes to the candidate only, in which case this is `null`. | | +| `author_id` | *T.nilable(::String)* | :heavy_check_mark: | The Kombo ID of the user who authored the note. `null` for notes generated by the system rather than a specific user. The ID can be used to retrieve the user from the `get users` endpoint. | | +| `title` | *T.nilable(::String)* | :heavy_check_mark: | The note title from the ATS. | | +| `content_html` | *T.nilable(::String)* | :heavy_check_mark: | The note content from the ATS, passed through as-is. This may contain HTML markup when the source ATS stores it that way. | | +| `is_private` | *T.nilable(T::Boolean)* | :heavy_check_mark: | Whether the note requires elevated permissions to access in the source ATS (e.g. a `private`, `secret`, or `admin only` flag), meaning it is not visible to everyone with standard access to the candidate/application. `null` when the source ATS does not expose such a signal. | | +| `remote_created_at` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_check_mark: | The date and time the object was created in the remote system.

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | | +| `remote_updated_at` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_check_mark: | A timestamp retrieved from the remote system, describing when the resource was last updated.

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | | +| `changed_at` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_check_mark: | The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated.

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | | +| `remote_deleted_at` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_check_mark: | The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear.

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | | +| `author` | [T.nilable(Models::Shared::Author)](../../models/shared/author.md) | :heavy_check_mark: | N/A | {
"id": "26vafvWSRmbhNcxJYqjCzuJg",
"remote_id": "32",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@kombo.dev"
} | \ No newline at end of file diff --git a/docs/models/shared/name.md b/docs/models/shared/name.md index 008e7c1f..fc6ececa 100644 --- a/docs/models/shared/name.md +++ b/docs/models/shared/name.md @@ -44,6 +44,7 @@ value = Name::HRIS_LEGAL_ENTITIES | `ATS_OFFERS` | ats_offers | | `ATS_REJECTION_REASONS` | ats_rejection_reasons | | `ATS_ROLES` | ats_roles | +| `ATS_NOTES` | ats_notes | | `LMS_USERS` | lms_users | | `LMS_COURSE_PROVIDERS` | lms_course_providers | | `LMS_SKILLS` | lms_skills | diff --git a/docs/models/shared/postatscandidatesrequestbodybullhorn.md b/docs/models/shared/postatscandidatesrequestbodybullhorn.md index 67db10db..aebd54f2 100644 --- a/docs/models/shared/postatscandidatesrequestbodybullhorn.md +++ b/docs/models/shared/postatscandidatesrequestbodybullhorn.md @@ -5,7 +5,8 @@ Fields specific to Bullhorn. ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `candidate` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `Candidate` object. | -| `job_submission` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `JobSubmission` object. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `candidate` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `Candidate` object. | +| `job_submission` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `JobSubmission` object. | +| `existing_candidate_remote_id` | *T.nilable(::String)* | :heavy_minus_sign: | The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn. | \ No newline at end of file diff --git a/docs/models/shared/postatscandidatesrequestbodypilogacandidate.md b/docs/models/shared/postatscandidatesrequestbodypilogacandidate.md index ca4b9fb7..11a49de0 100644 --- a/docs/models/shared/postatscandidatesrequestbodypilogacandidate.md +++ b/docs/models/shared/postatscandidatesrequestbodypilogacandidate.md @@ -5,6 +5,7 @@ Additional candidate fields for P&I Loga that will be mapped to the application ## Fields -| Field | Type | Required | Description | -| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | -| `street` | *T.nilable(::String)* | :heavy_minus_sign: | The street address of the candidate. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `street` | *T.nilable(::String)* | :heavy_minus_sign: | The street address of the candidate. | +| `geburtsdatum` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD`

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | \ No newline at end of file diff --git a/docs/models/shared/postatsjobsjobidapplicationsrequestbodybullhorn.md b/docs/models/shared/postatsjobsjobidapplicationsrequestbodybullhorn.md index da2a32fd..3db553c7 100644 --- a/docs/models/shared/postatsjobsjobidapplicationsrequestbodybullhorn.md +++ b/docs/models/shared/postatsjobsjobidapplicationsrequestbodybullhorn.md @@ -5,7 +5,8 @@ Fields specific to Bullhorn. ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `candidate` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `Candidate` object. | -| `job_submission` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `JobSubmission` object. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `candidate` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `Candidate` object. | +| `job_submission` | T::Hash[Symbol, *::Object*] | :heavy_minus_sign: | Fields that we will pass through to Bullhorn's `JobSubmission` object. | +| `existing_candidate_remote_id` | *T.nilable(::String)* | :heavy_minus_sign: | The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn. | \ No newline at end of file diff --git a/docs/models/shared/postatsjobsjobidapplicationsrequestbodypilogacandidate.md b/docs/models/shared/postatsjobsjobidapplicationsrequestbodypilogacandidate.md index 5da3d81b..399a3b00 100644 --- a/docs/models/shared/postatsjobsjobidapplicationsrequestbodypilogacandidate.md +++ b/docs/models/shared/postatsjobsjobidapplicationsrequestbodypilogacandidate.md @@ -5,6 +5,7 @@ Additional candidate fields for P&I Loga that will be mapped to the application ## Fields -| Field | Type | Required | Description | -| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | -| `street` | *T.nilable(::String)* | :heavy_minus_sign: | The street address of the candidate. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `street` | *T.nilable(::String)* | :heavy_minus_sign: | The street address of the candidate. | +| `geburtsdatum` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD`

[](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) | \ No newline at end of file diff --git a/docs/sdks/ats/README.md b/docs/sdks/ats/README.md index 78657085..672dedec 100644 --- a/docs/sdks/ats/README.md +++ b/docs/sdks/ats/README.md @@ -27,6 +27,7 @@ * [get_offers](#get_offers) - Get offers * [get_rejection_reasons](#get_rejection_reasons) - Get rejection reasons * [get_interviews](#get_interviews) - Get interviews +* [get_ats_notes](#get_ats_notes) - Get notes * [import_tracked_application](#import_tracked_application) - Import tracked application ## get_applications @@ -70,7 +71,7 @@ end | `integration_id` | *T.nilable(::String)* | :heavy_minus_sign: | ID of the integration you want to interact with. | workday:HWUTwvyx2wLoSUHphiWVrp28 | | `cursor` | *T.nilable(::String)* | :heavy_minus_sign: | An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. | | | `page_size` | *T.nilable(::Integer)* | :heavy_minus_sign: | The number of results to return per page. Maximum is 250. | | -| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `candidate` \| n/a \| ✓ Yes \|
\| `candidate` → `tags` \| ✗ No \| ✗ No \|
\| `current_stage` \| n/a \| ✓ Yes \|
\| `job` \| ✗ No \| ✗ No \|
\| `interviews` \| ✓ Yes \| ✓ Yes \|
\| `offers` \| ✓ Yes \| ✓ Yes \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | +| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `candidate` \| n/a \| ✓ Yes \|
\| `candidate` → `tags` \| ✗ No \| ✗ No \|
\| `current_stage` \| ✗ No \| ✗ No \|
\| `job` \| ✗ No \| ✗ No \|
\| `interviews` \| ✓ Yes \| ✓ Yes \|
\| `offers` \| ✓ Yes \| ✓ Yes \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | | `include_deleted` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. | | | `ignore_unsupported_filters` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. | | | `ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. | | @@ -2207,6 +2208,59 @@ end | Models::Errors::KomboAtsError | default | application/json | | Errors::APIError | 4XX, 5XX | \*/\* | +## get_ats_notes + +Retrieve all notes. + +Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)` + +### Example Usage + + +```ruby +require 'kombo' + +Models = ::Kombo::Models +s = ::Kombo::Kombo.new( + integration_id: 'workday:HWUTwvyx2wLoSUHphiWVrp28', + security: Models::Shared::Security.new( + api_key: '' + ) +) +res = s.ats.get_ats_notes(page_size: 100, include_deleted: false, ignore_unsupported_filters: false) + +unless res.get_ats_notes_positive_response.nil? + # handle response +end + +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `integration_id` | *T.nilable(::String)* | :heavy_minus_sign: | ID of the integration you want to interact with. | workday:HWUTwvyx2wLoSUHphiWVrp28 | +| `cursor` | *T.nilable(::String)* | :heavy_minus_sign: | An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. | | +| `page_size` | *T.nilable(::Integer)* | :heavy_minus_sign: | The number of results to return per page. Maximum is 250. | | +| `updated_after` | [Date](https://ruby-doc.org/stdlib-2.6.1/libdoc/date/rdoc/Date.html) | :heavy_minus_sign: | Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged.

If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.

For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).

For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.

\| Path \| Added/Removed \| Linked Record \|
\| --- \| --- \| --- \|
\| `author` \| ✗ No \| ✗ No \|
\| `application` \| ✗ No \| ✗ No \|
\| `candidate` \| ✗ No \| ✗ No \|

_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ | | +| `include_deleted` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. | | +| `ignore_unsupported_filters` | *T.nilable(T::Boolean)* | :heavy_minus_sign: | When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. | | +| `ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. | | +| `remote_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of remote IDs. | | +| `candidate_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of candidate IDs. Prefer filtering by `candidate_ids` when you want to download the full context available for a candidate, across all their applications. | | +| `application_ids` | T::Array<*::String*> | :heavy_minus_sign: | Filter by a comma-separated list of application IDs. Use filtering by `application_ids` only if you want the context available for specific applications. Results do not include notes that only link to the candidate, but not the application. | | + +### Response + +**[T.nilable(Models::Operations::GetAtsNotesResponse)](../../models/operations/getatsnotesresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------------- | ----------------------------- | ----------------------------- | +| Models::Errors::KomboAtsError | default | application/json | +| Errors::APIError | 4XX, 5XX | \*/\* | + ## import_tracked_application Import tracked application diff --git a/docs/sdks/general/README.md b/docs/sdks/general/README.md index 4167f844..9f5db68d 100644 --- a/docs/sdks/general/README.md +++ b/docs/sdks/general/README.md @@ -237,7 +237,7 @@ To get started, please pick the relevant API (some tools provide multiple to due |HoorayHR|`hoorayhr/api`|[HoorayHR API](https://api.hoorayhr.io/documentation/). We automatically authenticate all requests and use `https://api.hoorayhr.io` as the base URL.| |HR Office|`hroffice/soap`|[HROffice SOAP API](https://api.hroffice.nl/HROfficeCoreService.asmx). We automatically authenticate all requests and wrap them in a SOAP envelope. Build the request `Body` with the raw XML parameters for your operation (e.g., `\1\`). Use `/` as your `path`. Set your `method` to `POST`. You need to specify the `api_options` object and set `operation_name` to the SOAP operation you want to call (e.g., `GetAllJobByLanguage`).| |HR WORKS|`hrworks/v2`|HRWorks's v2 [API](https://developers.hrworks.de/2.0/endpoints). We automatically authenticate all requests using the customer credentials.| -|HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g., https://`\{base_url\}`/ or https://`\{subdomain\}.hr4you.org`/).| +|HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g. `https://your-company.hr4you.org/` or a custom domain).| |Humaans|`humaans/api`|Humaans' [API](https://docs.humaans.io/api/). We automatically authenticate all requests using the API key and use `https://app.humaans.io/api` as the base URL.| |iCIMS|`icims/default`|[iCIMS Default API](https://developer-community.icims.com/). We automatically authenticate all requests and use `https://api.icims.com/customers/\{customer_id\}` as the base url.| |InRecruiting by Zucchetti|`inrecruiting/default`|[inRecruiting's v3 API](https://inrecruiting.intervieweb.it/api-docs/). We automatically authenticate all requests and use the customers domain as base URL| diff --git a/kombo.gemspec b/kombo.gemspec index 73512c23..cd9f528e 100644 --- a/kombo.gemspec +++ b/kombo.gemspec @@ -4,7 +4,7 @@ $LOAD_PATH.push File.expand_path('lib', __dir__) Gem::Specification.new do |s| s.name = 'kombo' - s.version = '1.2.5' + s.version = '1.2.6' s.platform = Gem::Platform::RUBY s.licenses = ['Apache-2.0'] s.summary = '' diff --git a/lib/kombo/ats.rb b/lib/kombo/ats.rb index d89d63ac..4c9bf674 100644 --- a/lib/kombo/ats.rb +++ b/lib/kombo/ats.rb @@ -3755,6 +3755,165 @@ def get_interviews(integration_id: nil, cursor: nil, page_size: nil, updated_aft end + sig { params(integration_id: T.nilable(::String), cursor: T.nilable(::String), page_size: T.nilable(::Integer), updated_after: T.nilable(::DateTime), include_deleted: T.nilable(T::Boolean), ignore_unsupported_filters: T.nilable(T::Boolean), ids: T.nilable(T::Array[::String]), remote_ids: T.nilable(T::Array[::String]), candidate_ids: T.nilable(T::Array[::String]), application_ids: T.nilable(T::Array[::String]), timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::GetAtsNotesResponse) } + def get_ats_notes(integration_id: nil, cursor: nil, page_size: nil, updated_after: nil, include_deleted: nil, ignore_unsupported_filters: nil, ids: nil, remote_ids: nil, candidate_ids: nil, application_ids: nil, timeout_ms: nil, http_headers: nil) + # get_ats_notes - Get notes + # Retrieve all notes. + # + # Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)` + request = Models::Operations::GetAtsNotesRequest.new( + integration_id: integration_id, + cursor: cursor, + page_size: page_size, + updated_after: updated_after, + include_deleted: include_deleted, + ignore_unsupported_filters: ignore_unsupported_filters, + ids: ids, + remote_ids: remote_ids, + candidate_ids: candidate_ids, + application_ids: application_ids + ) + url, params = @sdk_configuration.get_server_details + base_url = Utils.template_url(url, params) + url = "#{base_url}/ats/notes" + headers = Utils.get_headers(request, @sdk_configuration.globals) + headers = T.cast(headers, T::Hash[String, String]) + query_params = Utils.get_query_params(Models::Operations::GetAtsNotesRequest, request, nil, @sdk_configuration.globals) + headers['Accept'] = 'application/json' + headers['user-agent'] = @sdk_configuration.user_agent + + security = @sdk_configuration.security_source&.call + + timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil? + timeout ||= @sdk_configuration.timeout + + + connection = @sdk_configuration.client + + hook_ctx = SDKHooks::HookContext.new( + config: @sdk_configuration, + base_url: base_url, + oauth2_scopes: nil, + operation_id: 'GetAtsNotes', + security_source: @sdk_configuration.security_source + ) + + error = T.let(nil, T.nilable(StandardError)) + http_response = T.let(nil, T.nilable(Faraday::Response)) + + + begin + http_response = T.must(connection).get(url) do |req| + req.headers.merge!(headers) + req.options.timeout = timeout unless timeout.nil? + req.params = query_params + Utils.configure_request_security(req, security) + http_headers&.each do |key, value| + req.headers[key.to_s] = value + end + + @sdk_configuration.hooks.before_request( + hook_ctx: SDKHooks::BeforeRequestHookContext.new( + hook_ctx: hook_ctx + ), + request: req + ) + end + rescue StandardError => e + error = e + ensure + if http_response.nil? || Utils.error_status?(http_response.status) + http_response = @sdk_configuration.hooks.after_error( + error: error, + hook_ctx: SDKHooks::AfterErrorHookContext.new( + hook_ctx: hook_ctx + ), + response: http_response + ) + else + http_response = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: http_response + ) + end + + if http_response.nil? + raise error if !error.nil? + raise 'no response' + end + end + + content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream') + if Utils.match_status_code(http_response.status, ['200']) + if Utils.match_content_type(content_type, 'application/json') + http_response = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: http_response + ) + response_data = http_response.env.response_body + obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::GetAtsNotesPositiveResponse) + response = Models::Operations::GetAtsNotesResponse.new( + status_code: http_response.status, + content_type: content_type, + raw_response: http_response, + get_ats_notes_positive_response: T.unsafe(obj) + ) + sdk = self + + response.next_page = proc do + next_cursor = Janeway.enum_for('$.data.next', JSON.parse(response_data)).search + if next_cursor.nil? + next nil + else + next_cursor = next_cursor[0] + if next_cursor.nil? + next nil + end + end + + sdk.get_ats_notes( + integration_id: request.integration_id, + cursor: next_cursor, + page_size: request.page_size, + updated_after: request.updated_after, + include_deleted: request.include_deleted, + ignore_unsupported_filters: request.ignore_unsupported_filters, + ids: request.ids, + remote_ids: request.remote_ids, + candidate_ids: request.candidate_ids, + application_ids: request.application_ids, + http_headers: http_headers + ) + end + + + return response + else + raise ::Kombo::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received' + end + else + if Utils.match_content_type(content_type, 'application/json') + http_response = @sdk_configuration.hooks.after_success( + hook_ctx: SDKHooks::AfterSuccessHookContext.new( + hook_ctx: hook_ctx + ), + response: http_response + ) + response_data = http_response.env.response_body + obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::KomboAtsError) + obj.raw_response = http_response + raise obj + else + raise ::Kombo::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received' + end + end + end + + sig { params(body: Models::Shared::PostAtsImportTrackedApplicationRequestBody, integration_id: T.nilable(::String), timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::PostAtsImportTrackedApplicationResponse) } def import_tracked_application(body:, integration_id: nil, timeout_ms: nil, http_headers: nil) # import_tracked_application - Import tracked application diff --git a/lib/kombo/general.rb b/lib/kombo/general.rb index e277ef19..37c0c92e 100644 --- a/lib/kombo/general.rb +++ b/lib/kombo/general.rb @@ -390,7 +390,7 @@ def send_passthrough_request(body:, tool:, api:, integration_id: nil, timeout_ms # |HoorayHR|`hoorayhr/api`|[HoorayHR API](https://api.hoorayhr.io/documentation/). We automatically authenticate all requests and use `https://api.hoorayhr.io` as the base URL.| # |HR Office|`hroffice/soap`|[HROffice SOAP API](https://api.hroffice.nl/HROfficeCoreService.asmx). We automatically authenticate all requests and wrap them in a SOAP envelope. Build the request `Body` with the raw XML parameters for your operation (e.g., `\1\`). Use `/` as your `path`. Set your `method` to `POST`. You need to specify the `api_options` object and set `operation_name` to the SOAP operation you want to call (e.g., `GetAllJobByLanguage`).| # |HR WORKS|`hrworks/v2`|HRWorks's v2 [API](https://developers.hrworks.de/2.0/endpoints). We automatically authenticate all requests using the customer credentials.| - # |HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g., https://`\{base_url\}`/ or https://`\{subdomain\}.hr4you.org`/).| + # |HR4YOU|`hr4you/v2`|[HR4YOU's v2 API](https://apiprodemo.hr4you.org/api2/docs). We automatically authenticate all requests and use the customers provided base URL (e.g. `https://your-company.hr4you.org/` or a custom domain).| # |Humaans|`humaans/api`|Humaans' [API](https://docs.humaans.io/api/). We automatically authenticate all requests using the API key and use `https://app.humaans.io/api` as the base URL.| # |iCIMS|`icims/default`|[iCIMS Default API](https://developer-community.icims.com/). We automatically authenticate all requests and use `https://api.icims.com/customers/\{customer_id\}` as the base url.| # |InRecruiting by Zucchetti|`inrecruiting/default`|[inRecruiting's v3 API](https://inrecruiting.intervieweb.it/api-docs/). We automatically authenticate all requests and use the customers domain as base URL| diff --git a/lib/kombo/models/operations.rb b/lib/kombo/models/operations.rb index 2661afcf..d6fb2ca5 100644 --- a/lib/kombo/models/operations.rb +++ b/lib/kombo/models/operations.rb @@ -30,6 +30,8 @@ module Operations autoload :GetAtsInterviewsResponse, 'kombo/models/operations/getatsinterviews_response.rb' autoload :GetAtsJobsRequest, 'kombo/models/operations/getatsjobs_request.rb' autoload :GetAtsJobsResponse, 'kombo/models/operations/getatsjobs_response.rb' + autoload :GetAtsNotesRequest, 'kombo/models/operations/getatsnotes_request.rb' + autoload :GetAtsNotesResponse, 'kombo/models/operations/getatsnotes_response.rb' autoload :GetAtsOffersRequest, 'kombo/models/operations/getatsoffers_request.rb' autoload :GetAtsOffersResponse, 'kombo/models/operations/getatsoffers_response.rb' autoload :GetAtsRejectionReasonsRequest, 'kombo/models/operations/getatsrejectionreasons_request.rb' diff --git a/lib/kombo/models/operations/getatsapplications_request.rb b/lib/kombo/models/operations/getatsapplications_request.rb index 63e6977a..197dcec1 100644 --- a/lib/kombo/models/operations/getatsapplications_request.rb +++ b/lib/kombo/models/operations/getatsapplications_request.rb @@ -28,7 +28,7 @@ class GetAtsApplicationsRequest # | --- | --- | --- | # | `candidate` | n/a | ✓ Yes | # | `candidate` → `tags` | ✗ No | ✗ No | - # | `current_stage` | n/a | ✓ Yes | + # | `current_stage` | ✗ No | ✗ No | # | `job` | ✗ No | ✗ No | # | `interviews` | ✓ Yes | ✓ Yes | # | `offers` | ✓ Yes | ✓ Yes | diff --git a/lib/kombo/models/operations/getatsnotes_request.rb b/lib/kombo/models/operations/getatsnotes_request.rb new file mode 100644 index 00000000..61546bf1 --- /dev/null +++ b/lib/kombo/models/operations/getatsnotes_request.rb @@ -0,0 +1,82 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Operations + + class GetAtsNotesRequest + extend T::Sig + include Crystalline::MetadataFields + + # ID of the integration you want to interact with. + field :integration_id, Crystalline::Nilable.new(::String), { 'header': { 'field_name': 'X-Integration-Id', 'style': 'simple', 'explode': false } } + # An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. + field :cursor, Crystalline::Nilable.new(::String), { 'query_param': { 'field_name': 'cursor', 'style': 'form', 'explode': true } } + # Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record's own `changed_at` field remains unchanged. + # + # If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. + # + # For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). + # + # For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. + # + # | Path | Added/Removed | Linked Record | + # | --- | --- | --- | + # | `author` | ✗ No | ✗ No | + # | `application` | ✗ No | ✗ No | + # | `candidate` | ✗ No | ✗ No | + # + # _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._ + field :updated_after, Crystalline::Nilable.new(::DateTime), { 'query_param': { 'field_name': 'updated_after', 'style': 'form', 'explode': true } } + # Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. + field :ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'ids', 'style': 'form', 'explode': false } } + # Filter by a comma-separated list of remote IDs. + field :remote_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'remote_ids', 'style': 'form', 'explode': false } } + # Filter by a comma-separated list of candidate IDs. Prefer filtering by `candidate_ids` when you want to download the full context available for a candidate, across all their applications. + field :candidate_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'candidate_ids', 'style': 'form', 'explode': false } } + # Filter by a comma-separated list of application IDs. Use filtering by `application_ids` only if you want the context available for specific applications. Results do not include notes that only link to the candidate, but not the application. + field :application_ids, Crystalline::Nilable.new(Crystalline::Array.new(::String)), { 'query_param': { 'field_name': 'application_ids', 'style': 'form', 'explode': false } } + # The number of results to return per page. Maximum is 250. + field :page_size, Crystalline::Nilable.new(::Integer), { 'query_param': { 'field_name': 'page_size', 'style': 'form', 'explode': true } } + # By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. + field :include_deleted, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'query_param': { 'field_name': 'include_deleted', 'style': 'form', 'explode': true } } + # When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. + field :ignore_unsupported_filters, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'query_param': { 'field_name': 'ignore_unsupported_filters', 'style': 'form', 'explode': true } } + + sig { params(integration_id: T.nilable(::String), cursor: T.nilable(::String), updated_after: T.nilable(::DateTime), ids: T.nilable(T::Array[::String]), remote_ids: T.nilable(T::Array[::String]), candidate_ids: T.nilable(T::Array[::String]), application_ids: T.nilable(T::Array[::String]), page_size: T.nilable(::Integer), include_deleted: T.nilable(T::Boolean), ignore_unsupported_filters: T.nilable(T::Boolean)).void } + def initialize(integration_id: nil, cursor: nil, updated_after: nil, ids: nil, remote_ids: nil, candidate_ids: nil, application_ids: nil, page_size: 100, include_deleted: false, ignore_unsupported_filters: false) + @integration_id = integration_id + @cursor = cursor + @updated_after = updated_after + @ids = ids + @remote_ids = remote_ids + @candidate_ids = candidate_ids + @application_ids = application_ids + @page_size = page_size + @include_deleted = include_deleted + @ignore_unsupported_filters = ignore_unsupported_filters + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @integration_id == other.integration_id + return false unless @cursor == other.cursor + return false unless @updated_after == other.updated_after + return false unless @ids == other.ids + return false unless @remote_ids == other.remote_ids + return false unless @candidate_ids == other.candidate_ids + return false unless @application_ids == other.application_ids + return false unless @page_size == other.page_size + return false unless @include_deleted == other.include_deleted + return false unless @ignore_unsupported_filters == other.ignore_unsupported_filters + true + end + end + end + end +end diff --git a/lib/kombo/models/operations/getatsnotes_request.rbi b/lib/kombo/models/operations/getatsnotes_request.rbi new file mode 100644 index 00000000..b0a8edbf --- /dev/null +++ b/lib/kombo/models/operations/getatsnotes_request.rbi @@ -0,0 +1,31 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Operations::GetAtsNotesRequest + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Operations::GetAtsNotesRequest + def integration_id(); end + def integration_id=(str_); end + def cursor(); end + def cursor=(str_); end + def updated_after(); end + def updated_after=(str_); end + def ids(); end + def ids=(str_); end + def remote_ids(); end + def remote_ids=(str_); end + def candidate_ids(); end + def candidate_ids=(str_); end + def application_ids(); end + def application_ids=(str_); end + def page_size(); end + def page_size=(str_); end + def include_deleted(); end + def include_deleted=(str_); end + def ignore_unsupported_filters(); end + def ignore_unsupported_filters=(str_); end +end diff --git a/lib/kombo/models/operations/getatsnotes_response.rb b/lib/kombo/models/operations/getatsnotes_response.rb new file mode 100644 index 00000000..c2a34a13 --- /dev/null +++ b/lib/kombo/models/operations/getatsnotes_response.rb @@ -0,0 +1,56 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Operations + + class GetAtsNotesResponse + extend T::Sig + include Crystalline::MetadataFields + sig { returns(T.proc.returns(T.nilable(GetAtsNotesResponse))) } + attr_accessor :next_page + + # HTTP response content type for this operation + field :content_type, ::String + # HTTP response status code for this operation + field :status_code, ::Integer + # Raw HTTP response; suitable for custom response parsing + field :raw_response, ::Faraday::Response + # GET /ats/notes Positive response + field :get_ats_notes_positive_response, Crystalline::Nilable.new(Models::Shared::GetAtsNotesPositiveResponse) + + sig { params(content_type: ::String, status_code: ::Integer, raw_response: ::Faraday::Response, get_ats_notes_positive_response: T.nilable(Models::Shared::GetAtsNotesPositiveResponse)).void } + def initialize(content_type:, status_code:, raw_response:, get_ats_notes_positive_response: nil) + @content_type = content_type + @status_code = status_code + @raw_response = raw_response + @get_ats_notes_positive_response = get_ats_notes_positive_response + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @content_type == other.content_type + return false unless @status_code == other.status_code + return false unless @raw_response == other.raw_response + return false unless @get_ats_notes_positive_response == other.get_ats_notes_positive_response + true + end + + def each + page = self + loop do + yield page + next_page = page.next_page.call if page.next_page + break if next_page.nil? + page = T.must(next_page) + end + end + end + end + end +end diff --git a/lib/kombo/models/operations/getatsnotes_response.rbi b/lib/kombo/models/operations/getatsnotes_response.rbi new file mode 100644 index 00000000..68380196 --- /dev/null +++ b/lib/kombo/models/operations/getatsnotes_response.rbi @@ -0,0 +1,19 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Operations::GetAtsNotesResponse + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Operations::GetAtsNotesResponse + def content_type(); end + def content_type=(str_); end + def status_code(); end + def status_code=(str_); end + def raw_response(); end + def raw_response=(str_); end + def get_ats_notes_positive_response(); end + def get_ats_notes_positive_response=(str_); end +end diff --git a/lib/kombo/models/shared.rb b/lib/kombo/models/shared.rb index 8c9a52e0..3113c34c 100644 --- a/lib/kombo/models/shared.rb +++ b/lib/kombo/models/shared.rb @@ -144,6 +144,9 @@ module Shared autoload :GetAtsJobsPositiveResponseStatus, 'kombo/models/shared/getatsjobspositiveresponse_status.rb' autoload :GetAtsJobsPositiveResponseUnifiedType, 'kombo/models/shared/getatsjobspositiveresponse_unified_type.rb' autoload :GetAtsJobsPositiveResponseVisibility, 'kombo/models/shared/getatsjobspositiveresponse_visibility.rb' + autoload :GetAtsNotesPositiveResponse, 'kombo/models/shared/getatsnotespositiveresponse.rb' + autoload :GetAtsNotesPositiveResponseData, 'kombo/models/shared/getatsnotespositiveresponse_data.rb' + autoload :GetAtsNotesPositiveResponseResult, 'kombo/models/shared/getatsnotespositiveresponse_result.rb' autoload :GetAtsOffersPositiveResponse, 'kombo/models/shared/getatsofferspositiveresponse.rb' autoload :GetAtsOffersPositiveResponseApplication, 'kombo/models/shared/getatsofferspositiveresponse_application.rb' autoload :GetAtsOffersPositiveResponseCandidate, 'kombo/models/shared/getatsofferspositiveresponse_candidate.rb' @@ -811,6 +814,7 @@ module Shared autoload :AttributeSubResult, 'kombo/models/shared/attribute_subresult.rb' autoload :AttributeText, 'kombo/models/shared/attribute_text.rb' autoload :AttributeStatus, 'kombo/models/shared/attribute_status.rb' + autoload :Author, 'kombo/models/shared/author.rb' autoload :BankAccount, 'kombo/models/shared/bank_account.rb' autoload :BenefitTypeId, 'kombo/models/shared/benefit_type_id.rb' autoload :Break, 'kombo/models/shared/break_.rb' diff --git a/lib/kombo/models/shared/author.rb b/lib/kombo/models/shared/author.rb new file mode 100644 index 00000000..5a8c21ae --- /dev/null +++ b/lib/kombo/models/shared/author.rb @@ -0,0 +1,48 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Shared + + class Author + extend T::Sig + include Crystalline::MetadataFields + + # The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. + field :id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('id'), required: true } } + # The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. + field :remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_id'), required: true } } + # First name of the user. + field :first_name, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('first_name'), required: true } } + # Last name of the user. + field :last_name, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('last_name'), required: true } } + # Email of the user. If the email address is invalid, it will be set to null. + field :email, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('email') } } + + sig { params(id: ::String, remote_id: T.nilable(::String), first_name: T.nilable(::String), last_name: T.nilable(::String), email: T.nilable(::String)).void } + def initialize(id:, remote_id: nil, first_name: nil, last_name: nil, email: nil) + @id = id + @remote_id = remote_id + @first_name = first_name + @last_name = last_name + @email = email + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @id == other.id + return false unless @remote_id == other.remote_id + return false unless @first_name == other.first_name + return false unless @last_name == other.last_name + return false unless @email == other.email + true + end + end + end + end +end diff --git a/lib/kombo/models/shared/author.rbi b/lib/kombo/models/shared/author.rbi new file mode 100644 index 00000000..86c7a905 --- /dev/null +++ b/lib/kombo/models/shared/author.rbi @@ -0,0 +1,21 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Shared::Author + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Shared::Author + def id(); end + def id=(str_); end + def remote_id(); end + def remote_id=(str_); end + def first_name(); end + def first_name=(str_); end + def last_name(); end + def last_name=(str_); end + def email(); end + def email=(str_); end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse.rb b/lib/kombo/models/shared/getatsnotespositiveresponse.rb new file mode 100644 index 00000000..a24bbeeb --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse.rb @@ -0,0 +1,39 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Shared + + class GetAtsNotesPositiveResponse + extend T::Sig + include Crystalline::MetadataFields + + + field :data, Models::Shared::GetAtsNotesPositiveResponseData, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('data'), required: true } } + + field :status, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('status'), required: true } } + + sig { params(data: Models::Shared::GetAtsNotesPositiveResponseData, status: ::String).void } + def initialize(data:, status: 'success') + @data = data + unless status == 'success' + raise ArgumentError, 'Invalid value for status' + end + @status = 'success' + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @data == other.data + return false unless @status == other.status + true + end + end + end + end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse.rbi b/lib/kombo/models/shared/getatsnotespositiveresponse.rbi new file mode 100644 index 00000000..05bedaf9 --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse.rbi @@ -0,0 +1,15 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponse + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponse + def data(); end + def data=(str_); end + def status(); end + def status=(str_); end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse_data.rb b/lib/kombo/models/shared/getatsnotespositiveresponse_data.rb new file mode 100644 index 00000000..dc3895e0 --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse_data.rb @@ -0,0 +1,36 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Shared + + class GetAtsNotesPositiveResponseData + extend T::Sig + include Crystalline::MetadataFields + + + field :results, Crystalline::Array.new(Models::Shared::GetAtsNotesPositiveResponseResult), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('results'), required: true } } + # Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. + field :next_, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('next'), required: true } } + + sig { params(results: T::Array[Models::Shared::GetAtsNotesPositiveResponseResult], next_: T.nilable(::String)).void } + def initialize(results:, next_: nil) + @results = results + @next_ = next_ + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @results == other.results + return false unless @next_ == other.next_ + true + end + end + end + end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi b/lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi new file mode 100644 index 00000000..592a8ddb --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse_data.rbi @@ -0,0 +1,15 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponseData + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponseData + def results(); end + def results=(str_); end + def next_(); end + def next_=(str_); end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse_result.rb b/lib/kombo/models/shared/getatsnotespositiveresponse_result.rb new file mode 100644 index 00000000..dd0d1299 --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse_result.rb @@ -0,0 +1,84 @@ +# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + +# typed: true +# frozen_string_literal: true + + +module Kombo + module Models + module Shared + + class GetAtsNotesPositiveResponseResult + extend T::Sig + include Crystalline::MetadataFields + + # The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. + field :id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('id'), required: true } } + # The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. + field :remote_id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_id'), required: true } } + # The Kombo ID of the candidate this note is about. The ID can be used to retrieve the candidate from the `get candidates` endpoint. + field :candidate_id, ::String, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate_id'), required: true } } + # The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :changed_at, ::DateTime, { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('changed_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } } + # The Kombo ID of the application this note is about, when the note is tied to a specific application. Some systems attach notes to the candidate only, in which case this is `null`. + field :application_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('application_id'), required: true } } + # The Kombo ID of the user who authored the note. `null` for notes generated by the system rather than a specific user. The ID can be used to retrieve the user from the `get users` endpoint. + field :author_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('author_id'), required: true } } + # The note title from the ATS. + field :title, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('title'), required: true } } + # The note content from the ATS, passed through as-is. This may contain HTML markup when the source ATS stores it that way. + field :content_html, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('content_html'), required: true } } + # Whether the note requires elevated permissions to access in the source ATS (e.g. a `private`, `secret`, or `admin only` flag), meaning it is not visible to everyone with standard access to the candidate/application. `null` when the source ATS does not expose such a signal. + field :is_private, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('is_private'), required: true } } + # The date and time the object was created in the remote system. + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :remote_created_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_created_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } } + # A timestamp retrieved from the remote system, describing when the resource was last updated. + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :remote_updated_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_updated_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } } + # The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :remote_deleted_at, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('remote_deleted_at'), required: true, 'decoder': ::Kombo::Utils.datetime_from_iso_format(false) } } + + field :author, Crystalline::Nilable.new(Models::Shared::Author), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('author'), required: true } } + + sig { params(id: ::String, remote_id: ::String, candidate_id: ::String, changed_at: ::DateTime, application_id: T.nilable(::String), author_id: T.nilable(::String), title: T.nilable(::String), content_html: T.nilable(::String), is_private: T.nilable(T::Boolean), remote_created_at: T.nilable(::DateTime), remote_updated_at: T.nilable(::DateTime), remote_deleted_at: T.nilable(::DateTime), author: T.nilable(Models::Shared::Author)).void } + def initialize(id:, remote_id:, candidate_id:, changed_at:, application_id: nil, author_id: nil, title: nil, content_html: nil, is_private: nil, remote_created_at: nil, remote_updated_at: nil, remote_deleted_at: nil, author: nil) + @id = id + @remote_id = remote_id + @candidate_id = candidate_id + @changed_at = changed_at + @application_id = application_id + @author_id = author_id + @title = title + @content_html = content_html + @is_private = is_private + @remote_created_at = remote_created_at + @remote_updated_at = remote_updated_at + @remote_deleted_at = remote_deleted_at + @author = author + end + + sig { params(other: T.untyped).returns(T::Boolean) } + def ==(other) + return false unless other.is_a? self.class + return false unless @id == other.id + return false unless @remote_id == other.remote_id + return false unless @candidate_id == other.candidate_id + return false unless @changed_at == other.changed_at + return false unless @application_id == other.application_id + return false unless @author_id == other.author_id + return false unless @title == other.title + return false unless @content_html == other.content_html + return false unless @is_private == other.is_private + return false unless @remote_created_at == other.remote_created_at + return false unless @remote_updated_at == other.remote_updated_at + return false unless @remote_deleted_at == other.remote_deleted_at + return false unless @author == other.author + true + end + end + end + end +end diff --git a/lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi b/lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi new file mode 100644 index 00000000..04210c1d --- /dev/null +++ b/lib/kombo/models/shared/getatsnotespositiveresponse_result.rbi @@ -0,0 +1,37 @@ +# typed: true +# frozen_string_literal: true + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponseResult + extend ::Crystalline::MetadataFields::ClassMethods +end + + +class Kombo::Models::Shared::GetAtsNotesPositiveResponseResult + def id(); end + def id=(str_); end + def remote_id(); end + def remote_id=(str_); end + def candidate_id(); end + def candidate_id=(str_); end + def changed_at(); end + def changed_at=(str_); end + def application_id(); end + def application_id=(str_); end + def author_id(); end + def author_id=(str_); end + def title(); end + def title=(str_); end + def content_html(); end + def content_html=(str_); end + def is_private(); end + def is_private=(str_); end + def remote_created_at(); end + def remote_created_at=(str_); end + def remote_updated_at(); end + def remote_updated_at=(str_); end + def remote_deleted_at(); end + def remote_deleted_at=(str_); end + def author(); end + def author=(str_); end +end diff --git a/lib/kombo/models/shared/name.rb b/lib/kombo/models/shared/name.rb index 5e69025c..868a98d5 100644 --- a/lib/kombo/models/shared/name.rb +++ b/lib/kombo/models/shared/name.rb @@ -39,6 +39,7 @@ class Name < T::Enum ATS_OFFERS = new('ats_offers') ATS_REJECTION_REASONS = new('ats_rejection_reasons') ATS_ROLES = new('ats_roles') + ATS_NOTES = new('ats_notes') LMS_USERS = new('lms_users') LMS_COURSE_PROVIDERS = new('lms_course_providers') LMS_SKILLS = new('lms_skills') diff --git a/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb b/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb index 0ae0a214..351ea384 100644 --- a/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb +++ b/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rb @@ -16,11 +16,14 @@ class PostAtsCandidatesRequestBodyBullhorn field :candidate, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate') } } # Fields that we will pass through to Bullhorn's `JobSubmission` object. field :job_submission, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('job_submission') } } + # The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn. + field :existing_candidate_remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('existing_candidate_remote_id') } } - sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object])).void } - def initialize(candidate: nil, job_submission: nil) + sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object]), existing_candidate_remote_id: T.nilable(::String)).void } + def initialize(candidate: nil, job_submission: nil, existing_candidate_remote_id: nil) @candidate = candidate @job_submission = job_submission + @existing_candidate_remote_id = existing_candidate_remote_id end sig { params(other: T.untyped).returns(T::Boolean) } @@ -28,6 +31,7 @@ def ==(other) return false unless other.is_a? self.class return false unless @candidate == other.candidate return false unless @job_submission == other.job_submission + return false unless @existing_candidate_remote_id == other.existing_candidate_remote_id true end end diff --git a/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi b/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi index 95723a1a..a01a4a0a 100644 --- a/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi +++ b/lib/kombo/models/shared/postatscandidatesrequestbody_bullhorn.rbi @@ -12,4 +12,6 @@ class Kombo::Models::Shared::PostAtsCandidatesRequestBodyBullhorn def candidate=(str_); end def job_submission(); end def job_submission=(str_); end + def existing_candidate_remote_id(); end + def existing_candidate_remote_id=(str_); end end diff --git a/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb b/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb index a5bc12f0..9c4e0b05 100644 --- a/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb +++ b/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rb @@ -14,16 +14,21 @@ class PostAtsCandidatesRequestBodyPilogaCandidate # The street address of the candidate. field :street, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('street') } } + # The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD` + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :geburtsdatum, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('geburtsdatum'), 'decoder': ::Kombo::Utils.datetime_from_iso_format(true) } } - sig { params(street: T.nilable(::String)).void } - def initialize(street: nil) + sig { params(street: T.nilable(::String), geburtsdatum: T.nilable(::DateTime)).void } + def initialize(street: nil, geburtsdatum: nil) @street = street + @geburtsdatum = geburtsdatum end sig { params(other: T.untyped).returns(T::Boolean) } def ==(other) return false unless other.is_a? self.class return false unless @street == other.street + return false unless @geburtsdatum == other.geburtsdatum true end end diff --git a/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi b/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi index fca6d472..c56c8aa0 100644 --- a/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi +++ b/lib/kombo/models/shared/postatscandidatesrequestbody_piloga_candidate.rbi @@ -10,4 +10,6 @@ end class Kombo::Models::Shared::PostAtsCandidatesRequestBodyPilogaCandidate def street(); end def street=(str_); end + def geburtsdatum(); end + def geburtsdatum=(str_); end end diff --git a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb index b000251c..8af8adac 100644 --- a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb +++ b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rb @@ -16,11 +16,14 @@ class PostAtsJobsJobIdApplicationsRequestBodyBullhorn field :candidate, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('candidate') } } # Fields that we will pass through to Bullhorn's `JobSubmission` object. field :job_submission, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::Object)), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('job_submission') } } + # The remote ID of the Bullhorn `Candidate` the application should be filed on. When set, we skip Bullhorn's duplicate detection and use exactly this candidate, which lets you pick the right record when several candidates share an email address or phone number. The request fails if the candidate does not exist (or was deleted) in Bullhorn. + field :existing_candidate_remote_id, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('existing_candidate_remote_id') } } - sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object])).void } - def initialize(candidate: nil, job_submission: nil) + sig { params(candidate: T.nilable(T::Hash[Symbol, ::Object]), job_submission: T.nilable(T::Hash[Symbol, ::Object]), existing_candidate_remote_id: T.nilable(::String)).void } + def initialize(candidate: nil, job_submission: nil, existing_candidate_remote_id: nil) @candidate = candidate @job_submission = job_submission + @existing_candidate_remote_id = existing_candidate_remote_id end sig { params(other: T.untyped).returns(T::Boolean) } @@ -28,6 +31,7 @@ def ==(other) return false unless other.is_a? self.class return false unless @candidate == other.candidate return false unless @job_submission == other.job_submission + return false unless @existing_candidate_remote_id == other.existing_candidate_remote_id true end end diff --git a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi index f34f714e..060bd490 100644 --- a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi +++ b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_bullhorn.rbi @@ -12,4 +12,6 @@ class Kombo::Models::Shared::PostAtsJobsJobIdApplicationsRequestBodyBullhorn def candidate=(str_); end def job_submission(); end def job_submission=(str_); end + def existing_candidate_remote_id(); end + def existing_candidate_remote_id=(str_); end end diff --git a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb index badce235..1588eaf7 100644 --- a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb +++ b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rb @@ -14,16 +14,21 @@ class PostAtsJobsJobIdApplicationsRequestBodyPilogaCandidate # The street address of the candidate. field :street, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('street') } } + # The birth date of the candidate, written into the "Geburtsdatum" field of the application form. Format: `YYYY-MM-DD` + # https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString + field :geburtsdatum, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Kombo::Utils.field_name('geburtsdatum'), 'decoder': ::Kombo::Utils.datetime_from_iso_format(true) } } - sig { params(street: T.nilable(::String)).void } - def initialize(street: nil) + sig { params(street: T.nilable(::String), geburtsdatum: T.nilable(::DateTime)).void } + def initialize(street: nil, geburtsdatum: nil) @street = street + @geburtsdatum = geburtsdatum end sig { params(other: T.untyped).returns(T::Boolean) } def ==(other) return false unless other.is_a? self.class return false unless @street == other.street + return false unless @geburtsdatum == other.geburtsdatum true end end diff --git a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi index 6e49f225..5bf79ac2 100644 --- a/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi +++ b/lib/kombo/models/shared/postatsjobsjobidapplicationsrequestbody_piloga_candidate.rbi @@ -10,4 +10,6 @@ end class Kombo::Models::Shared::PostAtsJobsJobIdApplicationsRequestBodyPilogaCandidate def street(); end def street=(str_); end + def geburtsdatum(); end + def geburtsdatum=(str_); end end diff --git a/lib/kombo/sdkconfiguration.rb b/lib/kombo/sdkconfiguration.rb index 1896edae..5b0fcb92 100644 --- a/lib/kombo/sdkconfiguration.rb +++ b/lib/kombo/sdkconfiguration.rb @@ -97,9 +97,9 @@ def initialize(client, hooks, retry_config, timeout_ms, security, security_sourc @globals = globals.nil? ? {} : globals @language = 'ruby' @openapi_doc_version = '1.0.0' - @sdk_version = '1.2.5' - @gen_version = '2.924.0' - @user_agent = 'speakeasy-sdk/ruby 1.2.5 2.924.0 1.0.0 kombo' + @sdk_version = '1.2.6' + @gen_version = '2.928.0' + @user_agent = 'speakeasy-sdk/ruby 1.2.6 2.928.0 1.0.0 kombo' end sig { returns([String, T::Hash[Symbol, String]]) } diff --git a/lib/kombo/utils/retries.rb b/lib/kombo/utils/retries.rb index a5f6b78a..43b76e48 100644 --- a/lib/kombo/utils/retries.rb +++ b/lib/kombo/utils/retries.rb @@ -4,6 +4,7 @@ # frozen_string_literal: true require 'faraday/retry' +require 'time' require 'sorbet-runtime' module Kombo @@ -87,12 +88,50 @@ def to_faraday_retry_options(initial_time:) retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time } end - retry_options[:rate_limit_retry_header] = 'retry-after-ms' - retry_options[:header_parser_block] = ->(value) { value.to_f / 1000 } end retry_options end end + + class RetryMiddleware < Faraday::Retry::Middleware + extend T::Sig + + sig { params(retries: T.untyped, env: T.untyped).returns(T.untyped) } + def calculate_sleep_amount(retries, env) + retry_after = [calculate_retry_after(env), calculate_rate_limit_reset(env)].compact.max + retry_interval = calculate_retry_interval(retries) + return retry_interval if retry_after.nil? + + # unlike the stock middleware, cap server delays at max_interval rather + # than abandoning the retry + [[retry_after, @options.max_interval].min, retry_interval].max + end + + private + + sig { params(env: T.untyped).returns(T.untyped) } + def calculate_retry_after(env) + response_headers = env[:response_headers] + return unless response_headers + + ms_value = response_headers['retry-after-ms'] + return ms_value.to_f / 1000 if ms_value&.match?(/\A\s*\d+\s*\z/) + + value = response_headers['retry-after'] + return if value.nil? || value.strip.empty? + return value.to_f if value.match?(/\A\s*\d+\s*\z/) + + begin + Time.httpdate(value) - Time.now + rescue ArgumentError + begin + Time.iso8601(value) - Time.now + rescue ArgumentError + nil + end + end + end + end end end