{"_id":"569e609bebbadc0d0079bed3","isReference":false,"parentDoc":null,"hidden":false,"link_external":false,"link_url":"","slug":"getting-started","type":"basic","api":{"params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","url":"","auth":"required"},"createdAt":"2016-01-19T16:13:15.595Z","project":"569e6099ebbadc0d0079becd","title":"Getting Started with RolePoint Connect","updates":[],"user":"569e6058ffccd10d00a05b49","body":"## Connect Overview\n\nIntegrate once and connect directly to the leading Applicant Tracking Systems (ATSs). \n\nGet [jobs straight from the ATS](doc:job-webhooks) and [create your own application process](doc:get-jobs-and-insert-applications). [Search for candidates](doc:find-candidates) and build your own CRM or simply [get your candidates into the ATS with the correct source](doc:send-candidate).\n\nThe root URL for the API is https://api.rolepoint-connect.com/v1\nAll data is sent and received as JSON over HTTPS, using the Unicode UTF-8 text encoding.\nWe won’t rename or remove fields without a version bump.\n\n[Skip the overview and create your first Sandbox Connector](doc:sandbox-connector)","excerpt":"Get to know the features of Connect","category":"569e609aebbadc0d0079bed1","githubsync":"","order":0,"sync_unique":"","version":"569e609aebbadc0d0079bed0","__v":67,"childrenPages":[]}

Getting Started with RolePoint Connect

Get to know the features of Connect

## Connect Overview Integrate once and connect directly to the leading Applicant Tracking Systems (ATSs). Get [jobs straight from the ATS](doc:job-webhooks) and [create your own application process](doc:get-jobs-and-insert-applications). [Search for candidates](doc:find-candidates) and build your own CRM or simply [get your candidates into the ATS with the correct source](doc:send-candidate). The root URL for the API is https://api.rolepoint-connect.com/v1 All data is sent and received as JSON over HTTPS, using the Unicode UTF-8 text encoding. We won’t rename or remove fields without a version bump. [Skip the overview and create your first Sandbox Connector](doc:sandbox-connector)
## Connect Overview Integrate once and connect directly to the leading Applicant Tracking Systems (ATSs). Get [jobs straight from the ATS](doc:job-webhooks) and [create your own application process](doc:get-jobs-and-insert-applications). [Search for candidates](doc:find-candidates) and build your own CRM or simply [get your candidates into the ATS with the correct source](doc:send-candidate). The root URL for the API is https://api.rolepoint-connect.com/v1 All data is sent and received as JSON over HTTPS, using the Unicode UTF-8 text encoding. We won’t rename or remove fields without a version bump. [Skip the overview and create your first Sandbox Connector](doc:sandbox-connector)
{"_id":"56e4a86fca77c62900ee4154","createdAt":"2016-03-12T23:38:23.836Z","hidden":false,"order":1,"slug":"features","title":"Features","version":"569e609aebbadc0d0079bed0","__v":2,"link_url":"","parentDoc":null,"project":"569e6099ebbadc0d0079becd","isReference":false,"body":"### Apply\nCreate candidates and applications in the ATS.\n\n### Candidate Status\nGet updates on a candidate as they move through the application process.\n\n### Jobs\nGet notified when a job is created, updated or deleted.\n\n### Candidate Search\nSearch for candidates by email, creation date or modified date.\n\n### Candidate Detail\nGet details on a candidate like the application source or their phone number.","githubsync":"","link_external":false,"sync_unique":"","user":"56d846d5b20d260b0026570b","category":"569e609aebbadc0d0079bed1","excerpt":"","type":"basic","updates":[],"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"childrenPages":[]}

Features


### Apply Create candidates and applications in the ATS. ### Candidate Status Get updates on a candidate as they move through the application process. ### Jobs Get notified when a job is created, updated or deleted. ### Candidate Search Search for candidates by email, creation date or modified date. ### Candidate Detail Get details on a candidate like the application source or their phone number.
### Apply Create candidates and applications in the ATS. ### Candidate Status Get updates on a candidate as they move through the application process. ### Jobs Get notified when a job is created, updated or deleted. ### Candidate Search Search for candidates by email, creation date or modified date. ### Candidate Detail Get details on a candidate like the application source or their phone number.
{"_id":"56e4a8d3c50aef1700971a62","api":{"auth":"required","params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":"","url":""},"body":"We're working on supporting all the features above with each ATS. The table below shows support for the main APIs in our standard ATSs. Things are moving quickly, so let us know if you need support for a feature or ATS not listed.\n[block:html]\n{\n  \"html\": \"<style type=\\\"text/css\\\">\\n\\n</style>\\n\\n<table style=\\\"background:white;\\\">\\n  <tr>\\n    <td> </td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-tee.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-tbe.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-icims.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-greenhouse.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-lumesse.png\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Apply</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Status</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Jobs</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n\\n</table>\\n\\n\\n<style type=\\\"text/css\\\">\\n\\n</style>\\n\\n<table style=\\\"background:white;\\\">\\n  <tr>\\n    <td> </td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-smart.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://app.rolepoint-apply.com/public/admin/images/ats-bullhorn.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://i.imgur.com/SY0GZFC.png\\\"></td>\\n    <td align=\\\"center\\\"><img style=\\\"margin-top:20px;\\\" width=\\\"70px\\\" src=\\\"https://i.imgur.com/YFut5bh.jpg\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"70px\\\" src=\\\"https://i.imgur.com/CZLFDit.jpg\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Apply</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Status</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n  <tr>\\n    <td align=\\\"right\\\" class=\\\"title\\\"><b>Jobs</b><br><small></small></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n    <td align=\\\"center\\\"><img width=\\\"25\\\" style=\\\"margin-top:8px;\\\" src=\\\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\\\"></td>\\n  </tr>\\n\\n</table>\"\n}\n[/block]","parentDoc":null,"version":"569e609aebbadc0d0079bed0","createdAt":"2016-03-12T23:40:03.476Z","next":{"pages":[],"description":""},"project":"569e6099ebbadc0d0079becd","updates":[],"user":"56d846d5b20d260b0026570b","__v":7,"category":"569e609aebbadc0d0079bed1","isReference":false,"slug":"ats-api-support","sync_unique":"","type":"basic","title":"ATS API Support","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":2,"childrenPages":[]}

ATS API Support


We're working on supporting all the features above with each ATS. The table below shows support for the main APIs in our standard ATSs. Things are moving quickly, so let us know if you need support for a feature or ATS not listed. [block:html] { "html": "<style type=\"text/css\">\n\n</style>\n\n<table style=\"background:white;\">\n <tr>\n <td> </td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-tee.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-tbe.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-icims.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-greenhouse.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-lumesse.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Apply</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Status</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Jobs</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n\n</table>\n\n\n<style type=\"text/css\">\n\n</style>\n\n<table style=\"background:white;\">\n <tr>\n <td> </td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-smart.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-bullhorn.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://i.imgur.com/SY0GZFC.png\"></td>\n <td align=\"center\"><img style=\"margin-top:20px;\" width=\"70px\" src=\"https://i.imgur.com/YFut5bh.jpg\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://i.imgur.com/CZLFDit.jpg\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Apply</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Status</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Jobs</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n\n</table>" } [/block]
We're working on supporting all the features above with each ATS. The table below shows support for the main APIs in our standard ATSs. Things are moving quickly, so let us know if you need support for a feature or ATS not listed. [block:html] { "html": "<style type=\"text/css\">\n\n</style>\n\n<table style=\"background:white;\">\n <tr>\n <td> </td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-tee.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-tbe.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-icims.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-greenhouse.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-lumesse.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Apply</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Status</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Jobs</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n\n</table>\n\n\n<style type=\"text/css\">\n\n</style>\n\n<table style=\"background:white;\">\n <tr>\n <td> </td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-smart.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://app.rolepoint-apply.com/public/admin/images/ats-bullhorn.png\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://i.imgur.com/SY0GZFC.png\"></td>\n <td align=\"center\"><img style=\"margin-top:20px;\" width=\"70px\" src=\"https://i.imgur.com/YFut5bh.jpg\"></td>\n <td align=\"center\"><img width=\"70px\" src=\"https://i.imgur.com/CZLFDit.jpg\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Apply</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Status</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n <tr>\n <td align=\"right\" class=\"title\"><b>Jobs</b><br><small></small></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n <td align=\"center\"><img width=\"25\" style=\"margin-top:8px;\" src=\"https://cdn0.iconfinder.com/data/icons/round-ui-icons/128/tick_green.png\"></td>\n </tr>\n\n</table>" } [/block]
{"_id":"56ddc5890cfa331700f4d002","isReference":false,"link_url":"","slug":"authentication","sync_unique":"","category":"56d730d436dd840b00cef0f7","hidden":false,"parentDoc":null,"type":"basic","user":"543d38fea10ab32000b3aa8f","version":"569e609aebbadc0d0079bed0","api":{"auth":"required","params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"excerpt":"","githubsync":"","title":"Authentication","updates":[],"__v":4,"createdAt":"2016-03-07T18:16:41.304Z","order":0,"project":"569e6099ebbadc0d0079becd","body":"You should issue all requests with Basic Authentication parameters using the credentials you were provided with.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"curl -u username:password https://api.rolepoint-connect.com\",\n      \"language\": \"curl\"\n    }\n  ]\n}\n[/block]\nRequests that require authentication may return a `404 Not Found` instead of a `401 Authorization Required` or `403 Forbidden` response to avoid leaking private URLs.\n\n### Failed login limit\n\nAuthenticating with invalid credentials will return `401 Unauthorized`.  After detecting several requests with invalid credentials within a short period, the API will temporarily reject all authentication attempts for that user (including ones with valid credentials) with a `403 Forbidden` response.","link_external":false,"childrenPages":[]}

Authentication


You should issue all requests with Basic Authentication parameters using the credentials you were provided with. [block:code] { "codes": [ { "code": "curl -u username:password https://api.rolepoint-connect.com", "language": "curl" } ] } [/block] Requests that require authentication may return a `404 Not Found` instead of a `401 Authorization Required` or `403 Forbidden` response to avoid leaking private URLs. ### Failed login limit Authenticating with invalid credentials will return `401 Unauthorized`. After detecting several requests with invalid credentials within a short period, the API will temporarily reject all authentication attempts for that user (including ones with valid credentials) with a `403 Forbidden` response.
You should issue all requests with Basic Authentication parameters using the credentials you were provided with. [block:code] { "codes": [ { "code": "curl -u username:password https://api.rolepoint-connect.com", "language": "curl" } ] } [/block] Requests that require authentication may return a `404 Not Found` instead of a `401 Authorization Required` or `403 Forbidden` response to avoid leaking private URLs. ### Failed login limit Authenticating with invalid credentials will return `401 Unauthorized`. After detecting several requests with invalid credentials within a short period, the API will temporarily reject all authentication attempts for that user (including ones with valid credentials) with a `403 Forbidden` response.
{"_id":"56ddbcda5771a520003923b0","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":"","auth":"required","params":[]},"project":"569e6099ebbadc0d0079becd","slug":"version","type":"basic","updates":[],"githubsync":"","isReference":false,"user":"543d38fea10ab32000b3aa8f","body":"By default, all requests currently use v2 of the API.  We encourage you to explicitly request this version via the `Accept` header.\n\n    Accept: application/rolepoint.v2+json\n    \nSee [Media Types](media-types/) for more information.","createdAt":"2016-03-07T17:39:38.008Z","excerpt":"","link_url":"","parentDoc":null,"sync_unique":"","title":"Version","__v":2,"category":"56d730d436dd840b00cef0f7","hidden":false,"link_external":false,"order":1,"version":"569e609aebbadc0d0079bed0","childrenPages":[]}

Version


By default, all requests currently use v2 of the API. We encourage you to explicitly request this version via the `Accept` header. Accept: application/rolepoint.v2+json See [Media Types](media-types/) for more information.
By default, all requests currently use v2 of the API. We encourage you to explicitly request this version via the `Accept` header. Accept: application/rolepoint.v2+json See [Media Types](media-types/) for more information.
{"_id":"56ddbd530e801d2900c2e408","createdAt":"2016-03-07T17:41:39.516Z","hidden":false,"sync_unique":"","title":"Schema","version":"569e609aebbadc0d0079bed0","__v":4,"isReference":false,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","type":"basic","user":"543d38fea10ab32000b3aa8f","api":{"params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":"","auth":"required"},"category":"56d730d436dd840b00cef0f7","link_external":false,"updates":[],"githubsync":"","link_url":"","order":2,"slug":"schema","body":"All API access is over HTTPS and accessed from the `api.rolepoint-connect.com` domain. All data is sent and received as JSON.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"    curl --user user:pass https://api.rolepoint-connect.com/endpoint\\n\\n    > {'connected': True}\",\n      \"language\": \"curl\"\n    }\n  ]\n}\n[/block]\nOptional fields can be sent in as `null` or omitted.  Optional fields in responses will not be omitted - instead they will be returned as `null` or empty.\n\nAll timestamps are returned in ISO 8601 format:\n\n    YYYY-MM-DDTHH:MM:SSZ","excerpt":"","childrenPages":[]}

Schema


All API access is over HTTPS and accessed from the `api.rolepoint-connect.com` domain. All data is sent and received as JSON. [block:code] { "codes": [ { "code": " curl --user user:pass https://api.rolepoint-connect.com/endpoint\n\n > {'connected': True}", "language": "curl" } ] } [/block] Optional fields can be sent in as `null` or omitted. Optional fields in responses will not be omitted - instead they will be returned as `null` or empty. All timestamps are returned in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
All API access is over HTTPS and accessed from the `api.rolepoint-connect.com` domain. All data is sent and received as JSON. [block:code] { "codes": [ { "code": " curl --user user:pass https://api.rolepoint-connect.com/endpoint\n\n > {'connected': True}", "language": "curl" } ] } [/block] Optional fields can be sent in as `null` or omitted. Optional fields in responses will not be omitted - instead they will be returned as `null` or empty. All timestamps are returned in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
{"_id":"56ddbd80d55588290014a918","api":{"params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":"","url":"","auth":"required"},"isReference":false,"link_external":false,"order":3,"slug":"success-responses","type":"basic","body":"Successful API calls will return a `200 OK` response.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 200 OK\\n\\n{}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]","githubsync":"","hidden":false,"link_url":"","project":"569e6099ebbadc0d0079becd","user":"543d38fea10ab32000b3aa8f","version":"569e609aebbadc0d0079bed0","__v":3,"category":"56d730d436dd840b00cef0f7","excerpt":"","parentDoc":null,"createdAt":"2016-03-07T17:42:24.611Z","sync_unique":"","title":"Success Responses","updates":[],"childrenPages":[]}

Success Responses


Successful API calls will return a `200 OK` response. [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\n\n{}", "language": "http" } ] } [/block]
Successful API calls will return a `200 OK` response. [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\n\n{}", "language": "http" } ] } [/block]
{"_id":"56ddbb9350dd421700424b7e","sync_unique":"","title":"Asynchronous Requests","api":{"params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":"","auth":"required"},"hidden":false,"order":4,"project":"569e6099ebbadc0d0079becd","category":"56d730d436dd840b00cef0f7","isReference":false,"updates":[],"slug":"asynchronous-requests","version":"569e609aebbadc0d0079bed0","createdAt":"2016-03-07T17:34:11.319Z","excerpt":"","githubsync":"","link_external":false,"parentDoc":null,"__v":15,"body":"The API has some endpoints that process requests asynchronously. Each request to Connect can map to one or more requests to the ATS, which could potentially take a long time to process due to request times to the ATS or rate limiting requirements. Working asynchronously will help hide this from your users and allow Connect to stay within the limits imposed by the ATS.\n\n### Callbacks\n\nEach asynchronous endpoint will accept a `X-RolePoint-Callback-Url` HTTP header that we will post a JSON status report to upon completion of the task. The data POSTed to the callback url will follow the [completed](#section-completed) or [failed](#section-failed) status reports below.\n\n### Completed\n\nIf the task has completed, the status report will be of the format:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"complete\\\",\\n  \\\"result_info\\\": {\\n    \\\"url\\\": \\\"https://api.rolepoint-connect.com/:endpoint/:request_id/result\\\",\\n    \\\"ttl\\\": 123\\n  },\\n  \\\"error_info\\\": null\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nWhere the `url` can be used to get the result of the task (e.g. the results of a [Find Candidates](doc:find-candidates) query) and the `ttl` refers to the time until the result expires.\n\n### Failed\n\nIf the task failed, the response will have the form:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"failed\\\",\\n  \\\"result_info\\\": {\\n    \\\"url\\\": \\\"https://api.rolepoint-connect.com/:endpoint/:request_id/result\\\",\\n    \\\"ttl\\\": 123\\n  },\\n  \\\"error_info\\\": {\\n    \\\"message\\\": \\\"Message describing the error that occured\\\",\\n    \\\"code\\\": 123\\n  }\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nWhere the `code` is one of the defined [Error Codes](doc:error-codes) and the `message` describes why the task failed.\n\n### Polling request status\n\nAsynchronous endpoints will also return a status URL that you can poll for status updates and success reports. This is useful when working in an environment where accepting a callback POST is not possible.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback we reduce the need to make several needless connections over what could be an extended period of time.\",\n  \"title\": \"Polling not recommended\"\n}\n[/block]\n[Async Request Status](doc:get-async-request-status) can be used to check the status of an synchronous task.\n\nThe [completed](#section-completed) and [failed](#section-failed) status reports are the same as for callbacks above.","link_url":"","type":"basic","user":"543d38fea10ab32000b3aa8f","childrenPages":[]}

Asynchronous Requests


The API has some endpoints that process requests asynchronously. Each request to Connect can map to one or more requests to the ATS, which could potentially take a long time to process due to request times to the ATS or rate limiting requirements. Working asynchronously will help hide this from your users and allow Connect to stay within the limits imposed by the ATS. ### Callbacks Each asynchronous endpoint will accept a `X-RolePoint-Callback-Url` HTTP header that we will post a JSON status report to upon completion of the task. The data POSTed to the callback url will follow the [completed](#section-completed) or [failed](#section-failed) status reports below. ### Completed If the task has completed, the status report will be of the format: [block:code] { "codes": [ { "code": "{\n \"status\": \"complete\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/:endpoint/:request_id/result\",\n \"ttl\": 123\n },\n \"error_info\": null\n}", "language": "json" } ] } [/block] Where the `url` can be used to get the result of the task (e.g. the results of a [Find Candidates](doc:find-candidates) query) and the `ttl` refers to the time until the result expires. ### Failed If the task failed, the response will have the form: [block:code] { "codes": [ { "code": "{\n \"status\": \"failed\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/:endpoint/:request_id/result\",\n \"ttl\": 123\n },\n \"error_info\": {\n \"message\": \"Message describing the error that occured\",\n \"code\": 123\n }\n}", "language": "json" } ] } [/block] Where the `code` is one of the defined [Error Codes](doc:error-codes) and the `message` describes why the task failed. ### Polling request status Asynchronous endpoints will also return a status URL that you can poll for status updates and success reports. This is useful when working in an environment where accepting a callback POST is not possible. [block:callout] { "type": "warning", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback we reduce the need to make several needless connections over what could be an extended period of time.", "title": "Polling not recommended" } [/block] [Async Request Status](doc:get-async-request-status) can be used to check the status of an synchronous task. The [completed](#section-completed) and [failed](#section-failed) status reports are the same as for callbacks above.
The API has some endpoints that process requests asynchronously. Each request to Connect can map to one or more requests to the ATS, which could potentially take a long time to process due to request times to the ATS or rate limiting requirements. Working asynchronously will help hide this from your users and allow Connect to stay within the limits imposed by the ATS. ### Callbacks Each asynchronous endpoint will accept a `X-RolePoint-Callback-Url` HTTP header that we will post a JSON status report to upon completion of the task. The data POSTed to the callback url will follow the [completed](#section-completed) or [failed](#section-failed) status reports below. ### Completed If the task has completed, the status report will be of the format: [block:code] { "codes": [ { "code": "{\n \"status\": \"complete\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/:endpoint/:request_id/result\",\n \"ttl\": 123\n },\n \"error_info\": null\n}", "language": "json" } ] } [/block] Where the `url` can be used to get the result of the task (e.g. the results of a [Find Candidates](doc:find-candidates) query) and the `ttl` refers to the time until the result expires. ### Failed If the task failed, the response will have the form: [block:code] { "codes": [ { "code": "{\n \"status\": \"failed\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/:endpoint/:request_id/result\",\n \"ttl\": 123\n },\n \"error_info\": {\n \"message\": \"Message describing the error that occured\",\n \"code\": 123\n }\n}", "language": "json" } ] } [/block] Where the `code` is one of the defined [Error Codes](doc:error-codes) and the `message` describes why the task failed. ### Polling request status Asynchronous endpoints will also return a status URL that you can poll for status updates and success reports. This is useful when working in an environment where accepting a callback POST is not possible. [block:callout] { "type": "warning", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback we reduce the need to make several needless connections over what could be an extended period of time.", "title": "Polling not recommended" } [/block] [Async Request Status](doc:get-async-request-status) can be used to check the status of an synchronous task. The [completed](#section-completed) and [failed](#section-failed) status reports are the same as for callbacks above.
{"_id":"56ddbd9ae1a78d0e00a9bdd7","createdAt":"2016-03-07T17:42:50.345Z","project":"569e6099ebbadc0d0079becd","updates":[],"user":"543d38fea10ab32000b3aa8f","title":"Errors","version":"569e609aebbadc0d0079bed0","category":"56d730d436dd840b00cef0f7","githubsync":"","isReference":false,"slug":"client-responses","hidden":false,"parentDoc":null,"link_url":"","order":5,"sync_unique":"","__v":9,"api":{"url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":""},"body":"## Client Errors\n\nThere are six types of client errors on API calls:\n\n1. Sending a request with missing credentials will result in a `401\n   Unauthorized` response\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 401 Unauthorized\\n\\n{\\\"message\\\": \\\"Missing credentials\\\"}\\n\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n2. Sending a request with invalid or insufficient credentials will result in a\n   `401 Unauthorized` response.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 401 Unauthorized\\n\\n{\\\"message\\\": \\\"Invalid credentials\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n3. Sending a request to an endpoint that does not exist will result in a `404\n   Not Found` response.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 404 Not Found\\n\\n{\\\"message\\\": \\\"Page not found\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n4. Sending malformed JSON bodies will result in a `400 Bad Request` response.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 400 Bad Request\\n\\n{\\\"message\\\": \\\"Problems parsing JSON\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n5. Sending JSON bodies with missing fields or unexpected fields will result in a `422\n   Unprocessable Entity` response.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 422 Unprocessable Entity\\n\\n{\\\"message\\\": \\\"JSON does not match expected schema.\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n6. Sending a request that exceeds rate limits will result in a `429 Too Many\n   Requests` response.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 429 Too Many Requests\\n\\n{\\\"message\\\": \\\"Rate limit exceeded\\\", \\\"rate-limit-reset\\\": \\\"60\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nThe `rate-limit-reset` field in this response is the number of seconds until\nthe rate limit will be reset.\n\nIf endpoints have custom validation errors, they will be documented with the\nendpoint.\n\n## Other Errors\n\nIf an unexpected error occurs during an API call, the server will return a `500\nInternal Server Error`\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 500 Internal Server Error\\n\\n{\\\"message\\\": \\\"Unknown error\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nYou should assume that these requests failed and attempt them again later.","excerpt":"","link_external":false,"type":"basic","childrenPages":[]}

Errors


## Client Errors There are six types of client errors on API calls: 1. Sending a request with missing credentials will result in a `401 Unauthorized` response [block:code] { "codes": [ { "code": "HTTP/1.1 401 Unauthorized\n\n{\"message\": \"Missing credentials\"}\n", "language": "http" } ] } [/block] 2. Sending a request with invalid or insufficient credentials will result in a `401 Unauthorized` response. [block:code] { "codes": [ { "code": "HTTP/1.1 401 Unauthorized\n\n{\"message\": \"Invalid credentials\"}", "language": "http" } ] } [/block] 3. Sending a request to an endpoint that does not exist will result in a `404 Not Found` response. [block:code] { "codes": [ { "code": "HTTP/1.1 404 Not Found\n\n{\"message\": \"Page not found\"}", "language": "http" } ] } [/block] 4. Sending malformed JSON bodies will result in a `400 Bad Request` response. [block:code] { "codes": [ { "code": "HTTP/1.1 400 Bad Request\n\n{\"message\": \"Problems parsing JSON\"}", "language": "http" } ] } [/block] 5. Sending JSON bodies with missing fields or unexpected fields will result in a `422 Unprocessable Entity` response. [block:code] { "codes": [ { "code": "HTTP/1.1 422 Unprocessable Entity\n\n{\"message\": \"JSON does not match expected schema.\"}", "language": "http" } ] } [/block] 6. Sending a request that exceeds rate limits will result in a `429 Too Many Requests` response. [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\n\n{\"message\": \"Rate limit exceeded\", \"rate-limit-reset\": \"60\"}", "language": "http" } ] } [/block] The `rate-limit-reset` field in this response is the number of seconds until the rate limit will be reset. If endpoints have custom validation errors, they will be documented with the endpoint. ## Other Errors If an unexpected error occurs during an API call, the server will return a `500 Internal Server Error` [block:code] { "codes": [ { "code": "HTTP/1.1 500 Internal Server Error\n\n{\"message\": \"Unknown error\"}", "language": "http" } ] } [/block] You should assume that these requests failed and attempt them again later.
## Client Errors There are six types of client errors on API calls: 1. Sending a request with missing credentials will result in a `401 Unauthorized` response [block:code] { "codes": [ { "code": "HTTP/1.1 401 Unauthorized\n\n{\"message\": \"Missing credentials\"}\n", "language": "http" } ] } [/block] 2. Sending a request with invalid or insufficient credentials will result in a `401 Unauthorized` response. [block:code] { "codes": [ { "code": "HTTP/1.1 401 Unauthorized\n\n{\"message\": \"Invalid credentials\"}", "language": "http" } ] } [/block] 3. Sending a request to an endpoint that does not exist will result in a `404 Not Found` response. [block:code] { "codes": [ { "code": "HTTP/1.1 404 Not Found\n\n{\"message\": \"Page not found\"}", "language": "http" } ] } [/block] 4. Sending malformed JSON bodies will result in a `400 Bad Request` response. [block:code] { "codes": [ { "code": "HTTP/1.1 400 Bad Request\n\n{\"message\": \"Problems parsing JSON\"}", "language": "http" } ] } [/block] 5. Sending JSON bodies with missing fields or unexpected fields will result in a `422 Unprocessable Entity` response. [block:code] { "codes": [ { "code": "HTTP/1.1 422 Unprocessable Entity\n\n{\"message\": \"JSON does not match expected schema.\"}", "language": "http" } ] } [/block] 6. Sending a request that exceeds rate limits will result in a `429 Too Many Requests` response. [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\n\n{\"message\": \"Rate limit exceeded\", \"rate-limit-reset\": \"60\"}", "language": "http" } ] } [/block] The `rate-limit-reset` field in this response is the number of seconds until the rate limit will be reset. If endpoints have custom validation errors, they will be documented with the endpoint. ## Other Errors If an unexpected error occurs during an API call, the server will return a `500 Internal Server Error` [block:code] { "codes": [ { "code": "HTTP/1.1 500 Internal Server Error\n\n{\"message\": \"Unknown error\"}", "language": "http" } ] } [/block] You should assume that these requests failed and attempt them again later.
{"_id":"56ddc57225a3dd1700e5c758","hidden":false,"excerpt":"","link_external":false,"order":6,"slug":"error-codes","title":"Error Codes","isReference":false,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","__v":3,"body":"### 100 - ATS Unauthorized Error\n\n100 is the error code Connect sends when there's an authorization problem connecting to the ATS. If there's a problem authorizing with the ATS, Connect will shut down any future attempts to connect to the ATS until we can confirm the credentials work. This is to prevent the ATS account being locked for multiple invalid authorization requests.\n\n### 999 - General Purpose Error\n\nThis is a general purpose error code. This will be returned as a 'catch-all', so if there is an unexpected error, this code would be returned with a message indicating what went wrong.","category":"56d730d436dd840b00cef0f7","createdAt":"2016-03-07T18:16:18.539Z","updates":[],"user":"543d38fea10ab32000b3aa8f","version":"569e609aebbadc0d0079bed0","api":{"params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required"},"githubsync":"","link_url":"","sync_unique":"","type":"basic","childrenPages":[]}

Error Codes


### 100 - ATS Unauthorized Error 100 is the error code Connect sends when there's an authorization problem connecting to the ATS. If there's a problem authorizing with the ATS, Connect will shut down any future attempts to connect to the ATS until we can confirm the credentials work. This is to prevent the ATS account being locked for multiple invalid authorization requests. ### 999 - General Purpose Error This is a general purpose error code. This will be returned as a 'catch-all', so if there is an unexpected error, this code would be returned with a message indicating what went wrong.
### 100 - ATS Unauthorized Error 100 is the error code Connect sends when there's an authorization problem connecting to the ATS. If there's a problem authorizing with the ATS, Connect will shut down any future attempts to connect to the ATS until we can confirm the credentials work. This is to prevent the ATS account being locked for multiple invalid authorization requests. ### 999 - General Purpose Error This is a general purpose error code. This will be returned as a 'catch-all', so if there is an unexpected error, this code would be returned with a message indicating what went wrong.
{"_id":"56e453c0f0150e1700ce67fc","category":"56d730d436dd840b00cef0f7","githubsync":"","isReference":false,"order":7,"parentDoc":null,"slug":"billing-limits","type":"basic","createdAt":"2016-03-12T17:37:04.922Z","hidden":false,"body":"The API has credit limits, defined on a per-connector basis.\n\nYou can check the returned HTTP headers of any API request to see your current credit limit status:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"curl -i https://api.rolepoint-connect.com/whatever\\n\\nHTTP/1.1 200 OK\\nStatus: 200 OK\\nX-CreditLimit-Limit: 60\\nX-CreditLimit-Remaining: 56\\nX-CreditLimit_Reset: 1372700873\",\n      \"language\": \"curl\"\n    }\n  ]\n}\n[/block]\nThe headers tell you everything you need to know about your current credit limit status:\n\n* X-CreditLimit-Limit - The maximum number of requests that the consumer is permitted to make per hour.\n* X-CreditLimit-Remaining - The number of requests remaining in the current credit window.\n* X-CreditLimit-Reset - The time at which the current credit window resets in UTC epoch seconds.\n\nOnce you go over your credit limit you will receive an error response:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 429 Too Many Requests\\nStatus: 429 Too Many Requests\\nX-CreditLimit-Limit: 60\\nX-CreditLimit-Remaining: 0\\nX-CreditLimit-Reset: 1372700873\\n\\n{\\\"message\\\": \\\"Rate limit exceeded\\\", \\\"rate-limit-reset\\\": 1372700873}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]","excerpt":"","link_url":"","sync_unique":"","title":"Billing limits","version":"569e609aebbadc0d0079bed0","__v":4,"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"link_external":false,"project":"569e6099ebbadc0d0079becd","updates":[],"user":"56d846d5b20d260b0026570b","childrenPages":[]}

Billing limits


The API has credit limits, defined on a per-connector basis. You can check the returned HTTP headers of any API request to see your current credit limit status: [block:code] { "codes": [ { "code": "curl -i https://api.rolepoint-connect.com/whatever\n\nHTTP/1.1 200 OK\nStatus: 200 OK\nX-CreditLimit-Limit: 60\nX-CreditLimit-Remaining: 56\nX-CreditLimit_Reset: 1372700873", "language": "curl" } ] } [/block] The headers tell you everything you need to know about your current credit limit status: * X-CreditLimit-Limit - The maximum number of requests that the consumer is permitted to make per hour. * X-CreditLimit-Remaining - The number of requests remaining in the current credit window. * X-CreditLimit-Reset - The time at which the current credit window resets in UTC epoch seconds. Once you go over your credit limit you will receive an error response: [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\nStatus: 429 Too Many Requests\nX-CreditLimit-Limit: 60\nX-CreditLimit-Remaining: 0\nX-CreditLimit-Reset: 1372700873\n\n{\"message\": \"Rate limit exceeded\", \"rate-limit-reset\": 1372700873}", "language": "http" } ] } [/block]
The API has credit limits, defined on a per-connector basis. You can check the returned HTTP headers of any API request to see your current credit limit status: [block:code] { "codes": [ { "code": "curl -i https://api.rolepoint-connect.com/whatever\n\nHTTP/1.1 200 OK\nStatus: 200 OK\nX-CreditLimit-Limit: 60\nX-CreditLimit-Remaining: 56\nX-CreditLimit_Reset: 1372700873", "language": "curl" } ] } [/block] The headers tell you everything you need to know about your current credit limit status: * X-CreditLimit-Limit - The maximum number of requests that the consumer is permitted to make per hour. * X-CreditLimit-Remaining - The number of requests remaining in the current credit window. * X-CreditLimit-Reset - The time at which the current credit window resets in UTC epoch seconds. Once you go over your credit limit you will receive an error response: [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\nStatus: 429 Too Many Requests\nX-CreditLimit-Limit: 60\nX-CreditLimit-Remaining: 0\nX-CreditLimit-Reset: 1372700873\n\n{\"message\": \"Rate limit exceeded\", \"rate-limit-reset\": 1372700873}", "language": "http" } ] } [/block]
{"_id":"56ddc61490559a2900a3a4ae","title":"Rate Limits","version":"569e609aebbadc0d0079bed0","category":"56d730d436dd840b00cef0f7","githubsync":"","link_external":false,"parentDoc":null,"type":"basic","updates":[],"excerpt":"","isReference":false,"project":"569e6099ebbadc0d0079becd","slug":"rate-limits","sync_unique":"","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":"","auth":"required","params":[]},"createdAt":"2016-03-07T18:19:00.819Z","user":"543d38fea10ab32000b3aa8f","__v":4,"body":"The connector API has rate limits, which vary by ATS. These are separate from the billing-based credit limits described above. These are in place to ensure that we don't exceed the rate limits imposed by the underlying ATS.\n\nThese rate limits are implemented using a sliding window that should allow you to burst at a higher rate than the ATS usually allows, but will not allow you to maintain that level indefinitely.\n\nYou can check the returned HTTP headers of any API request to see your current rate limit status:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"curl -i https://api.rolepoint-connect.com/whatever\\n\\nHTTP/1.1 200 OK\\nStatus: 200 OK\\nX-RateLimit-Remaining: 1\",\n      \"language\": \"curl\"\n    }\n  ]\n}\n[/block]\nThese limiters are implemented as a sliding window, so do not provide reset information.\n\nOnce you go over your rate limit, you will receive an error response:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 429 Too Many Requests\\nStatus: 429 Too Many Requests\\nX-CreditLimit-Remaining: 0\\n\\n{\\\"message\\\": \\\"Rate limit exceeded\\\"}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]","hidden":false,"link_url":"","order":8,"childrenPages":[]}

Rate Limits


The connector API has rate limits, which vary by ATS. These are separate from the billing-based credit limits described above. These are in place to ensure that we don't exceed the rate limits imposed by the underlying ATS. These rate limits are implemented using a sliding window that should allow you to burst at a higher rate than the ATS usually allows, but will not allow you to maintain that level indefinitely. You can check the returned HTTP headers of any API request to see your current rate limit status: [block:code] { "codes": [ { "code": "curl -i https://api.rolepoint-connect.com/whatever\n\nHTTP/1.1 200 OK\nStatus: 200 OK\nX-RateLimit-Remaining: 1", "language": "curl" } ] } [/block] These limiters are implemented as a sliding window, so do not provide reset information. Once you go over your rate limit, you will receive an error response: [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\nStatus: 429 Too Many Requests\nX-CreditLimit-Remaining: 0\n\n{\"message\": \"Rate limit exceeded\"}", "language": "http" } ] } [/block]
The connector API has rate limits, which vary by ATS. These are separate from the billing-based credit limits described above. These are in place to ensure that we don't exceed the rate limits imposed by the underlying ATS. These rate limits are implemented using a sliding window that should allow you to burst at a higher rate than the ATS usually allows, but will not allow you to maintain that level indefinitely. You can check the returned HTTP headers of any API request to see your current rate limit status: [block:code] { "codes": [ { "code": "curl -i https://api.rolepoint-connect.com/whatever\n\nHTTP/1.1 200 OK\nStatus: 200 OK\nX-RateLimit-Remaining: 1", "language": "curl" } ] } [/block] These limiters are implemented as a sliding window, so do not provide reset information. Once you go over your rate limit, you will receive an error response: [block:code] { "codes": [ { "code": "HTTP/1.1 429 Too Many Requests\nStatus: 429 Too Many Requests\nX-CreditLimit-Remaining: 0\n\n{\"message\": \"Rate limit exceeded\"}", "language": "http" } ] } [/block]
{"_id":"56d732043eb4dd0b00201922","category":"56d8457a9d27560b00a4cc17","createdAt":"2016-03-02T18:33:40.339Z","hidden":false,"isReference":true,"project":"569e6099ebbadc0d0079becd","updates":[],"__v":4,"api":{"auth":"required","examples":{"codes":[]},"method":"post","params":[{"name":"connector_id","ref":"","required":false,"type":"string","in":"body","_id":"56d7330a3513421d009342ec","default":"","desc":"The ID of your Connector."}],"results":{"codes":[{"code":"{\n  \"request_status_url\": \"https://api.rolepoint-connect.com/123/requests/456/status\"\n}","language":"json","status":200},{"code":"{\n  \"message\": \"JSON does not match expected schema\",\n  \"errors\": [\n    \"empty values not allowed for field 'first_name'\",\n    \"empty values not allowed for field 'last_name'\"\n  ]\n}","language":"json","status":422},{"language":"json","code":"{\"message\": \"Rate limit exceeded\"}","status":429},{"code":"{\"message\": \"Invalid credentials\"}\nor\n{\"message\": \"Missing credentials\"}","language":"json","status":401}]},"settings":"","url":"/candidate"},"body":"[block:textarea]\n{\n  \"text\": \"## Request\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /v1/123/candidate HTTP/1.1\\nHost: api.rolepoint-connect.com\\nAccept: application/rolepoint.v2+json\\nContent-Type: application/rolepoint.v2+json\\nAuthorization: xxxxx\\nX-RolePoint-Callback-Url: https://example.com/send-candidate-callback\\n\\n{\\n  \\\"source\\\": \\\"example\\\",\\n  \\\"candidate\\\": {\\n    \\\"email\\\": \\\"test@example.com\\\",\\n    \\\"first_name\\\": \\\"James\\\",\\n    \\\"last_name\\\": \\\"Test\\\",\\n    \\\"cv_file\\\": \\\"\\\",\\n\\t  \\\"location\\\": {\\n  \\t  \\\"city\\\": \\\"London\\\",\\n\\t    \\\"country\\\": \\\"UK\\\",\\n  \\t  \\\"zipcode\\\": \\\"EC1R 5DT\\\"\\n\\t  }\\n  },\\n  \\\"applications\\\": [{\\n  \\t\\\"job_id\\\": \\\"1234\\\"\\n  }]\\n}\",\n      \"language\": \"http\"\n    },\n    {\n      \"code\": \"import json\\nimport requests\\n\\nconnector_id = '123'\\nusername = 'username'\\npassword = 'password'\\n\\nurl = \\\"https://api.rolepoint-connect.com/v1/{}/candidate\\\".format(\\n  connector_id\\n)\\n\\nheaders = {\\n  \\\"content-type\\\": \\\"application/rolepoint.v2+json\\\",\\n  \\\"accept\\\": \\\"application/rolepoint.v2+json\\\",\\n  'X-RolePoint-Callback-Url': 'https://example.com/send-candidate-callback'\\n}\\n\\npayload = json.dumps({\\n  \\\"source\\\": \\\"example\\\",\\n  \\\"candidate\\\": {\\n    \\\"email\\\": \\\"test@example.com\\\",\\n    \\\"first_name\\\": \\\"James\\\",\\n    \\\"last_name\\\": \\\"Test\\\",\\n    \\\"cv_file\\\": \\\"\\\",\\n\\t  \\\"location\\\": {\\n  \\t  \\\"city\\\": \\\"London\\\",\\n\\t    \\\"country\\\": \\\"UK\\\",\\n  \\t  \\\"zipcode\\\": \\\"EC1R 5DT\\\"\\n\\t  }\\n  },\\n  \\\"applications\\\": [{\\n  \\t\\\"job_id\\\": \\\"1234\\\"\\n  }]\\n})\\n\\nresponse = requests.post(\\n  url, data=payload, headers=headers, auth=(username, password)\\n)\\n\\nprint(response.text)\",\n      \"language\": \"python\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\n\n[block:textarea]\n{\n  \"text\": \"## Final Result\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \" HTTP/1.1 200 OK\\n Status: 200 OK\\n Content-Type: application/rolepoint.v2+json\\n\\n{\\n  \\\"candidate_id\\\": 1234,\\n  \\\"candidate_created\\\": True\\n  \\\"application_ids\\\": {\\n\\t  \\\"1234\\\": 4675\\n  }\\n}\",\n      \"language\": \"http\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Asynchronous Endpoint\",\n  \"body\": \"This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.\"\n}\n[/block]\n## Request Body\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"candidate\",\n    \"h-0\": \"Attribute\",\n    \"h-1\": \"Type\",\n    \"h-2\": \"Required\",\n    \"h-3\": \"Description\",\n    \"0-1\": \"[Candidate](doc:resources)\",\n    \"0-2\": \"True\",\n    \"0-3\": \"The Candidate entity the application(s) is for.\",\n    \"1-0\": \"applications\",\n    \"1-1\": \"list<[Application](doc:application)>\",\n    \"1-2\": \"True\",\n    \"1-3\": \"The job(s) the Candidate is applying for.\",\n    \"2-0\": \"source\",\n    \"2-1\": \"string\",\n    \"2-2\": \"False\",\n    \"2-3\": \"The ID which specifies the source that the application was made through.\"\n  },\n  \"cols\": 4,\n  \"rows\": 3\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Potential Errors\",\n  \"body\": \"The endpoint can return errors if the payload is malformed. The response\\nin this case will contain the following fields:\\n\\n    PUT /v1/123/candidate HTTP/1.1\\n\\n    HTTP/1.1 422 Unprocessable Entity\\n    Status: 422 Unprocessable Entity\\n\\n    {\\n        \\\"message\\\": \\\"JSON does not match expected schema\\\",\\n        \\\"errors\\\": [\\n            \\\"empty values not allowed for field 'first_name'\\\",\\n            \\\"empty values not allowed for field 'last_name'\\\"\\n        ]\\n    }\"\n}\n[/block]","githubsync":"","link_url":"","version":"569e609aebbadc0d0079bed0","editedParams2":true,"excerpt":"Endpoint for creating a job application.","order":0,"type":"post","user":"543d38fea10ab32000b3aa8f","sync_unique":"","title":"Send Candidate","editedParams":true,"link_external":false,"parentDoc":null,"slug":"send-candidate","childrenPages":[]}

postSend Candidate

Endpoint for creating a job application.

Body Params

connector_id:
string
The ID of your Connector.
[block:textarea] { "text": "## Request", "sidebar": true } [/block] [block:code] { "codes": [ { "code": "POST /v1/123/candidate HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\nX-RolePoint-Callback-Url: https://example.com/send-candidate-callback\n\n{\n \"source\": \"example\",\n \"candidate\": {\n \"email\": \"test@example.com\",\n \"first_name\": \"James\",\n \"last_name\": \"Test\",\n \"cv_file\": \"\",\n\t \"location\": {\n \t \"city\": \"London\",\n\t \"country\": \"UK\",\n \t \"zipcode\": \"EC1R 5DT\"\n\t }\n },\n \"applications\": [{\n \t\"job_id\": \"1234\"\n }]\n}", "language": "http" }, { "code": "import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/candidate\".format(\n connector_id\n)\n\nheaders = {\n \"content-type\": \"application/rolepoint.v2+json\",\n \"accept\": \"application/rolepoint.v2+json\",\n 'X-RolePoint-Callback-Url': 'https://example.com/send-candidate-callback'\n}\n\npayload = json.dumps({\n \"source\": \"example\",\n \"candidate\": {\n \"email\": \"test@example.com\",\n \"first_name\": \"James\",\n \"last_name\": \"Test\",\n \"cv_file\": \"\",\n\t \"location\": {\n \t \"city\": \"London\",\n\t \"country\": \"UK\",\n \t \"zipcode\": \"EC1R 5DT\"\n\t }\n },\n \"applications\": [{\n \t\"job_id\": \"1234\"\n }]\n})\n\nresponse = requests.post(\n url, data=payload, headers=headers, auth=(username, password)\n)\n\nprint(response.text)", "language": "python" } ], "sidebar": true } [/block] [block:textarea] { "text": "## Final Result", "sidebar": true } [/block] [block:code] { "codes": [ { "code": " HTTP/1.1 200 OK\n Status: 200 OK\n Content-Type: application/rolepoint.v2+json\n\n{\n \"candidate_id\": 1234,\n \"candidate_created\": True\n \"application_ids\": {\n\t \"1234\": 4675\n }\n}", "language": "http" } ], "sidebar": true } [/block] [block:callout] { "type": "info", "title": "Asynchronous Endpoint", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details." } [/block] ## Request Body [block:parameters] { "data": { "0-0": "candidate", "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-1": "[Candidate](doc:resources)", "0-2": "True", "0-3": "The Candidate entity the application(s) is for.", "1-0": "applications", "1-1": "list<[Application](doc:application)>", "1-2": "True", "1-3": "The job(s) the Candidate is applying for.", "2-0": "source", "2-1": "string", "2-2": "False", "2-3": "The ID which specifies the source that the application was made through." }, "cols": 4, "rows": 3 } [/block] [block:callout] { "type": "warning", "title": "Potential Errors", "body": "The endpoint can return errors if the payload is malformed. The response\nin this case will contain the following fields:\n\n PUT /v1/123/candidate HTTP/1.1\n\n HTTP/1.1 422 Unprocessable Entity\n Status: 422 Unprocessable Entity\n\n {\n \"message\": \"JSON does not match expected schema\",\n \"errors\": [\n \"empty values not allowed for field 'first_name'\",\n \"empty values not allowed for field 'last_name'\"\n ]\n }" } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Result Format



[block:textarea] { "text": "## Request", "sidebar": true } [/block] [block:code] { "codes": [ { "code": "POST /v1/123/candidate HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\nX-RolePoint-Callback-Url: https://example.com/send-candidate-callback\n\n{\n \"source\": \"example\",\n \"candidate\": {\n \"email\": \"test@example.com\",\n \"first_name\": \"James\",\n \"last_name\": \"Test\",\n \"cv_file\": \"\",\n\t \"location\": {\n \t \"city\": \"London\",\n\t \"country\": \"UK\",\n \t \"zipcode\": \"EC1R 5DT\"\n\t }\n },\n \"applications\": [{\n \t\"job_id\": \"1234\"\n }]\n}", "language": "http" }, { "code": "import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/candidate\".format(\n connector_id\n)\n\nheaders = {\n \"content-type\": \"application/rolepoint.v2+json\",\n \"accept\": \"application/rolepoint.v2+json\",\n 'X-RolePoint-Callback-Url': 'https://example.com/send-candidate-callback'\n}\n\npayload = json.dumps({\n \"source\": \"example\",\n \"candidate\": {\n \"email\": \"test@example.com\",\n \"first_name\": \"James\",\n \"last_name\": \"Test\",\n \"cv_file\": \"\",\n\t \"location\": {\n \t \"city\": \"London\",\n\t \"country\": \"UK\",\n \t \"zipcode\": \"EC1R 5DT\"\n\t }\n },\n \"applications\": [{\n \t\"job_id\": \"1234\"\n }]\n})\n\nresponse = requests.post(\n url, data=payload, headers=headers, auth=(username, password)\n)\n\nprint(response.text)", "language": "python" } ], "sidebar": true } [/block] [block:textarea] { "text": "## Final Result", "sidebar": true } [/block] [block:code] { "codes": [ { "code": " HTTP/1.1 200 OK\n Status: 200 OK\n Content-Type: application/rolepoint.v2+json\n\n{\n \"candidate_id\": 1234,\n \"candidate_created\": True\n \"application_ids\": {\n\t \"1234\": 4675\n }\n}", "language": "http" } ], "sidebar": true } [/block] [block:callout] { "type": "info", "title": "Asynchronous Endpoint", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details." } [/block] ## Request Body [block:parameters] { "data": { "0-0": "candidate", "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-1": "[Candidate](doc:resources)", "0-2": "True", "0-3": "The Candidate entity the application(s) is for.", "1-0": "applications", "1-1": "list<[Application](doc:application)>", "1-2": "True", "1-3": "The job(s) the Candidate is applying for.", "2-0": "source", "2-1": "string", "2-2": "False", "2-3": "The ID which specifies the source that the application was made through." }, "cols": 4, "rows": 3 } [/block] [block:callout] { "type": "warning", "title": "Potential Errors", "body": "The endpoint can return errors if the payload is malformed. The response\nin this case will contain the following fields:\n\n PUT /v1/123/candidate HTTP/1.1\n\n HTTP/1.1 422 Unprocessable Entity\n Status: 422 Unprocessable Entity\n\n {\n \"message\": \"JSON does not match expected schema\",\n \"errors\": [\n \"empty values not allowed for field 'first_name'\",\n \"empty values not allowed for field 'last_name'\"\n ]\n }" } [/block]
{"_id":"56e18912686c7d20008606d0","createdAt":"2016-03-10T14:47:46.450Z","excerpt":"Get the result of calling POST candidate","isReference":true,"link_url":"","parentDoc":null,"slug":"send-candidate-result","sync_unique":"","api":{"auth":"required","examples":{"codes":[{"language":"http","code":"GET /123/applications/f586c5aa-842d-4e49-bcca-876a11e82ede/result HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\nrequest_id = ''\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/applications/{}/result\".format(\n  connector_id, request_id\n)\n\nresponse = requests.get(\n  url, auth=(username, password)\n)\n\nprint(response.text)"}]},"method":"get","params":[{"ref":"","required":false,"desc":"The ID of your connector","default":"","type":"string","name":"connector_id","in":"query","_id":"56e18912686c7d20008606d2"},{"type":"string","name":"request_id","in":"path","_id":"56e18912686c7d20008606d1","ref":"","required":false,"desc":"The ID of the asynchronous request as returned in the initial request.","default":""}],"results":{"codes":[{"name":"Success Result","status":200,"language":"json","code":"{\n  \"candidate_id\": 1234,\n  \"candidate_created\": True\n  \"application_ids\": {\n    \"1234\": 4675\n  }\n}"}]},"settings":"","url":"/applications/:request_id/result"},"type":"get","title":"Send Candidate Result","category":"56d8457a9d27560b00a4cc17","githubsync":"","order":1,"version":"569e609aebbadc0d0079bed0","editedParams2":true,"hidden":false,"project":"569e6099ebbadc0d0079becd","editedParams":true,"body":"Once application creation is finished, you can get the result using the\n`result_info.url` field returned in the status (either from a callback or the complete status).  You should issue a `GET` request to that URL.\n\nThe result will contain `candidate_id` and `candidate_created` fields, with an `application_ids` object:\n\n* `candidate_id` - The ID of the candidate that was created.\n* `candidate_created` - True/False relating to whether the candidate was\n    created within the ATS. True indicates the candidate was created as a\n    result of this request. False indicates the candidate already existed in\n    the ATS.\n* `application_ids` - An object that maps the ID of the job that the\n    application was created for to the ID of the application itself. This will\n    be null if no applications were provided in the initial request.\n\nDepending on data provided by the underlying ATS, both ID & application IDs may\nbe null.","link_external":false,"updates":[],"user":"56cc98fcb4cbcf0b004a6009","__v":0,"childrenPages":[]}

getSend Candidate Result

Get the result of calling POST candidate

Path Params

request_id:
string
The ID of the asynchronous request as returned in the initial request.

Query Params

connector_id:
string
The ID of your connector
Once application creation is finished, you can get the result using the `result_info.url` field returned in the status (either from a callback or the complete status). You should issue a `GET` request to that URL. The result will contain `candidate_id` and `candidate_created` fields, with an `application_ids` object: * `candidate_id` - The ID of the candidate that was created. * `candidate_created` - True/False relating to whether the candidate was created within the ATS. True indicates the candidate was created as a result of this request. False indicates the candidate already existed in the ATS. * `application_ids` - An object that maps the ID of the job that the application was created for to the ID of the application itself. This will be null if no applications were provided in the initial request. Depending on data provided by the underlying ATS, both ID & application IDs may be null.

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



Once application creation is finished, you can get the result using the `result_info.url` field returned in the status (either from a callback or the complete status). You should issue a `GET` request to that URL. The result will contain `candidate_id` and `candidate_created` fields, with an `application_ids` object: * `candidate_id` - The ID of the candidate that was created. * `candidate_created` - True/False relating to whether the candidate was created within the ATS. True indicates the candidate was created as a result of this request. False indicates the candidate already existed in the ATS. * `application_ids` - An object that maps the ID of the job that the application was created for to the ID of the application itself. This will be null if no applications were provided in the initial request. Depending on data provided by the underlying ATS, both ID & application IDs may be null.
{"_id":"56e18977a8306d29001ce8ad","project":"569e6099ebbadc0d0079becd","updates":[],"__v":0,"editedParams2":true,"hidden":false,"isReference":true,"link_url":"","excerpt":"Runs a search of candidates and returns the IDs of candidates that match.","title":"Find Candidates","user":"56cc98fcb4cbcf0b004a6009","version":"569e609aebbadc0d0079bed0","slug":"find-candidates","sync_unique":"","api":{"results":{"codes":[{"status":200,"language":"json","code":"{\"request_status_url\": \"https://api.rolepoint-connect.com/123/requests/456/status\"}","name":""}]},"settings":"","url":"/find_candidates","auth":"required","examples":{"codes":[{"code":"POST /v1/123/find_candidates HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\nX-RolePoint-Callback-Url: https://yourdomain.com/find-candidates-callback\n\n{\n  \"filters\": [\n    {\n      \"operator\": \"==\",\n      \"field\": \"email\",\n      \"value\": \"test@example.com\"\n    },\n    {\n      \"operator\": \"daterange\",\n      \"field\": \"created_datetime\",\n      \"daterange\": {\n        \"start\": \"2012-01-25\",\n        \"end\": \"2012-01-30\"\n      }\n    }\n  ]\n}","language":"http"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/find_candidates\".format(\n  connector_id\n)\n\nheaders = {\n  \"content-type\": \"application/rolepoint.v2+json\",\n  \"accept\": \"application/rolepoint.v2+json\",\n  'X-RolePoint-Callback-Url': 'https://example.com/find-candidates-callback'\n}\n\npayload = json.dumps({\n  \"filters\": [\n    {\n      \"operator\": \"==\",\n      \"field\": \"email\",\n      \"value\": \"test@example.com\"\n    },\n    {\n      \"operator\": \"daterange\",\n      \"field\": \"created_datetime\",\n      \"daterange\": {\n        \"start\": \"2012-01-25\",\n        \"end\": \"2012-01-30\"\n      }\n    }\n  ]\n})\n\nresponse = requests.post(\n  url, data=payload, headers=headers, auth=(username, password)\n)\n\nprint(response.text)"}]},"method":"post","params":[{"ref":"","required":false,"desc":"The ID of your connector.","default":"","type":"string","name":"connector_id","in":"body","_id":"56e18977a8306d29001ce8ae"}]},"category":"56d8457a9d27560b00a4cc17","createdAt":"2016-03-10T14:49:27.780Z","order":2,"parentDoc":null,"body":"[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.\",\n  \"title\": \"Asynchronous Endpoint\"\n}\n[/block]\n## Request Body\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Attribute\",\n    \"h-1\": \"Type\",\n    \"h-2\": \"Required\",\n    \"h-3\": \"Description\",\n    \"0-0\": \"filters\",\n    \"0-1\": \"list<[Filter](#section-filters)>\",\n    \"0-2\": \"True\",\n    \"0-3\": \"A list of the filters to use in the query\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n### Filters\n\nYou must supply at least 1 filter to find candidates. These filters have a schema of the form:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Attribute\",\n    \"h-1\": \"Type\",\n    \"h-2\": \"Required\",\n    \"h-3\": \"Description\",\n    \"0-0\": \"operator\",\n    \"0-1\": \"string\",\n    \"0-2\": \"True\",\n    \"0-3\": \"The [operator](#section-operators) to use in the filter\",\n    \"1-0\": \"field\",\n    \"2-0\": \"value\",\n    \"3-0\": \"daterange.start\",\n    \"1-1\": \"string\",\n    \"2-1\": \"string\",\n    \"4-0\": \"daterange.end\",\n    \"3-1\": \"date\",\n    \"4-1\": \"date\",\n    \"3-2\": \"True if `operator`is `daterange`\",\n    \"4-2\": \"True if `operator`is `daterange`\",\n    \"2-2\": \"True if `operator`is `==`\",\n    \"1-2\": \"True\",\n    \"1-3\": \"The [field](#section-fields) to filter on\",\n    \"2-3\": \"The value to filter by\",\n    \"3-3\": \"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD)\",\n    \"4-3\": \"An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD).\"\n  },\n  \"cols\": 4,\n  \"rows\": 5\n}\n[/block]\n### Operators\n* `==` - The provided `value` must be an exact match for the given `field`.\n* `daterange` - The value in the ATS of the `field` must be between the `start` and `end` dates given in the `daterange`.\n\n### Fields\n* `email` - The email address of the candidate you wish to find. \n* `created_datetime` - When the candidate was created.\n* `modified_datetime` - When the candidate was last modified.\n\n### Operator Attributes\n* `value` - Currently `value` should only be supplied if `operator` is `==`.\n* `daterange` - The timespan specified between `start` and `end` must be a maximum of 7 days. This *must* be populated when `operator` is `daterange`.\n    * `start` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD).\n    * `end` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD).\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"operator\\\": \\\"==\\\",\\n  \\\"field\\\": \\\"email\\\",\\n  \\\"value\\\": \\\"test@example.com\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Example email filter\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"operator\\\": \\\"daterange\\\",\\n  \\\"field\\\": \\\"created_datetime\\\",\\n  \\\"daterange\\\": {\\n    \\\"start\\\": \\\"2012-01-25\\\",\\n    \\\"end\\\": \\\"2012-01-30\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Example created_datetime filter\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\nWe can combine these to make a request for any candidates with the email address `test@example.com` created between `2012-01-25` and `2012-01-30`:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /v1/123/find_candidates HTTP/1.1\\nHost: api.rolepoint-connect.com\\nAccept: application/rolepoint.v2+json\\nContent-Type: application/rolepoint.v2+json\\nAuthorization: xxxxx\\n\\n{\\n  \\\"filters\\\": [\\n    {\\n      \\\"operator\\\": \\\"==\\\",\\n      \\\"field\\\": \\\"email\\\",\\n      \\\"value\\\": \\\"test@example.com\\\"\\n    },\\n    {\\n      \\\"operator\\\": \\\"daterange\\\",\\n      \\\"field\\\": \\\"created_datetime\\\",\\n      \\\"daterange\\\": {\\n        \\\"start\\\": \\\"2012-01-25\\\",\\n        \\\"end\\\": \\\"2012-01-30\\\"\\n      }\\n    }\\n  ]\\n}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]","editedParams":true,"githubsync":"","link_external":false,"type":"post","childrenPages":[]}

postFind Candidates

Runs a search of candidates and returns the IDs of candidates that match.

Body Params

connector_id:
string
The ID of your connector.
[block:callout] { "type": "info", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.", "title": "Asynchronous Endpoint" } [/block] ## Request Body [block:parameters] { "data": { "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-0": "filters", "0-1": "list<[Filter](#section-filters)>", "0-2": "True", "0-3": "A list of the filters to use in the query" }, "cols": 4, "rows": 1 } [/block] ### Filters You must supply at least 1 filter to find candidates. These filters have a schema of the form: [block:parameters] { "data": { "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-0": "operator", "0-1": "string", "0-2": "True", "0-3": "The [operator](#section-operators) to use in the filter", "1-0": "field", "2-0": "value", "3-0": "daterange.start", "1-1": "string", "2-1": "string", "4-0": "daterange.end", "3-1": "date", "4-1": "date", "3-2": "True if `operator`is `daterange`", "4-2": "True if `operator`is `daterange`", "2-2": "True if `operator`is `==`", "1-2": "True", "1-3": "The [field](#section-fields) to filter on", "2-3": "The value to filter by", "3-3": "An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD)", "4-3": "An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD)." }, "cols": 4, "rows": 5 } [/block] ### Operators * `==` - The provided `value` must be an exact match for the given `field`. * `daterange` - The value in the ATS of the `field` must be between the `start` and `end` dates given in the `daterange`. ### Fields * `email` - The email address of the candidate you wish to find. * `created_datetime` - When the candidate was created. * `modified_datetime` - When the candidate was last modified. ### Operator Attributes * `value` - Currently `value` should only be supplied if `operator` is `==`. * `daterange` - The timespan specified between `start` and `end` must be a maximum of 7 days. This *must* be populated when `operator` is `daterange`. * `start` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD). * `end` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD). [block:code] { "codes": [ { "code": "{\n \"operator\": \"==\",\n \"field\": \"email\",\n \"value\": \"test@example.com\"\n}", "language": "json", "name": "Example email filter" } ], "sidebar": true } [/block] [block:code] { "codes": [ { "code": "{\n \"operator\": \"daterange\",\n \"field\": \"created_datetime\",\n \"daterange\": {\n \"start\": \"2012-01-25\",\n \"end\": \"2012-01-30\"\n }\n}", "language": "json", "name": "Example created_datetime filter" } ], "sidebar": true } [/block] We can combine these to make a request for any candidates with the email address `test@example.com` created between `2012-01-25` and `2012-01-30`: [block:code] { "codes": [ { "code": "POST /v1/123/find_candidates HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\n\n{\n \"filters\": [\n {\n \"operator\": \"==\",\n \"field\": \"email\",\n \"value\": \"test@example.com\"\n },\n {\n \"operator\": \"daterange\",\n \"field\": \"created_datetime\",\n \"daterange\": {\n \"start\": \"2012-01-25\",\n \"end\": \"2012-01-30\"\n }\n }\n ]\n}", "language": "http" } ] } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



[block:callout] { "type": "info", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.", "title": "Asynchronous Endpoint" } [/block] ## Request Body [block:parameters] { "data": { "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-0": "filters", "0-1": "list<[Filter](#section-filters)>", "0-2": "True", "0-3": "A list of the filters to use in the query" }, "cols": 4, "rows": 1 } [/block] ### Filters You must supply at least 1 filter to find candidates. These filters have a schema of the form: [block:parameters] { "data": { "h-0": "Attribute", "h-1": "Type", "h-2": "Required", "h-3": "Description", "0-0": "operator", "0-1": "string", "0-2": "True", "0-3": "The [operator](#section-operators) to use in the filter", "1-0": "field", "2-0": "value", "3-0": "daterange.start", "1-1": "string", "2-1": "string", "4-0": "daterange.end", "3-1": "date", "4-1": "date", "3-2": "True if `operator`is `daterange`", "4-2": "True if `operator`is `daterange`", "2-2": "True if `operator`is `==`", "1-2": "True", "1-3": "The [field](#section-fields) to filter on", "2-3": "The value to filter by", "3-3": "An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD)", "4-3": "An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD)." }, "cols": 4, "rows": 5 } [/block] ### Operators * `==` - The provided `value` must be an exact match for the given `field`. * `daterange` - The value in the ATS of the `field` must be between the `start` and `end` dates given in the `daterange`. ### Fields * `email` - The email address of the candidate you wish to find. * `created_datetime` - When the candidate was created. * `modified_datetime` - When the candidate was last modified. ### Operator Attributes * `value` - Currently `value` should only be supplied if `operator` is `==`. * `daterange` - The timespan specified between `start` and `end` must be a maximum of 7 days. This *must* be populated when `operator` is `daterange`. * `start` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD). * `end` - An [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted date (YYYY-MM-DD). [block:code] { "codes": [ { "code": "{\n \"operator\": \"==\",\n \"field\": \"email\",\n \"value\": \"test@example.com\"\n}", "language": "json", "name": "Example email filter" } ], "sidebar": true } [/block] [block:code] { "codes": [ { "code": "{\n \"operator\": \"daterange\",\n \"field\": \"created_datetime\",\n \"daterange\": {\n \"start\": \"2012-01-25\",\n \"end\": \"2012-01-30\"\n }\n}", "language": "json", "name": "Example created_datetime filter" } ], "sidebar": true } [/block] We can combine these to make a request for any candidates with the email address `test@example.com` created between `2012-01-25` and `2012-01-30`: [block:code] { "codes": [ { "code": "POST /v1/123/find_candidates HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\n\n{\n \"filters\": [\n {\n \"operator\": \"==\",\n \"field\": \"email\",\n \"value\": \"test@example.com\"\n },\n {\n \"operator\": \"daterange\",\n \"field\": \"created_datetime\",\n \"daterange\": {\n \"start\": \"2012-01-25\",\n \"end\": \"2012-01-30\"\n }\n }\n ]\n}", "language": "http" } ] } [/block]
{"_id":"56e1c39fd2f9771900df1cf9","api":{"auth":"required","examples":{"codes":[{"code":"GET /v1/123/find_candidates/f586c5aa-842d-4e49-bcca-876a11e82ede/result HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx","language":"http"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\nrequest_id = ''\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/find_candidates/{}/result\".format(\n  connector_id, request_id\n)\n\nresponse = requests.get(url, auth=(username, password))\n\nprint(response.text)"}]},"method":"get","params":[{"ref":"","required":false,"type":"string","in":"query","_id":"56e1c39fd2f9771900df1cfb","default":"","desc":"The ID of your connector","name":"connector_id"},{"in":"path","_id":"56e1c39fd2f9771900df1cfa","ref":"","required":false,"desc":"The ID of the request as returned from the Find Candidates endpoint","default":"","type":"string","name":"request_id"}],"results":{"codes":[{"status":200,"language":"json","code":"{\"candidate_ids\": [\"1\", \"2\"]}","name":""}]},"settings":"","url":"/find_candidates/:request_id/result"},"body":"The result will be of the form:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"candidate_ids\\\": [\\\"1\\\", \\\"2\\\"]}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nThe list of `candidate_ids` are RolePoint Connect id's for\ncandidates found, which can be used in [get candidate](doc:get-candidate) requests, detailed below","isReference":true,"sync_unique":"","__v":0,"editedParams2":true,"link_external":false,"title":"Find Candidates Result","type":"get","version":"569e609aebbadc0d0079bed0","link_url":"","order":3,"slug":"find-candidates-result","category":"56d8457a9d27560b00a4cc17","editedParams":true,"excerpt":"","githubsync":"","hidden":false,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","updates":[],"createdAt":"2016-03-10T18:57:35.473Z","user":"56cc98fcb4cbcf0b004a6009","childrenPages":[]}

getFind Candidates Result


Path Params

request_id:
string
The ID of the request as returned from the Find Candidates endpoint

Query Params

connector_id:
string
The ID of your connector
The result will be of the form: [block:code] { "codes": [ { "code": "{\"candidate_ids\": [\"1\", \"2\"]}", "language": "json" } ] } [/block] The list of `candidate_ids` are RolePoint Connect id's for candidates found, which can be used in [get candidate](doc:get-candidate) requests, detailed below

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



The result will be of the form: [block:code] { "codes": [ { "code": "{\"candidate_ids\": [\"1\", \"2\"]}", "language": "json" } ] } [/block] The list of `candidate_ids` are RolePoint Connect id's for candidates found, which can be used in [get candidate](doc:get-candidate) requests, detailed below
{"_id":"56e1c2ce4241650e005b7c9f","body":"An asynchronous request to get the details of a candidate.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.\",\n  \"title\": \"Asynchronous Endpoint\"\n}\n[/block]","editedParams2":true,"excerpt":"Get a candidates details from the ATS using their ID","link_external":false,"updates":[],"title":"Get Candidate","__v":0,"category":"56d8457a9d27560b00a4cc17","githubsync":"","isReference":true,"link_url":"","slug":"get-candidate","sync_unique":"","version":"569e609aebbadc0d0079bed0","api":{"params":[{"type":"string","in":"query","_id":"56e1c2ce4241650e005b7ca1","default":"","desc":"The ID of your connector","name":"connector_id","ref":"","required":false},{"default":"","type":"string","name":"candidate_id","in":"path","_id":"56e1c2ce4241650e005b7ca0","ref":"","required":false,"desc":"The ID of the candidate, as returned by \"Find Candidate\" or \"Send Candidate\""}],"results":{"codes":[{"name":"","code":"{\"request_status_url\": \"https://api.rolepoint-connect.com/123/requests/456/status\"}","language":"json","status":200}]},"settings":"","url":"/candidate/:candidate_id","auth":"required","examples":{"codes":[{"language":"http","code":"GET /v1/123/candidate/2 HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nContent-Type: application/rolepoint.v2+json\nAuthorization: xxxxx\nX-RolePoint-Callback-Url: https://yourdomain.com/get-candidate-callback"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\ncandidate_id = ''\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/candidate/{}\".format(\n  connector_id, candidate_id\n)\n\nheaders = {\n  \"content-type\": \"application/rolepoint.v2+json\",\n  \"accept\": \"application/rolepoint.v2+json\",\n  'X-RolePoint-Callback-Url': 'https://example.com/find-candidates-callback'\n}\n\nresponse = requests.get(\n  url, headers=headers, auth=(username, password)\n)\n\nprint(response.text)"}]},"method":"get"},"editedParams":true,"hidden":false,"createdAt":"2016-03-10T18:54:06.103Z","order":4,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","type":"get","user":"56cc98fcb4cbcf0b004a6009","childrenPages":[]}

getGet Candidate

Get a candidates details from the ATS using their ID

Path Params

candidate_id:
string
The ID of the candidate, as returned by "Find Candidate" or "Send Candidate"

Query Params

connector_id:
string
The ID of your connector
An asynchronous request to get the details of a candidate. [block:callout] { "type": "info", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.", "title": "Asynchronous Endpoint" } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



An asynchronous request to get the details of a candidate. [block:callout] { "type": "info", "body": "This endpoint is asynchronous. See the [Asynchronous Requests](doc:asynchronous-requests) documentation for more details.", "title": "Asynchronous Endpoint" } [/block]
{"_id":"56e1c36936b3bb3400cd0b08","excerpt":"","isReference":true,"link_url":"","createdAt":"2016-03-10T18:56:41.703Z","githubsync":"","project":"569e6099ebbadc0d0079becd","api":{"url":"/get_candidate/:request_id/result","auth":"required","examples":{"codes":[{"language":"http","code":"GET /v1/123/get_candidate/f586c5aa-842d-4e49-bcca-876a11e82ede/result HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\nrequest_id = ''\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/get_candidate/{}/result\".format(\n  connector_id, request_id\n)\n\nresponse = requests.get(url, auth=(username, password))\n\nprint(response.text)"}]},"method":"get","params":[{"_id":"56e1c36936b3bb3400cd0b0a","default":"","desc":"The ID of your connector","name":"connector_id","ref":"","required":false,"type":"string","in":"query"},{"in":"path","_id":"56e1c36936b3bb3400cd0b09","default":"","desc":"The ID of the request that was returned from the Get Candidate endpoint.","name":"request_id","ref":"","required":false,"type":"string"}],"results":{"codes":[{"language":"json","status":200,"name":"","code":"{\n  \"candidate\": {\n    \"email\": \"test+candidate@test.com\",\n    \"first_name\": \"Test\",\n    \"last_name\": \"Candidate\",\n    \"last_updated\": \"\",\n    \"phone\": \"+447999 999 999\",\n    \"source\": \"RolePoint Careers\"\n  }\n}"}]},"settings":""},"body":"The form of the result of the Get Candidate task is dependent on the ATS and\nthe Connector Configuration. The only guaranteed fields are `first_name`,\n'last_name`, 'last_updated` and `email`.\n\nThe entirety of the possible response is as documented below, for a description of required/response_optional see [schema](#schema):\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"candidate\\\": {\\n    \\\"email\\\": required - <string>\\n    \\\"first_name\\\": required - <string>,\\n    \\\"last_name\\\": required - <string>,\\n    \\\"last_updated\\\": required - <string>,\\n    \\\"phone\\\": optional - <string>,\\n    \\\"referrer\\\": optional - <string>,\\n    \\\"source\\\": optional - <string>\\n  }\\n}\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nWhere:\n\n* `email` - The email of the candidate\n* `first_name` - The first name of the candidate\n* `last_name` - The last name of the candidate\n* `last_updated` - The last time that the candidate was updated, formatted in a\n    string according to [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)\n* `phone` - The contact phone number of the candidate\n* `referrer` - The referrer that referred the candidate\n* `source` - The source that was in the session when the candidate was created","link_external":false,"order":5,"parentDoc":null,"sync_unique":"","title":"Get Candidate Result","editedParams":true,"editedParams2":true,"hidden":false,"type":"get","updates":[],"user":"56cc98fcb4cbcf0b004a6009","version":"569e609aebbadc0d0079bed0","__v":0,"category":"56d8457a9d27560b00a4cc17","slug":"get-candidate-result","childrenPages":[]}

getGet Candidate Result


Path Params

request_id:
string
The ID of the request that was returned from the Get Candidate endpoint.

Query Params

connector_id:
string
The ID of your connector
The form of the result of the Get Candidate task is dependent on the ATS and the Connector Configuration. The only guaranteed fields are `first_name`, 'last_name`, 'last_updated` and `email`. The entirety of the possible response is as documented below, for a description of required/response_optional see [schema](#schema): [block:code] { "codes": [ { "code": "{\n \"candidate\": {\n \"email\": required - <string>\n \"first_name\": required - <string>,\n \"last_name\": required - <string>,\n \"last_updated\": required - <string>,\n \"phone\": optional - <string>,\n \"referrer\": optional - <string>,\n \"source\": optional - <string>\n }\n}", "language": "python" } ] } [/block] Where: * `email` - The email of the candidate * `first_name` - The first name of the candidate * `last_name` - The last name of the candidate * `last_updated` - The last time that the candidate was updated, formatted in a string according to [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) * `phone` - The contact phone number of the candidate * `referrer` - The referrer that referred the candidate * `source` - The source that was in the session when the candidate was created

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



The form of the result of the Get Candidate task is dependent on the ATS and the Connector Configuration. The only guaranteed fields are `first_name`, 'last_name`, 'last_updated` and `email`. The entirety of the possible response is as documented below, for a description of required/response_optional see [schema](#schema): [block:code] { "codes": [ { "code": "{\n \"candidate\": {\n \"email\": required - <string>\n \"first_name\": required - <string>,\n \"last_name\": required - <string>,\n \"last_updated\": required - <string>,\n \"phone\": optional - <string>,\n \"referrer\": optional - <string>,\n \"source\": optional - <string>\n }\n}", "language": "python" } ] } [/block] Where: * `email` - The email of the candidate * `first_name` - The first name of the candidate * `last_name` - The last name of the candidate * `last_updated` - The last time that the candidate was updated, formatted in a string according to [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) * `phone` - The contact phone number of the candidate * `referrer` - The referrer that referred the candidate * `source` - The source that was in the session when the candidate was created
{"_id":"56e1647e7e3fc43600cad433","project":"569e6099ebbadc0d0079becd","title":"Async Request Status","__v":0,"createdAt":"2016-03-10T12:11:42.867Z","editedParams":true,"hidden":false,"isReference":true,"category":"56d8457a9d27560b00a4cc17","editedParams2":true,"githubsync":"","link_external":false,"type":"get","parentDoc":null,"slug":"get-async-request-status","user":"56cc98fcb4cbcf0b004a6009","body":"[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback, we reduce the need to make several needless connections over what could be an extended period of time.\",\n  \"title\": \"Polling not recommended\"\n}\n[/block]\nTo get the status of creation of an asynchronous request, you can query the\n`request_status_url` provided when the request was created.\n\nAs part of the response, we include an `X-Poll-Interval` header which specifies how long (in seconds) until you are allowed to make another request.\n\nFor example:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"GET /v1/123/requests/f586c5aa-842d-4e49-bcca-876a11e82ede/status HTTP/1.1\\nHost: api.rolepoint-connect.com\\nAccept: application/rolepoint.v2+json\\nAuthorization: xxxxx\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nIf the request is still in progress, this will respond:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 200 OK\\nStatus: 200 OK\\nContent-Type: application/rolepoint.v2+json\\n\\n{\\n  \\\"status\\\": \\\"in_progress\\\",\\n  \\\"result_info\\\": null,\\n  \\\"error_info\\\": null\\n}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nIf the request is finished, this will respond:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 200 OK\\nStatus: 200 OK\\nContent-Type: application/rolepoint.v2+json\\n\\n{\\n  \\\"status\\\": \\\"complete\\\",\\n  \\\"result_info\\\": {\\n    \\\"url\\\": \\\"https://api.rolepoint-connect.com/\\\",\\n    \\\"ttl\\\": 123\\n  },\\n  \\\"error_info\\\": null\\n}\\n\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n`result_info` contains 2 fields:\n\n* `url` - This is the URL you can query to get the result of the application\n  creation.\n* `ttl` - This is the time that the application result will remain available\n  for in seconds.\n\nA failed response will contain the following fields:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"HTTP/1.1 200 OK\\nStatus: 200 OK\\nContent-Type: application/rolepoint.v2+json\\n\\n{\\n  \\\"status\\\": \\\"failed\\\",\\n  \\\"result_info\\\": {\\n    \\\"url\\\": null,\\n    \\\"ttl\\\": 123\\n  },\\n  \\\"error_info\\\": {\\n    \\\"message\\\": \\\"Message describing the error that occured\\\",\\n    \\\"code\\\": 123\\n  }\\n}\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\n`error_info` contains 2 fields:\n\n* `message` - This is the error message relating to the reason the request\n    failed.\n* `code` - This is the error code relating to the reason the request failed.","excerpt":"Endpoint for getting the status of an asynchronous request","link_url":"","order":6,"api":{"auth":"required","examples":{"codes":[{"language":"http","code":"GET /v1/123/requests/f586c5aa-842d-4e49-bcca-876a11e82ede/status HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx"},{"language":"python","code":"import json\nimport requests\n\nconnector_id = '123'\nusername = 'username'\npassword = 'password'\nrequest_id = ''\n\nurl = \"https://api.rolepoint-connect.com/v1/{}/requests/{}/status\".format(\n  connector_id, request_id\n)\n\nresponse = requests.get(url, auth=(username, password))\n\nprint(response.text)"}]},"method":"get","params":[{"name":"connector_id","ref":"","required":false,"type":"string","in":"query","_id":"56e1647e7e3fc43600cad435","default":"","desc":"The ID of your connector."},{"name":"request_id","in":"path","_id":"56e1647e7e3fc43600cad434","ref":"","required":false,"desc":"The ID of the asynchronous request as returned in the initial request.","default":"","type":"string"}],"results":{"codes":[{"name":"In progress","code":"{\n  \"status\": \"in_progress\",\n  \"result_info\": null,\n  \"error_info\": null\n}","language":"json","status":200},{"name":null,"code":"{\n  \"status\": \"complete\",\n  \"result_info\": {\n    \"url\": \"https://api.rolepoint-connect.com/\",\n    \"ttl\": 123\n  },\n  \"error_info\": null\n}","language":"json","status":200},{"language":"json","status":200,"name":"Failed","code":"{\n  \"status\": \"failed\",\n  \"result_info\": {\n    \"url\": null,\n    \"ttl\": 123\n  },\n  \"error_info\": {\n    \"message\": \"Message describing the error that occured\",\n    \"code\": 123\n  }\n}"}]},"settings":"","url":"/requests/:request_id/status"},"sync_unique":"","updates":[],"version":"569e609aebbadc0d0079bed0","childrenPages":[]}

getAsync Request Status

Endpoint for getting the status of an asynchronous request

Path Params

request_id:
string
The ID of the asynchronous request as returned in the initial request.

Query Params

connector_id:
string
The ID of your connector.
[block:callout] { "type": "warning", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback, we reduce the need to make several needless connections over what could be an extended period of time.", "title": "Polling not recommended" } [/block] To get the status of creation of an asynchronous request, you can query the `request_status_url` provided when the request was created. As part of the response, we include an `X-Poll-Interval` header which specifies how long (in seconds) until you are allowed to make another request. For example: [block:code] { "codes": [ { "code": "GET /v1/123/requests/f586c5aa-842d-4e49-bcca-876a11e82ede/status HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx", "language": "http" } ] } [/block] If the request is still in progress, this will respond: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"in_progress\",\n \"result_info\": null,\n \"error_info\": null\n}", "language": "http" } ] } [/block] If the request is finished, this will respond: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"complete\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/\",\n \"ttl\": 123\n },\n \"error_info\": null\n}\n", "language": "http" } ] } [/block] `result_info` contains 2 fields: * `url` - This is the URL you can query to get the result of the application creation. * `ttl` - This is the time that the application result will remain available for in seconds. A failed response will contain the following fields: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"failed\",\n \"result_info\": {\n \"url\": null,\n \"ttl\": 123\n },\n \"error_info\": {\n \"message\": \"Message describing the error that occured\",\n \"code\": 123\n }\n}", "language": "http" } ] } [/block] `error_info` contains 2 fields: * `message` - This is the error message relating to the reason the request failed. * `code` - This is the error code relating to the reason the request failed.

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



[block:callout] { "type": "warning", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could potentially take a while to process. By sending a callback, we reduce the need to make several needless connections over what could be an extended period of time.", "title": "Polling not recommended" } [/block] To get the status of creation of an asynchronous request, you can query the `request_status_url` provided when the request was created. As part of the response, we include an `X-Poll-Interval` header which specifies how long (in seconds) until you are allowed to make another request. For example: [block:code] { "codes": [ { "code": "GET /v1/123/requests/f586c5aa-842d-4e49-bcca-876a11e82ede/status HTTP/1.1\nHost: api.rolepoint-connect.com\nAccept: application/rolepoint.v2+json\nAuthorization: xxxxx", "language": "http" } ] } [/block] If the request is still in progress, this will respond: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"in_progress\",\n \"result_info\": null,\n \"error_info\": null\n}", "language": "http" } ] } [/block] If the request is finished, this will respond: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"complete\",\n \"result_info\": {\n \"url\": \"https://api.rolepoint-connect.com/\",\n \"ttl\": 123\n },\n \"error_info\": null\n}\n", "language": "http" } ] } [/block] `result_info` contains 2 fields: * `url` - This is the URL you can query to get the result of the application creation. * `ttl` - This is the time that the application result will remain available for in seconds. A failed response will contain the following fields: [block:code] { "codes": [ { "code": "HTTP/1.1 200 OK\nStatus: 200 OK\nContent-Type: application/rolepoint.v2+json\n\n{\n \"status\": \"failed\",\n \"result_info\": {\n \"url\": null,\n \"ttl\": 123\n },\n \"error_info\": {\n \"message\": \"Message describing the error that occured\",\n \"code\": 123\n }\n}", "language": "http" } ] } [/block] `error_info` contains 2 fields: * `message` - This is the error message relating to the reason the request failed. * `code` - This is the error code relating to the reason the request failed.
{"_id":"56df08b4b9d68f0e0073d7c2","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":"","url":""},"sync_unique":"","version":"569e609aebbadc0d0079bed0","parentDoc":null,"project":"569e6099ebbadc0d0079becd","category":"56df07cc0201330e0070f15b","createdAt":"2016-03-08T17:15:32.760Z","link_external":false,"link_url":"","order":0,"slug":"get-jobs-and-insert-candidates","title":"Get Jobs and Insert Candidate","type":"basic","updates":[],"__v":46,"excerpt":"","githubsync":"","hidden":false,"next":{"pages":[],"description":""},"user":"543d38fea10ab32000b3aa8f","body":"With Connect, it's simple to get job listings from the remote ATS then use those job details to insert candidate applications. \n\n## Getting Jobs \n\nJob listings are provided through Connect sending job details to a preconfigured [webhook](doc:webhooks). This is done periodically to ensure you always have the most up to date job postings from the ATS. First you need to setup an endpoint to receive the webhook events, as shown below.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('random_webhook_url')\\ndef jobs_webhook_handler():\\n    for event in request.get_json(force=True):\\n        if event['event'] == 'job_add':\\n          # handle the job add event, for instance adding it to your database\\n            \\n\\t\\t# We return an empty response to Connect as it will retry callbacks otherwise.\\n    return '', 200\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nThis data can then be used to create an application form for current job postings. \n\n## Inserting Candidates\n\nWhen a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/make_application', methods=['POST'])\\ndef make_application():\\n\\n    # Build our payload to include our candidate and the job they are applying\\n    # for.\\n    payload = {\\n      \\t'applications': [{'job_id': request.form['job_id']}],\\n      \\t'candidate': {\\n            'first_name': request.form['first_name'],\\n            'last_name': request.form['last_name'],\\n            'email': request.form['email']\\n        }\\n   \\t}\\n\\n    # We can choose to either include a callback header with our\\n    # request, or to poll until the application is complete. Here\\n    # we use the callback funtionality.\\n    headers = {\\n        'content-type': 'application/rolepoint.v2+json',\\n        'x-rolepoint-callback-url': url_for(\\n            'application_processed_callback', app_id=1, _external=True\\n        )\\n    }\\n    # Send the candidate to Connect for processing.\\n    requests.post(CONNECT_URL + '/candidate',\\n                  json=payload, auth=AUTH, headers=headers)\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nAs inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \\n\\nDon't worry, we'll let you know when it's done! :smile:\",\n  \"title\": \"Use Callbacks\"\n}\n[/block]\n## Candidate Application Complete Callback\n\nWe define this callback endpoint as below.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\\ndef application_processed_callback(app_id):\\n    status = request.json['status']\\n    JOB_APPLICATIONS[app_id]['status'] = status\\n\\n    if status == 'complete':\\n        # The application has been processed and made it into the ATS.\\n        # As part of the response we are given a URL from where we can \\n        # request the details of the processed candidate.\\n        url = request.json['result_info']['url']\\n        # Now we request the final details of the processed candidate\\n        result = requests.get(url, auth=AUTH)\\n        json = result.json()\\n        # Save the processed candidate details \\n\\n    # We return an empty response to Connect as it will retry callbacks otherwise.\\n    return '', 200\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nThe candidate has now been inserted into the ATS.\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Example Code\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:textarea]\n{\n  \"text\": \"For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:embed]\n{\n  \"html\": false,\n  \"url\": \"https://github.com/rolepoint/connect-examples/tree/master/get-jobs-and-insert-candidates\",\n  \"title\": \"rolepoint/connect-examples\",\n  \"favicon\": \"https://assets-cdn.github.com/favicon.ico\",\n  \"image\": \"https://avatars3.githubusercontent.com/u/2790791?v=3&s=400\",\n  \"sidebar\": true\n}\n[/block]","isReference":false,"childrenPages":[]}

Get Jobs and Insert Candidate


With Connect, it's simple to get job listings from the remote ATS then use those job details to insert candidate applications. ## Getting Jobs Job listings are provided through Connect sending job details to a preconfigured [webhook](doc:webhooks). This is done periodically to ensure you always have the most up to date job postings from the ATS. First you need to setup an endpoint to receive the webhook events, as shown below. [block:code] { "codes": [ { "code": "@app.route('random_webhook_url')\ndef jobs_webhook_handler():\n for event in request.get_json(force=True):\n if event['event'] == 'job_add':\n # handle the job add event, for instance adding it to your database\n \n\t\t# We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] This data can then be used to create an application form for current job postings. ## Inserting Candidates When a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request. [block:code] { "codes": [ { "code": "@app.route('/make_application', methods=['POST'])\ndef make_application():\n\n # Build our payload to include our candidate and the job they are applying\n # for.\n payload = {\n \t'applications': [{'job_id': request.form['job_id']}],\n \t'candidate': {\n 'first_name': request.form['first_name'],\n 'last_name': request.form['last_name'],\n 'email': request.form['email']\n }\n \t}\n\n # We can choose to either include a callback header with our\n # request, or to poll until the application is complete. Here\n # we use the callback funtionality.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'application_processed_callback', app_id=1, _external=True\n )\n }\n # Send the candidate to Connect for processing.\n requests.post(CONNECT_URL + '/candidate',\n json=payload, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] As inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete. [block:callout] { "type": "info", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:", "title": "Use Callbacks" } [/block] ## Candidate Application Complete Callback We define this callback endpoint as below. [block:code] { "codes": [ { "code": "@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\ndef application_processed_callback(app_id):\n status = request.json['status']\n JOB_APPLICATIONS[app_id]['status'] = status\n\n if status == 'complete':\n # The application has been processed and made it into the ATS.\n # As part of the response we are given a URL from where we can \n # request the details of the processed candidate.\n url = request.json['result_info']['url']\n # Now we request the final details of the processed candidate\n result = requests.get(url, auth=AUTH)\n json = result.json()\n # Save the processed candidate details \n\n # We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] The candidate has now been inserted into the ATS. [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/get-jobs-and-insert-candidates", "title": "rolepoint/connect-examples", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars3.githubusercontent.com/u/2790791?v=3&s=400", "sidebar": true } [/block]
With Connect, it's simple to get job listings from the remote ATS then use those job details to insert candidate applications. ## Getting Jobs Job listings are provided through Connect sending job details to a preconfigured [webhook](doc:webhooks). This is done periodically to ensure you always have the most up to date job postings from the ATS. First you need to setup an endpoint to receive the webhook events, as shown below. [block:code] { "codes": [ { "code": "@app.route('random_webhook_url')\ndef jobs_webhook_handler():\n for event in request.get_json(force=True):\n if event['event'] == 'job_add':\n # handle the job add event, for instance adding it to your database\n \n\t\t# We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] This data can then be used to create an application form for current job postings. ## Inserting Candidates When a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request. [block:code] { "codes": [ { "code": "@app.route('/make_application', methods=['POST'])\ndef make_application():\n\n # Build our payload to include our candidate and the job they are applying\n # for.\n payload = {\n \t'applications': [{'job_id': request.form['job_id']}],\n \t'candidate': {\n 'first_name': request.form['first_name'],\n 'last_name': request.form['last_name'],\n 'email': request.form['email']\n }\n \t}\n\n # We can choose to either include a callback header with our\n # request, or to poll until the application is complete. Here\n # we use the callback funtionality.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'application_processed_callback', app_id=1, _external=True\n )\n }\n # Send the candidate to Connect for processing.\n requests.post(CONNECT_URL + '/candidate',\n json=payload, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] As inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete. [block:callout] { "type": "info", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:", "title": "Use Callbacks" } [/block] ## Candidate Application Complete Callback We define this callback endpoint as below. [block:code] { "codes": [ { "code": "@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\ndef application_processed_callback(app_id):\n status = request.json['status']\n JOB_APPLICATIONS[app_id]['status'] = status\n\n if status == 'complete':\n # The application has been processed and made it into the ATS.\n # As part of the response we are given a URL from where we can \n # request the details of the processed candidate.\n url = request.json['result_info']['url']\n # Now we request the final details of the processed candidate\n result = requests.get(url, auth=AUTH)\n json = result.json()\n # Save the processed candidate details \n\n # We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] The candidate has now been inserted into the ATS. [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/get-jobs-and-insert-candidates", "title": "rolepoint/connect-examples", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars3.githubusercontent.com/u/2790791?v=3&s=400", "sidebar": true } [/block]
{"_id":"56e5addb4594f71700fcccbb","createdAt":"2016-03-13T18:13:47.953Z","link_url":"","order":1,"slug":"find-candidates-and-retrieve-their-details","updates":[],"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","url":""},"category":"56df07cc0201330e0070f15b","hidden":false,"__v":19,"body":"Connect makes it easy to search for candidates in your ATS and retrieve their details. In this example, we show how to search for a candidate using their email address, then get the details of any candidates found.\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Use Callbacks\",\n  \"body\": \"Both searching for candidates and retrieving their details are [asynchronous endpoints](doc:asynchronous-requests). When using these, we recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback, we reduce the need to make several needless connections over an extended period of time. \\n\\nDon't worry, we'll let you know when it's done! :smile:\"\n}\n[/block]\n## Searching for Candidates\n\nTo search for a candidate using Connect we need to issue a `POST` request to the [Find Candidates](doc:find-candidates) endpoint. As this is an [asynchronous endpoint](doc:asynchronous-requests) we recommend using the callback functionality of Connect.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"def search_connect_by_email(email, search_id):\\n  # First we need to build our filter in the format Connect expects\\n  query = {'filters': [{'operator': '==', 'field': 'email', 'value': email}]}\\n  \\n  # Next setup the headers, including a callback header so Connect\\n  # can notify you when it finishes processing.\\n  headers = {\\n    'content-type': 'application/rolepoint.v2+json',\\n    'x-rolepoint-callback-url': url_for(\\n      'search_complete_callback',\\n      search_id=search_id, _external=True\\n    )\\n  }\\n  \\n  # Finally issue a post request to Connect\\n  requests.post(\\n    CONNECT_URL + '/v1/{}/find_candidates'.format(CONFIG['connector_id']),\\n    json=query, auth=AUTH, headers=headers\\n  )\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nNext we need to setup an endpoint to process the callback from Connect.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/search_complete_callback/<int:search_id>', methods=['POST'])\\ndef search_complete_callback(search_id):\\n    \\\"\\\"\\\"\\n    An endpoint for handling Connect find_candidates callbacks.\\n    Here we update our Search with the status or the search, and the found\\n    candidate_ids.\\n    \\\"\\\"\\\"\\n    # We get the result of the search\\n    if request.json['status'] == 'complete':\\n        result = requests.get(request.json['result_info']['url'], auth=AUTH)\\n        candidate_ids = result.json()['candidate_ids']\\n        # We now have a list of strings which correspond to candidate ID's\\n        # in Connect. We can use these ID's to then query for the candidate\\n        # details, as shown below.\\n\\n    # Return an empty response to Connect as it will retry callbacks\\n    # otherwise.\\n    return '', 200\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\n## Retrieving Candidate Details\n\nWe can use the candidate IDs found using the search shown above to then query Connect for the candidate details. This is done using the [Get Candidate](doc:get-candidate) endpoint. Once again, this is an asynchronous endpoint and we recommend using the callback functionality. The endpoint is a simple `GET` request, as shown below.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"def get_candidate(candidate_id):\\n\\t  # Setup headers, including a callback header so Connect\\n  \\t# can notify you when it finishes processing.\\n    headers = {\\n        'content-type': 'application/rolepoint.v2+json',\\n        'x-rolepoint-callback-url': url_for(\\n            'get_candidate_complete_callback',\\n            candidate_id=candidate_id, _external=True\\n        )\\n    }\\n\\n    url = '/v1/{}/candidate/{}'.format(CONFIG['connector_id'], candidate_id)\\n    requests.get(CONNECT_URL + url, auth=AUTH, headers=headers)\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nWe then need to setup a callback URL and retrieve the [final result](doc:get-candidate-result) of the `Get Candidate` query containing the candidates details. \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/get_candidate_complete_callback/<int:candidate_id>', methods=['POST'])\\ndef get_candidate_complete_callback(candidate_id):\\n    # Get the result of the get_candidate call.\\n    if status = request.json['status'] == 'complete':\\n        result = requests.get(request.json['result_info']['url'], auth=AUTH)\\n        candidate_details = result.json()\\n        # You now have the candidate details.\\n\\n    # Return an empty response to Connect as it will retry callbacks\\n    # otherwise.\\n    return '', 200\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nWe have now retrieved the candidate details.\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Example Code\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:textarea]\n{\n  \"text\": \"For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:embed]\n{\n  \"html\": false,\n  \"url\": \"https://github.com/rolepoint/connect-examples/tree/master/find-candidates-and-retrieve-their-details\",\n  \"title\": \"Find Candidates Example\",\n  \"favicon\": \"https://github.com/favicon.ico\",\n  \"sidebar\": true\n}\n[/block]","parentDoc":null,"project":"569e6099ebbadc0d0079becd","sync_unique":"","type":"basic","excerpt":"","githubsync":"","isReference":false,"link_external":false,"title":"Find Candidates and Retrieve Their Details","user":"543d38fea10ab32000b3aa8f","version":"569e609aebbadc0d0079bed0","childrenPages":[]}

Find Candidates and Retrieve Their Details


Connect makes it easy to search for candidates in your ATS and retrieve their details. In this example, we show how to search for a candidate using their email address, then get the details of any candidates found. [block:callout] { "type": "info", "title": "Use Callbacks", "body": "Both searching for candidates and retrieving their details are [asynchronous endpoints](doc:asynchronous-requests). When using these, we recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback, we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:" } [/block] ## Searching for Candidates To search for a candidate using Connect we need to issue a `POST` request to the [Find Candidates](doc:find-candidates) endpoint. As this is an [asynchronous endpoint](doc:asynchronous-requests) we recommend using the callback functionality of Connect. [block:code] { "codes": [ { "code": "def search_connect_by_email(email, search_id):\n # First we need to build our filter in the format Connect expects\n query = {'filters': [{'operator': '==', 'field': 'email', 'value': email}]}\n \n # Next setup the headers, including a callback header so Connect\n # can notify you when it finishes processing.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'search_complete_callback',\n search_id=search_id, _external=True\n )\n }\n \n # Finally issue a post request to Connect\n requests.post(\n CONNECT_URL + '/v1/{}/find_candidates'.format(CONFIG['connector_id']),\n json=query, auth=AUTH, headers=headers\n )", "language": "python" } ] } [/block] Next we need to setup an endpoint to process the callback from Connect. [block:code] { "codes": [ { "code": "@app.route('/search_complete_callback/<int:search_id>', methods=['POST'])\ndef search_complete_callback(search_id):\n \"\"\"\n An endpoint for handling Connect find_candidates callbacks.\n Here we update our Search with the status or the search, and the found\n candidate_ids.\n \"\"\"\n # We get the result of the search\n if request.json['status'] == 'complete':\n result = requests.get(request.json['result_info']['url'], auth=AUTH)\n candidate_ids = result.json()['candidate_ids']\n # We now have a list of strings which correspond to candidate ID's\n # in Connect. We can use these ID's to then query for the candidate\n # details, as shown below.\n\n # Return an empty response to Connect as it will retry callbacks\n # otherwise.\n return '', 200", "language": "python" } ] } [/block] ## Retrieving Candidate Details We can use the candidate IDs found using the search shown above to then query Connect for the candidate details. This is done using the [Get Candidate](doc:get-candidate) endpoint. Once again, this is an asynchronous endpoint and we recommend using the callback functionality. The endpoint is a simple `GET` request, as shown below. [block:code] { "codes": [ { "code": "def get_candidate(candidate_id):\n\t # Setup headers, including a callback header so Connect\n \t# can notify you when it finishes processing.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'get_candidate_complete_callback',\n candidate_id=candidate_id, _external=True\n )\n }\n\n url = '/v1/{}/candidate/{}'.format(CONFIG['connector_id'], candidate_id)\n requests.get(CONNECT_URL + url, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] We then need to setup a callback URL and retrieve the [final result](doc:get-candidate-result) of the `Get Candidate` query containing the candidates details. [block:code] { "codes": [ { "code": "@app.route('/get_candidate_complete_callback/<int:candidate_id>', methods=['POST'])\ndef get_candidate_complete_callback(candidate_id):\n # Get the result of the get_candidate call.\n if status = request.json['status'] == 'complete':\n result = requests.get(request.json['result_info']['url'], auth=AUTH)\n candidate_details = result.json()\n # You now have the candidate details.\n\n # Return an empty response to Connect as it will retry callbacks\n # otherwise.\n return '', 200", "language": "python" } ] } [/block] We have now retrieved the candidate details. [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/find-candidates-and-retrieve-their-details", "title": "Find Candidates Example", "favicon": "https://github.com/favicon.ico", "sidebar": true } [/block]
Connect makes it easy to search for candidates in your ATS and retrieve their details. In this example, we show how to search for a candidate using their email address, then get the details of any candidates found. [block:callout] { "type": "info", "title": "Use Callbacks", "body": "Both searching for candidates and retrieving their details are [asynchronous endpoints](doc:asynchronous-requests). When using these, we recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback, we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:" } [/block] ## Searching for Candidates To search for a candidate using Connect we need to issue a `POST` request to the [Find Candidates](doc:find-candidates) endpoint. As this is an [asynchronous endpoint](doc:asynchronous-requests) we recommend using the callback functionality of Connect. [block:code] { "codes": [ { "code": "def search_connect_by_email(email, search_id):\n # First we need to build our filter in the format Connect expects\n query = {'filters': [{'operator': '==', 'field': 'email', 'value': email}]}\n \n # Next setup the headers, including a callback header so Connect\n # can notify you when it finishes processing.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'search_complete_callback',\n search_id=search_id, _external=True\n )\n }\n \n # Finally issue a post request to Connect\n requests.post(\n CONNECT_URL + '/v1/{}/find_candidates'.format(CONFIG['connector_id']),\n json=query, auth=AUTH, headers=headers\n )", "language": "python" } ] } [/block] Next we need to setup an endpoint to process the callback from Connect. [block:code] { "codes": [ { "code": "@app.route('/search_complete_callback/<int:search_id>', methods=['POST'])\ndef search_complete_callback(search_id):\n \"\"\"\n An endpoint for handling Connect find_candidates callbacks.\n Here we update our Search with the status or the search, and the found\n candidate_ids.\n \"\"\"\n # We get the result of the search\n if request.json['status'] == 'complete':\n result = requests.get(request.json['result_info']['url'], auth=AUTH)\n candidate_ids = result.json()['candidate_ids']\n # We now have a list of strings which correspond to candidate ID's\n # in Connect. We can use these ID's to then query for the candidate\n # details, as shown below.\n\n # Return an empty response to Connect as it will retry callbacks\n # otherwise.\n return '', 200", "language": "python" } ] } [/block] ## Retrieving Candidate Details We can use the candidate IDs found using the search shown above to then query Connect for the candidate details. This is done using the [Get Candidate](doc:get-candidate) endpoint. Once again, this is an asynchronous endpoint and we recommend using the callback functionality. The endpoint is a simple `GET` request, as shown below. [block:code] { "codes": [ { "code": "def get_candidate(candidate_id):\n\t # Setup headers, including a callback header so Connect\n \t# can notify you when it finishes processing.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'get_candidate_complete_callback',\n candidate_id=candidate_id, _external=True\n )\n }\n\n url = '/v1/{}/candidate/{}'.format(CONFIG['connector_id'], candidate_id)\n requests.get(CONNECT_URL + url, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] We then need to setup a callback URL and retrieve the [final result](doc:get-candidate-result) of the `Get Candidate` query containing the candidates details. [block:code] { "codes": [ { "code": "@app.route('/get_candidate_complete_callback/<int:candidate_id>', methods=['POST'])\ndef get_candidate_complete_callback(candidate_id):\n # Get the result of the get_candidate call.\n if status = request.json['status'] == 'complete':\n result = requests.get(request.json['result_info']['url'], auth=AUTH)\n candidate_details = result.json()\n # You now have the candidate details.\n\n # Return an empty response to Connect as it will retry callbacks\n # otherwise.\n return '', 200", "language": "python" } ] } [/block] We have now retrieved the candidate details. [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/find-candidates-and-retrieve-their-details", "title": "Find Candidates Example", "favicon": "https://github.com/favicon.ico", "sidebar": true } [/block]
{"_id":"56e82082bfb2023600f61323","api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"parentDoc":null,"version":"569e609aebbadc0d0079bed0","link_url":"","title":"Insert Candidates and Track Status","__v":11,"body":"Connect makes it easy to insert candidates to your ATS, then get notifications whenever their status changes.\n\n## Inserting Candidates\n\nWhen a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/make_application', methods=['POST'])\\ndef make_application():\\n\\n    # Build our payload to include our candidate and the job they are applying\\n    # for.\\n    payload = {\\n      \\t'applications': [{'job_id': request.form['job_id']}],\\n      \\t'candidate': {\\n            'first_name': request.form['first_name'],\\n            'last_name': request.form['last_name'],\\n            'email': request.form['email']\\n        }\\n   \\t}\\n\\n    # We can choose to either include a callback header with our\\n    # request, or to poll until the application is complete. Here\\n    # we use the callback funtionality.\\n    headers = {\\n        'content-type': 'application/rolepoint.v2+json',\\n        'x-rolepoint-callback-url': url_for(\\n            'application_processed_callback', app_id=1, _external=True\\n        )\\n    }\\n    # Send the candidate to Connect for processing.\\n    requests.post(CONNECT_URL + '/candidate',\\n                  json=payload, auth=AUTH, headers=headers)\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nAs inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \\n\\nDon't worry, we'll let you know when it's done! :smile:\",\n  \"title\": \"Use Callbacks\"\n}\n[/block]\n## Candidate Application Complete Callback\n\nWe define this callback endpoint as below.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\\ndef application_processed_callback(app_id):\\n    status = request.json['status']\\n    JOB_APPLICATIONS[app_id]['status'] = status\\n\\n    if status == 'complete':\\n        # The application has been processed and made it into the ATS.\\n        # As part of the response we are given a URL from where we can \\n        # request the details of the processed candidate.\\n        url = request.json['result_info']['url']\\n        # Now we request the final details of the processed candidate\\n        result = requests.get(url, auth=AUTH)\\n        json = result.json()\\n        candidate_id = json['candidate_id']\\n        # Save the processed candidate details, paying special attention \\n        # to store the candidate_id, as this is what we use to track our \\n        # candidate status.\\n\\n    # We return an empty response to Connect as it will retry callbacks otherwise.\\n    return '', 200\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\nThe candidate has now been inserted into the ATS, and we have the ID of the candidate so we can track their status.\n\n## Track Candidate Status\n\nTracking candidate status works through the Connect [webhook](doc:candidate-application-status-webhooks) functionality. Updates to candidate statuses are sent periodically to ensure you always have an up to date status for your candidates. All you need is an endpoint to receive these status events.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"@app.route('/webhook_url', methods=['POST'])\\ndef status_webhook_handler():\\n    for event in request.get_json(force=True):\\n        event_type = event['event']\\n        if event_type == 'candidate_status_update':\\n            candidate_id = event['data']['entity_id']\\n            # We can now update our candidate with the `candidate_id`\\n            # with the value of `event['data']['status']`.\",\n      \"language\": \"python\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Example Code\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:textarea]\n{\n  \"text\": \"For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.\",\n  \"sidebar\": true\n}\n[/block]\n\n[block:embed]\n{\n  \"html\": false,\n  \"url\": \"https://github.com/rolepoint/connect-examples/tree/master/insert-candidate-and-track-status\",\n  \"title\": \"Track Status Example\",\n  \"favicon\": \"https://assets-cdn.github.com/favicon.ico\",\n  \"image\": \"https://avatars3.githubusercontent.com/u/2790791?v=3&s=400\",\n  \"sidebar\": true\n}\n[/block]","excerpt":"","githubsync":"","hidden":false,"sync_unique":"","user":"543d38fea10ab32000b3aa8f","category":"56df07cc0201330e0070f15b","isReference":false,"link_external":false,"order":2,"project":"569e6099ebbadc0d0079becd","slug":"insert-candidates-and-track-status","createdAt":"2016-03-15T14:47:30.237Z","type":"basic","updates":[],"childrenPages":[]}

Insert Candidates and Track Status


Connect makes it easy to insert candidates to your ATS, then get notifications whenever their status changes. ## Inserting Candidates When a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request. [block:code] { "codes": [ { "code": "@app.route('/make_application', methods=['POST'])\ndef make_application():\n\n # Build our payload to include our candidate and the job they are applying\n # for.\n payload = {\n \t'applications': [{'job_id': request.form['job_id']}],\n \t'candidate': {\n 'first_name': request.form['first_name'],\n 'last_name': request.form['last_name'],\n 'email': request.form['email']\n }\n \t}\n\n # We can choose to either include a callback header with our\n # request, or to poll until the application is complete. Here\n # we use the callback funtionality.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'application_processed_callback', app_id=1, _external=True\n )\n }\n # Send the candidate to Connect for processing.\n requests.post(CONNECT_URL + '/candidate',\n json=payload, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] As inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete. [block:callout] { "type": "info", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:", "title": "Use Callbacks" } [/block] ## Candidate Application Complete Callback We define this callback endpoint as below. [block:code] { "codes": [ { "code": "@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\ndef application_processed_callback(app_id):\n status = request.json['status']\n JOB_APPLICATIONS[app_id]['status'] = status\n\n if status == 'complete':\n # The application has been processed and made it into the ATS.\n # As part of the response we are given a URL from where we can \n # request the details of the processed candidate.\n url = request.json['result_info']['url']\n # Now we request the final details of the processed candidate\n result = requests.get(url, auth=AUTH)\n json = result.json()\n candidate_id = json['candidate_id']\n # Save the processed candidate details, paying special attention \n # to store the candidate_id, as this is what we use to track our \n # candidate status.\n\n # We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] The candidate has now been inserted into the ATS, and we have the ID of the candidate so we can track their status. ## Track Candidate Status Tracking candidate status works through the Connect [webhook](doc:candidate-application-status-webhooks) functionality. Updates to candidate statuses are sent periodically to ensure you always have an up to date status for your candidates. All you need is an endpoint to receive these status events. [block:code] { "codes": [ { "code": "@app.route('/webhook_url', methods=['POST'])\ndef status_webhook_handler():\n for event in request.get_json(force=True):\n event_type = event['event']\n if event_type == 'candidate_status_update':\n candidate_id = event['data']['entity_id']\n # We can now update our candidate with the `candidate_id`\n # with the value of `event['data']['status']`.", "language": "python" } ] } [/block] [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/insert-candidate-and-track-status", "title": "Track Status Example", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars3.githubusercontent.com/u/2790791?v=3&s=400", "sidebar": true } [/block]
Connect makes it easy to insert candidates to your ATS, then get notifications whenever their status changes. ## Inserting Candidates When a candidate completes your job application form, we can now send their information to Connect with a simple `POST` request. [block:code] { "codes": [ { "code": "@app.route('/make_application', methods=['POST'])\ndef make_application():\n\n # Build our payload to include our candidate and the job they are applying\n # for.\n payload = {\n \t'applications': [{'job_id': request.form['job_id']}],\n \t'candidate': {\n 'first_name': request.form['first_name'],\n 'last_name': request.form['last_name'],\n 'email': request.form['email']\n }\n \t}\n\n # We can choose to either include a callback header with our\n # request, or to poll until the application is complete. Here\n # we use the callback funtionality.\n headers = {\n 'content-type': 'application/rolepoint.v2+json',\n 'x-rolepoint-callback-url': url_for(\n 'application_processed_callback', app_id=1, _external=True\n )\n }\n # Send the candidate to Connect for processing.\n requests.post(CONNECT_URL + '/candidate',\n json=payload, auth=AUTH, headers=headers)", "language": "python" } ] } [/block] As inserting candidates into Connect is an [asynchronous endpoint](doc:asynchronous-requests), we have passed a callback URL as part of our `POST` request. Once Connect has processed the candidate, it will send a request to this URL to notify us that the processing is complete. [block:callout] { "type": "info", "body": "We recommend using the callback functionality rather than polling Connect. Each request to Connect can map to one or more requests to the ATS, which could take longer to process. By sending a callback we reduce the need to make several needless connections over an extended period of time. \n\nDon't worry, we'll let you know when it's done! :smile:", "title": "Use Callbacks" } [/block] ## Candidate Application Complete Callback We define this callback endpoint as below. [block:code] { "codes": [ { "code": "@app.route('/application_processed_callback/<int:app_id>', methods=['POST'])\ndef application_processed_callback(app_id):\n status = request.json['status']\n JOB_APPLICATIONS[app_id]['status'] = status\n\n if status == 'complete':\n # The application has been processed and made it into the ATS.\n # As part of the response we are given a URL from where we can \n # request the details of the processed candidate.\n url = request.json['result_info']['url']\n # Now we request the final details of the processed candidate\n result = requests.get(url, auth=AUTH)\n json = result.json()\n candidate_id = json['candidate_id']\n # Save the processed candidate details, paying special attention \n # to store the candidate_id, as this is what we use to track our \n # candidate status.\n\n # We return an empty response to Connect as it will retry callbacks otherwise.\n return '', 200", "language": "python" } ] } [/block] The candidate has now been inserted into the ATS, and we have the ID of the candidate so we can track their status. ## Track Candidate Status Tracking candidate status works through the Connect [webhook](doc:candidate-application-status-webhooks) functionality. Updates to candidate statuses are sent periodically to ensure you always have an up to date status for your candidates. All you need is an endpoint to receive these status events. [block:code] { "codes": [ { "code": "@app.route('/webhook_url', methods=['POST'])\ndef status_webhook_handler():\n for event in request.get_json(force=True):\n event_type = event['event']\n if event_type == 'candidate_status_update':\n candidate_id = event['data']['entity_id']\n # We can now update our candidate with the `candidate_id`\n # with the value of `event['data']['status']`.", "language": "python" } ] } [/block] [block:api-header] { "type": "basic", "title": "Example Code", "sidebar": true } [/block] [block:textarea] { "text": "For the full example shown here, with instructions on how to run it locally in your desired programming language, please see the link below.", "sidebar": true } [/block] [block:embed] { "html": false, "url": "https://github.com/rolepoint/connect-examples/tree/master/insert-candidate-and-track-status", "title": "Track Status Example", "favicon": "https://assets-cdn.github.com/favicon.ico", "image": "https://avatars3.githubusercontent.com/u/2790791?v=3&s=400", "sidebar": true } [/block]
{"_id":"56e5cac6d1303329002ea76c","link_url":"","slug":"sandbox-connector","title":"Sandbox Connectors","category":"56df07cc0201330e0070f15b","githubsync":"","hidden":false,"isReference":false,"excerpt":"","order":3,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","api":{"auth":"required","params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Sandbox Connectors allow you to use Connect as if you were integrating with an ATS, before you have the required credentials. They behave exactly as production Connectors – including [Rate Limits](doc:rate-limits) and [Billing limits](doc:billing-limits).\n\nCandidate and application results are stored in the sandbox (so you can query for them later) and there is a default set of jobs that can be sent as webhook events, all through the same services as you will use in production.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Sandbox Connectors (including all the data you've created) will be deleted if they aren't used for 14 days.\"\n}\n[/block]\nYou'll need to create a sandbox connector before starting the example applications. \n\n### Creating a Sandbox Connector\n\nNo authorisation is required, though the endpoint is rate limited.\n\nThe only required parameter:\n* `email` - an email address for the creator of the sandbox. This address will receive updates on the connector and will of course never be given to anyone else.\n\nTo receive [webhooks](doc:webhooks) for your sandbox connector, you can optionally include a webhook_url parameter:\n* `webhook_url` - the webhook URL that [webhook events](doc:webhooks)  will be sent to\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"curl -X POST -H \\\"Content-Type: application/json\\\" -d '{\\n    \\\"email\\\": \\\"developer@rolepoint.com\\\",\\n    \\\"webhook_url\\\": \\\"<webhook_url>\\\"\\n}' \\\"https://api.rolepoint-connect.com/examples/sandbox-connector\\\"\",\n      \"language\": \"curl\"\n    },\n    {\n      \"code\": \"import requests\\n\\npayload = {\\n  'webhook_url': '<webhook_url>',\\n  'email':'developer@ro1epoint.com'\\n}\\n\\nresponse = requests.post(\\n  'https://api.rolepoint-connect.com/examples/sandbox-connector',\\n  json=payload\\n)\\n\\nprint(response.text)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"require 'uri'\\nrequire 'net/http'\\nrequire 'json'\\n\\nurl = URI(\\\"https://api.rolepoint-connect.com/examples/sandbox-connector\\\")\\n\\nhttp = Net::HTTP.new(url.host, url.port)\\nhttp.use_ssl = true\\n\\npayload = {:email => \\\"developer@rolepoint.com\\\", :webhook_url => \\\"<webhook_url>\\\"}\\n\\nrequest = Net::HTTP::Post.new(url)\\nrequest[\\\"content-type\\\"] = 'application/json'\\nrequest.body = payload.to_json\\n\\nresponse = http.request(request)\\nputs response.read_body\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"invoke-restmethod -uri \\\"https://api.rolepoint-connect.com/examples/sandbox-connector\\\" -contenttype \\\"application/json\\\" -method Post -body '{\\n    \\\"email\\\": \\\"developer@rolepoint.com\\\",\\n    \\\"webhook_url\\\": \\\"<webhook_url>\\\"\\n}'\",\n      \"language\": \"shell\",\n      \"name\": \"PowerShell\"\n    }\n  ]\n}\n[/block]\nThe endpoint will respond with the `username`, `password` and `connector_id` of the connector, which are required to access it. You can now use the Connector for any of our documented [examples](doc:get-jobs-and-insert-applications) and [endpoints](doc:send-candidate).\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"connector_id\\\": \\\"4\\\",\\n  \\\"password\\\": \\\"TZtyELZhweVyaTLt\\\",\\n  \\\"username\\\": \\\"example_taleo_enterpise_SMNfyy\\\",\\n  \\\"email\\\": \\\"developer@ro1epoint.com\\\",\\n  \\\"webhook_url\\\": \\\"http://3b86a003.ngrok.io/webhook_url\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nIf there are too many requests for Sandbox Connectors, you'll see this message:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\\"errors\\\": \\\"There are currently too many example requests. Try again in 60 seconds\\\"}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]","createdAt":"2016-03-13T20:17:10.402Z","sync_unique":"","type":"basic","updates":[],"version":"569e609aebbadc0d0079bed0","__v":13,"link_external":false,"user":"56d846d5b20d260b0026570b","childrenPages":[]}

Sandbox Connectors


Sandbox Connectors allow you to use Connect as if you were integrating with an ATS, before you have the required credentials. They behave exactly as production Connectors – including [Rate Limits](doc:rate-limits) and [Billing limits](doc:billing-limits). Candidate and application results are stored in the sandbox (so you can query for them later) and there is a default set of jobs that can be sent as webhook events, all through the same services as you will use in production. [block:callout] { "type": "warning", "body": "Sandbox Connectors (including all the data you've created) will be deleted if they aren't used for 14 days." } [/block] You'll need to create a sandbox connector before starting the example applications. ### Creating a Sandbox Connector No authorisation is required, though the endpoint is rate limited. The only required parameter: * `email` - an email address for the creator of the sandbox. This address will receive updates on the connector and will of course never be given to anyone else. To receive [webhooks](doc:webhooks) for your sandbox connector, you can optionally include a webhook_url parameter: * `webhook_url` - the webhook URL that [webhook events](doc:webhooks) will be sent to [block:code] { "codes": [ { "code": "curl -X POST -H \"Content-Type: application/json\" -d '{\n \"email\": \"developer@rolepoint.com\",\n \"webhook_url\": \"<webhook_url>\"\n}' \"https://api.rolepoint-connect.com/examples/sandbox-connector\"", "language": "curl" }, { "code": "import requests\n\npayload = {\n 'webhook_url': '<webhook_url>',\n 'email':'developer@ro1epoint.com'\n}\n\nresponse = requests.post(\n 'https://api.rolepoint-connect.com/examples/sandbox-connector',\n json=payload\n)\n\nprint(response.text)", "language": "python" }, { "code": "require 'uri'\nrequire 'net/http'\nrequire 'json'\n\nurl = URI(\"https://api.rolepoint-connect.com/examples/sandbox-connector\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\npayload = {:email => \"developer@rolepoint.com\", :webhook_url => \"<webhook_url>\"}\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"content-type\"] = 'application/json'\nrequest.body = payload.to_json\n\nresponse = http.request(request)\nputs response.read_body", "language": "ruby" }, { "code": "invoke-restmethod -uri \"https://api.rolepoint-connect.com/examples/sandbox-connector\" -contenttype \"application/json\" -method Post -body '{\n \"email\": \"developer@rolepoint.com\",\n \"webhook_url\": \"<webhook_url>\"\n}'", "language": "shell", "name": "PowerShell" } ] } [/block] The endpoint will respond with the `username`, `password` and `connector_id` of the connector, which are required to access it. You can now use the Connector for any of our documented [examples](doc:get-jobs-and-insert-applications) and [endpoints](doc:send-candidate). [block:code] { "codes": [ { "code": "{\n \"connector_id\": \"4\",\n \"password\": \"TZtyELZhweVyaTLt\",\n \"username\": \"example_taleo_enterpise_SMNfyy\",\n \"email\": \"developer@ro1epoint.com\",\n \"webhook_url\": \"http://3b86a003.ngrok.io/webhook_url\"\n}", "language": "json" } ] } [/block] If there are too many requests for Sandbox Connectors, you'll see this message: [block:code] { "codes": [ { "code": "{\"errors\": \"There are currently too many example requests. Try again in 60 seconds\"}", "language": "json" } ] } [/block]
Sandbox Connectors allow you to use Connect as if you were integrating with an ATS, before you have the required credentials. They behave exactly as production Connectors – including [Rate Limits](doc:rate-limits) and [Billing limits](doc:billing-limits). Candidate and application results are stored in the sandbox (so you can query for them later) and there is a default set of jobs that can be sent as webhook events, all through the same services as you will use in production. [block:callout] { "type": "warning", "body": "Sandbox Connectors (including all the data you've created) will be deleted if they aren't used for 14 days." } [/block] You'll need to create a sandbox connector before starting the example applications. ### Creating a Sandbox Connector No authorisation is required, though the endpoint is rate limited. The only required parameter: * `email` - an email address for the creator of the sandbox. This address will receive updates on the connector and will of course never be given to anyone else. To receive [webhooks](doc:webhooks) for your sandbox connector, you can optionally include a webhook_url parameter: * `webhook_url` - the webhook URL that [webhook events](doc:webhooks) will be sent to [block:code] { "codes": [ { "code": "curl -X POST -H \"Content-Type: application/json\" -d '{\n \"email\": \"developer@rolepoint.com\",\n \"webhook_url\": \"<webhook_url>\"\n}' \"https://api.rolepoint-connect.com/examples/sandbox-connector\"", "language": "curl" }, { "code": "import requests\n\npayload = {\n 'webhook_url': '<webhook_url>',\n 'email':'developer@ro1epoint.com'\n}\n\nresponse = requests.post(\n 'https://api.rolepoint-connect.com/examples/sandbox-connector',\n json=payload\n)\n\nprint(response.text)", "language": "python" }, { "code": "require 'uri'\nrequire 'net/http'\nrequire 'json'\n\nurl = URI(\"https://api.rolepoint-connect.com/examples/sandbox-connector\")\n\nhttp = Net::HTTP.new(url.host, url.port)\nhttp.use_ssl = true\n\npayload = {:email => \"developer@rolepoint.com\", :webhook_url => \"<webhook_url>\"}\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"content-type\"] = 'application/json'\nrequest.body = payload.to_json\n\nresponse = http.request(request)\nputs response.read_body", "language": "ruby" }, { "code": "invoke-restmethod -uri \"https://api.rolepoint-connect.com/examples/sandbox-connector\" -contenttype \"application/json\" -method Post -body '{\n \"email\": \"developer@rolepoint.com\",\n \"webhook_url\": \"<webhook_url>\"\n}'", "language": "shell", "name": "PowerShell" } ] } [/block] The endpoint will respond with the `username`, `password` and `connector_id` of the connector, which are required to access it. You can now use the Connector for any of our documented [examples](doc:get-jobs-and-insert-applications) and [endpoints](doc:send-candidate). [block:code] { "codes": [ { "code": "{\n \"connector_id\": \"4\",\n \"password\": \"TZtyELZhweVyaTLt\",\n \"username\": \"example_taleo_enterpise_SMNfyy\",\n \"email\": \"developer@ro1epoint.com\",\n \"webhook_url\": \"http://3b86a003.ngrok.io/webhook_url\"\n}", "language": "json" } ] } [/block] If there are too many requests for Sandbox Connectors, you'll see this message: [block:code] { "codes": [ { "code": "{\"errors\": \"There are currently too many example requests. Try again in 60 seconds\"}", "language": "json" } ] } [/block]
{"_id":"56df09ee0201330e0070f161","category":"56e43a6e7e2c0220000312db","isReference":true,"next":{"description":"","pages":[]},"project":"569e6099ebbadc0d0079becd","body":"By registering a webhook with RolePoint Connect, you can receive updates on various resources within an ATS.\n\nConnect uses webhooks to send updates on resources that change relatively infrequently.  Many APIs do not provide this functionality - to get updates on a job you would have to periodically make a request for that job.  The job may change infrequently, but you would still have to poll to ensure you have up to date information.  Connect handles this for you - you just need to handle the webhooks when they are sent.\n\nConnect currently sends webhooks on:\n\n- Job adds, deletes or updates.\n- Job updates completion.\n- Candidate status changes.\n- Job application status changes.\n\nNote: This features may not all be available for all ATS integrations.\n\n### Choosing a webhook URL.\n\nConnect webhooks do not currently support authentication, so it's recommended that your incoming webhook URL contain some sort of random element (e.g. a UUID) to help secure against people guessing your URL. Webhooks will **not** follow redirects.\n\n### Receiving updates from a webhook\n\nRolePoint Connect will receive regular updates of data from the ATS. It will batch these updates together into groups of no more than 100 and HTTP POST them to the registered webhook URL.  For example:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"POST /application/status\\nHost: webhooks.example.com\\nContent-Type: application/rolepoint.v1+json\\n\\n[\\n    {\\n      \\t\\\"event\\\": \\\"candidate_status_update\\\",\\n    \\t\\t\\\"event_time\\\": \\\"2015-05-12T11:44:20.559473\\\",\\n    \\t\\t\\\"data\\\": {\\n          \\t\\\"entity_id\\\": \\\"123\\\",\\n    \\t\\t\\t\\t\\\"status\\\": {\\n              \\t\\\"id\\\": 21, \\n              \\t\\\"value\\\": \\\"contacted\\\"\\n            }\\n        }\\n    },\\n    {\\n      \\t\\\"event\\\": \\\"application_status_update\\\",\\n    \\t\\t\\\"event_time\\\": \\\"2015-05-12T11:49:05.796921\\\",\\n    \\t\\t\\\"data\\\": {\\n          \\t\\\"entity_id\\\": \\\"456\\\",\\n    \\t\\t\\t\\t\\\"status\\\": {\\n              \\t\\\"id\\\": 22, \\n              \\t\\\"value\\\": \\\"hired\\\"\\n            }\\n        }\\n    }\\n]\",\n      \"language\": \"http\"\n    }\n  ]\n}\n[/block]\nEach entry in the list should have the following fields:\n\n- `event` - Will indicate the type of webhook event. See the pages under [Event\n  Types](#section-event-types) below for details.\n- `event_time` - will indicate the time that the event occurred at.  This\n  should be in [ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601).\n- `data` - some event specific data.  See the pages under [Event\n  Types](#section-event-types) below.\n\n### Event Types\n\n- [Job events](doc:job-webhooks)\n- [Candidate & Application status updates](doc:candidate-application-status-webhooks)\n\n### Webhook notification timeouts & error handling\n\nIf your webhook endpoint returns a non-200 HTTP status code or takes longer than 30 seconds to reply, then we will retry sending the webhook after 10 seconds.  If that request fails, then we will try again after 20 seconds.  The time between retries will continue to double until the request is successful or 24 hours has passed.\n\n**All future status updates will be queued behind this one until it is either successful or we finish retrying.**\n\nWhen connect has retried for 24 hours without success, that request and all the webhook events contained within will be dropped.  Other queued status updates will not be affected, but any data contained in the dropped message will not be re-sent.\n\nYou should be careful not to perform any heavy processing in the webhook endpoint itself - if this is required, you should send it to a background processing task to avoid triggering our 30 second timeout.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Multiple Webhooks for Same Event\",\n  \"body\": \"It is possible for the same Webhook to be sent multiple times, for example receiving a `job_add` event for the same job more than once. Ensure your system is configured to handle this possibility.\"\n}\n[/block]","link_external":false,"link_url":"","parentDoc":null,"sync_unique":"","title":"Webhooks","__v":16,"api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]}},"createdAt":"2016-03-08T17:20:46.128Z","excerpt":"","hidden":false,"user":"543d38fea10ab32000b3aa8f","version":"569e609aebbadc0d0079bed0","githubsync":"","order":0,"slug":"webhooks","type":"basic","updates":[],"childrenPages":[]}

Webhooks


By registering a webhook with RolePoint Connect, you can receive updates on various resources within an ATS. Connect uses webhooks to send updates on resources that change relatively infrequently. Many APIs do not provide this functionality - to get updates on a job you would have to periodically make a request for that job. The job may change infrequently, but you would still have to poll to ensure you have up to date information. Connect handles this for you - you just need to handle the webhooks when they are sent. Connect currently sends webhooks on: - Job adds, deletes or updates. - Job updates completion. - Candidate status changes. - Job application status changes. Note: This features may not all be available for all ATS integrations. ### Choosing a webhook URL. Connect webhooks do not currently support authentication, so it's recommended that your incoming webhook URL contain some sort of random element (e.g. a UUID) to help secure against people guessing your URL. Webhooks will **not** follow redirects. ### Receiving updates from a webhook RolePoint Connect will receive regular updates of data from the ATS. It will batch these updates together into groups of no more than 100 and HTTP POST them to the registered webhook URL. For example: [block:code] { "codes": [ { "code": "POST /application/status\nHost: webhooks.example.com\nContent-Type: application/rolepoint.v1+json\n\n[\n {\n \t\"event\": \"candidate_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:44:20.559473\",\n \t\t\"data\": {\n \t\"entity_id\": \"123\",\n \t\t\t\t\"status\": {\n \t\"id\": 21, \n \t\"value\": \"contacted\"\n }\n }\n },\n {\n \t\"event\": \"application_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:49:05.796921\",\n \t\t\"data\": {\n \t\"entity_id\": \"456\",\n \t\t\t\t\"status\": {\n \t\"id\": 22, \n \t\"value\": \"hired\"\n }\n }\n }\n]", "language": "http" } ] } [/block] Each entry in the list should have the following fields: - `event` - Will indicate the type of webhook event. See the pages under [Event Types](#section-event-types) below for details. - `event_time` - will indicate the time that the event occurred at. This should be in [ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601). - `data` - some event specific data. See the pages under [Event Types](#section-event-types) below. ### Event Types - [Job events](doc:job-webhooks) - [Candidate & Application status updates](doc:candidate-application-status-webhooks) ### Webhook notification timeouts & error handling If your webhook endpoint returns a non-200 HTTP status code or takes longer than 30 seconds to reply, then we will retry sending the webhook after 10 seconds. If that request fails, then we will try again after 20 seconds. The time between retries will continue to double until the request is successful or 24 hours has passed. **All future status updates will be queued behind this one until it is either successful or we finish retrying.** When connect has retried for 24 hours without success, that request and all the webhook events contained within will be dropped. Other queued status updates will not be affected, but any data contained in the dropped message will not be re-sent. You should be careful not to perform any heavy processing in the webhook endpoint itself - if this is required, you should send it to a background processing task to avoid triggering our 30 second timeout. [block:callout] { "type": "warning", "title": "Multiple Webhooks for Same Event", "body": "It is possible for the same Webhook to be sent multiple times, for example receiving a `job_add` event for the same job more than once. Ensure your system is configured to handle this possibility." } [/block]
By registering a webhook with RolePoint Connect, you can receive updates on various resources within an ATS. Connect uses webhooks to send updates on resources that change relatively infrequently. Many APIs do not provide this functionality - to get updates on a job you would have to periodically make a request for that job. The job may change infrequently, but you would still have to poll to ensure you have up to date information. Connect handles this for you - you just need to handle the webhooks when they are sent. Connect currently sends webhooks on: - Job adds, deletes or updates. - Job updates completion. - Candidate status changes. - Job application status changes. Note: This features may not all be available for all ATS integrations. ### Choosing a webhook URL. Connect webhooks do not currently support authentication, so it's recommended that your incoming webhook URL contain some sort of random element (e.g. a UUID) to help secure against people guessing your URL. Webhooks will **not** follow redirects. ### Receiving updates from a webhook RolePoint Connect will receive regular updates of data from the ATS. It will batch these updates together into groups of no more than 100 and HTTP POST them to the registered webhook URL. For example: [block:code] { "codes": [ { "code": "POST /application/status\nHost: webhooks.example.com\nContent-Type: application/rolepoint.v1+json\n\n[\n {\n \t\"event\": \"candidate_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:44:20.559473\",\n \t\t\"data\": {\n \t\"entity_id\": \"123\",\n \t\t\t\t\"status\": {\n \t\"id\": 21, \n \t\"value\": \"contacted\"\n }\n }\n },\n {\n \t\"event\": \"application_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:49:05.796921\",\n \t\t\"data\": {\n \t\"entity_id\": \"456\",\n \t\t\t\t\"status\": {\n \t\"id\": 22, \n \t\"value\": \"hired\"\n }\n }\n }\n]", "language": "http" } ] } [/block] Each entry in the list should have the following fields: - `event` - Will indicate the type of webhook event. See the pages under [Event Types](#section-event-types) below for details. - `event_time` - will indicate the time that the event occurred at. This should be in [ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601). - `data` - some event specific data. See the pages under [Event Types](#section-event-types) below. ### Event Types - [Job events](doc:job-webhooks) - [Candidate & Application status updates](doc:candidate-application-status-webhooks) ### Webhook notification timeouts & error handling If your webhook endpoint returns a non-200 HTTP status code or takes longer than 30 seconds to reply, then we will retry sending the webhook after 10 seconds. If that request fails, then we will try again after 20 seconds. The time between retries will continue to double until the request is successful or 24 hours has passed. **All future status updates will be queued behind this one until it is either successful or we finish retrying.** When connect has retried for 24 hours without success, that request and all the webhook events contained within will be dropped. Other queued status updates will not be affected, but any data contained in the dropped message will not be re-sent. You should be careful not to perform any heavy processing in the webhook endpoint itself - if this is required, you should send it to a background processing task to avoid triggering our 30 second timeout. [block:callout] { "type": "warning", "title": "Multiple Webhooks for Same Event", "body": "It is possible for the same Webhook to be sent multiple times, for example receiving a `job_add` event for the same job more than once. Ensure your system is configured to handle this possibility." } [/block]
{"_id":"56e44ffdf0150e1700ce67f8","link_url":"","parentDoc":null,"sync_unique":"","type":"basic","updates":[],"user":"56d846d5b20d260b0026570b","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required","params":[]},"body":"RolePoint Connect can provide details of jobs that are contained within an ATS. This automatically happens for all ATSs with job support, provided your integration is setup with a webhook URL.  For more details on setting up a webhook URL, see the [Webhooks page](doc:webhooks).\n\nThere are four types of job related webhooks:\n\n- `job_add` - sent when connect finds an active job it has not encountered before.  When a connector is new, all current active jobs will be sent through as `job_add` events.\n- `job_update` - sent when the data for a job has changed in some way.\n- `job_remove` - sent when a job is no longer active, or has otherwise been deleted.\n- `job_updates_complete` - Sent when the process which updates the jobs for your connector has completed. Note that this _should_ usually arrive after the `job_add`, `job_update` and `job_remove` events, however this is not guaranteed. It will also be sent if we ran a process to update the jobs, but no changes occurred.\n\nThese values will be filled in the `event` field of any webhooks that come through.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[\\n  {\\n    \\\"event\\\": \\\"job_add\\\",\\n    \\\"event_time\\\": \\\"2015-05-12T11:44:20.559473\\\",\\n    \\\"data\\\": {\\n      \\\"department_name\\\": \\\"Pet Management\\\",\\n      \\\"qualifications\\\": null,\\n      \\\"creation_date\\\": null,\\n      \\\"title\\\": \\\"Dog Butler\\\",\\n      \\\"status\\\": \\\"Sourcing\\\",\\n      \\\"location\\\": {\\n        \\\"country\\\": \\\"United States\\\",\\n        \\\"state\\\": \\\"California\\\",\\n        \\\"city\\\": \\\"Irvine\\\"\\n      },\\n      \\\"salary\\\": {\\n        \\\"upper\\\": null,\\n        \\\"lower\\\": null,\\n        \\\"currency\\\": \\\"USD\\\"\\n      },\\n      \\\"hiring_manager\\\": {\\n        \\\"last_name\\\": \\\"Bond\\\",\\n        \\\"first_name\\\": \\\"James\\\",\\n        \\\"email\\\": \\\"james@example.com\\\"\\n      },\\n      \\\"opening_date\\\": null,\\n      \\\"closing_date\\\": null,\\n      \\\"ats_id\\\": \\\"9384843\\\",\\n      \\\"description\\\": \\\"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned.  Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\\\",\\n      \\\"contract_type\\\": null\\n    }\\n  },\\n  {\\n    \\\"event\\\": \\\"job_update\\\",\\n    \\\"event_time\\\": \\\"2015-05-12T11:49:05.796921\\\",\\n    \\\"data\\\": {\\n      \\\"department_name\\\": \\\"Pet Management\\\",\\n      \\\"qualifications\\\": null,\\n      \\\"creation_date\\\": null,\\n      \\\"title\\\": \\\"Dog Butler\\\",\\n      \\\"status\\\": \\\"Sourcing\\\",\\n      \\\"location\\\": {\\n        \\\"country\\\": \\\"United States\\\",\\n        \\\"state\\\": \\\"California\\\",\\n        \\\"city\\\": \\\"Irvine\\\"\\n      },\\n      \\\"salary\\\": {\\n        \\\"upper\\\": null,\\n        \\\"lower\\\": null,\\n        \\\"currency\\\": \\\"USD\\\"\\n      },\\n      \\\"hiring_manager\\\": {\\n        \\\"last_name\\\": \\\"Bond\\\",\\n        \\\"first_name\\\": \\\"James\\\",\\n        \\\"email\\\": \\\"james@example.com\\\"\\n      },\\n      \\\"opening_date\\\": null,\\n      \\\"closing_date\\\": null,\\n      \\\"ats_id\\\": \\\"12345F\\\",\\n      \\\"description\\\": \\\"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned.  Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\\\",\\n      \\\"contract_type\\\": null\\n    }\\n  },\\n  {\\n    \\\"event\\\": \\\"job_remove\\\",\\n    \\\"event_time\\\": \\\"2015-05-12T11:53:08.128675\\\",\\n    \\\"data\\\": {\\n      \\\"ats_id\\\": \\\"123BR\\\"\\n    }\\n  },\\n  {\\n    \\\"event\\\": \\\"job_updates_complete\\\",\\n    \\\"event_time\\\": \\\"2015-05-12T11:53:10.128675\\\",\\n    \\\"data\\\": {}\\n  }\\n]\",\n      \"language\": \"json\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]\n## Job Payloads\n\n### Add & Update Payloads\n\nThe `data` field for the `job_add` & `job_update` events will contain the compete JSON representation of the job.  Which fields this contains can vary slightly from ATS to ATS - an example payload for a taleo enterprise edition job is presented to the right.  Most other ATSs should follow the same format, though there may be slight variations in which fields are returned or precisely which format certain fields are presented in.\n\nThe `ats_id` field is always returned - this is the ID of the job in the ATS, and can be used to relate `job_add` events to their corresponding `job_update` & `job_remove` events, as well as being sent when [sending a candidate](doc:send-candidate).\n\nIt may be the case that the default job payload for an ATS doesn't contain a field that you are interested in - perhaps there's a custom field you're interested in or even just a bit of data we don't currently get.  Connects job fetching code is designed to be flexible - contact someone on the connect slack channel and we can add those fields to the payload for your connector.\n\n### Remove Payloads\n\nThe `data` field of a `job_remove` event will only ever contain the `ats_id` of that job.  This can be used to mark the job as deleted in your system.","createdAt":"2016-03-12T17:21:01.887Z","githubsync":"","link_external":false,"title":"Job Events","version":"569e609aebbadc0d0079bed0","category":"56e43a6e7e2c0220000312db","excerpt":"","hidden":false,"project":"569e6099ebbadc0d0079becd","__v":13,"isReference":true,"order":1,"slug":"job-webhooks","next":{"description":"","pages":[]},"childrenPages":[]}

Job Events


RolePoint Connect can provide details of jobs that are contained within an ATS. This automatically happens for all ATSs with job support, provided your integration is setup with a webhook URL. For more details on setting up a webhook URL, see the [Webhooks page](doc:webhooks). There are four types of job related webhooks: - `job_add` - sent when connect finds an active job it has not encountered before. When a connector is new, all current active jobs will be sent through as `job_add` events. - `job_update` - sent when the data for a job has changed in some way. - `job_remove` - sent when a job is no longer active, or has otherwise been deleted. - `job_updates_complete` - Sent when the process which updates the jobs for your connector has completed. Note that this _should_ usually arrive after the `job_add`, `job_update` and `job_remove` events, however this is not guaranteed. It will also be sent if we ran a process to update the jobs, but no changes occurred. These values will be filled in the `event` field of any webhooks that come through. [block:code] { "codes": [ { "code": "[\n {\n \"event\": \"job_add\",\n \"event_time\": \"2015-05-12T11:44:20.559473\",\n \"data\": {\n \"department_name\": \"Pet Management\",\n \"qualifications\": null,\n \"creation_date\": null,\n \"title\": \"Dog Butler\",\n \"status\": \"Sourcing\",\n \"location\": {\n \"country\": \"United States\",\n \"state\": \"California\",\n \"city\": \"Irvine\"\n },\n \"salary\": {\n \"upper\": null,\n \"lower\": null,\n \"currency\": \"USD\"\n },\n \"hiring_manager\": {\n \"last_name\": \"Bond\",\n \"first_name\": \"James\",\n \"email\": \"james@example.com\"\n },\n \"opening_date\": null,\n \"closing_date\": null,\n \"ats_id\": \"9384843\",\n \"description\": \"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned. Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\",\n \"contract_type\": null\n }\n },\n {\n \"event\": \"job_update\",\n \"event_time\": \"2015-05-12T11:49:05.796921\",\n \"data\": {\n \"department_name\": \"Pet Management\",\n \"qualifications\": null,\n \"creation_date\": null,\n \"title\": \"Dog Butler\",\n \"status\": \"Sourcing\",\n \"location\": {\n \"country\": \"United States\",\n \"state\": \"California\",\n \"city\": \"Irvine\"\n },\n \"salary\": {\n \"upper\": null,\n \"lower\": null,\n \"currency\": \"USD\"\n },\n \"hiring_manager\": {\n \"last_name\": \"Bond\",\n \"first_name\": \"James\",\n \"email\": \"james@example.com\"\n },\n \"opening_date\": null,\n \"closing_date\": null,\n \"ats_id\": \"12345F\",\n \"description\": \"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned. Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\",\n \"contract_type\": null\n }\n },\n {\n \"event\": \"job_remove\",\n \"event_time\": \"2015-05-12T11:53:08.128675\",\n \"data\": {\n \"ats_id\": \"123BR\"\n }\n },\n {\n \"event\": \"job_updates_complete\",\n \"event_time\": \"2015-05-12T11:53:10.128675\",\n \"data\": {}\n }\n]", "language": "json" } ], "sidebar": true } [/block] ## Job Payloads ### Add & Update Payloads The `data` field for the `job_add` & `job_update` events will contain the compete JSON representation of the job. Which fields this contains can vary slightly from ATS to ATS - an example payload for a taleo enterprise edition job is presented to the right. Most other ATSs should follow the same format, though there may be slight variations in which fields are returned or precisely which format certain fields are presented in. The `ats_id` field is always returned - this is the ID of the job in the ATS, and can be used to relate `job_add` events to their corresponding `job_update` & `job_remove` events, as well as being sent when [sending a candidate](doc:send-candidate). It may be the case that the default job payload for an ATS doesn't contain a field that you are interested in - perhaps there's a custom field you're interested in or even just a bit of data we don't currently get. Connects job fetching code is designed to be flexible - contact someone on the connect slack channel and we can add those fields to the payload for your connector. ### Remove Payloads The `data` field of a `job_remove` event will only ever contain the `ats_id` of that job. This can be used to mark the job as deleted in your system.
RolePoint Connect can provide details of jobs that are contained within an ATS. This automatically happens for all ATSs with job support, provided your integration is setup with a webhook URL. For more details on setting up a webhook URL, see the [Webhooks page](doc:webhooks). There are four types of job related webhooks: - `job_add` - sent when connect finds an active job it has not encountered before. When a connector is new, all current active jobs will be sent through as `job_add` events. - `job_update` - sent when the data for a job has changed in some way. - `job_remove` - sent when a job is no longer active, or has otherwise been deleted. - `job_updates_complete` - Sent when the process which updates the jobs for your connector has completed. Note that this _should_ usually arrive after the `job_add`, `job_update` and `job_remove` events, however this is not guaranteed. It will also be sent if we ran a process to update the jobs, but no changes occurred. These values will be filled in the `event` field of any webhooks that come through. [block:code] { "codes": [ { "code": "[\n {\n \"event\": \"job_add\",\n \"event_time\": \"2015-05-12T11:44:20.559473\",\n \"data\": {\n \"department_name\": \"Pet Management\",\n \"qualifications\": null,\n \"creation_date\": null,\n \"title\": \"Dog Butler\",\n \"status\": \"Sourcing\",\n \"location\": {\n \"country\": \"United States\",\n \"state\": \"California\",\n \"city\": \"Irvine\"\n },\n \"salary\": {\n \"upper\": null,\n \"lower\": null,\n \"currency\": \"USD\"\n },\n \"hiring_manager\": {\n \"last_name\": \"Bond\",\n \"first_name\": \"James\",\n \"email\": \"james@example.com\"\n },\n \"opening_date\": null,\n \"closing_date\": null,\n \"ats_id\": \"9384843\",\n \"description\": \"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned. Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\",\n \"contract_type\": null\n }\n },\n {\n \"event\": \"job_update\",\n \"event_time\": \"2015-05-12T11:49:05.796921\",\n \"data\": {\n \"department_name\": \"Pet Management\",\n \"qualifications\": null,\n \"creation_date\": null,\n \"title\": \"Dog Butler\",\n \"status\": \"Sourcing\",\n \"location\": {\n \"country\": \"United States\",\n \"state\": \"California\",\n \"city\": \"Irvine\"\n },\n \"salary\": {\n \"upper\": null,\n \"lower\": null,\n \"currency\": \"USD\"\n },\n \"hiring_manager\": {\n \"last_name\": \"Bond\",\n \"first_name\": \"James\",\n \"email\": \"james@example.com\"\n },\n \"opening_date\": null,\n \"closing_date\": null,\n \"ats_id\": \"12345F\",\n \"description\": \"<p>Here at The Dog Butler, Inc. we are dedicated to educate every dog owner to make every dog the best dog they ever owned. Offering customized training programs to train your dog for the world you live in, we are focused on results that work in your everyday life.</p>\",\n \"contract_type\": null\n }\n },\n {\n \"event\": \"job_remove\",\n \"event_time\": \"2015-05-12T11:53:08.128675\",\n \"data\": {\n \"ats_id\": \"123BR\"\n }\n },\n {\n \"event\": \"job_updates_complete\",\n \"event_time\": \"2015-05-12T11:53:10.128675\",\n \"data\": {}\n }\n]", "language": "json" } ], "sidebar": true } [/block] ## Job Payloads ### Add & Update Payloads The `data` field for the `job_add` & `job_update` events will contain the compete JSON representation of the job. Which fields this contains can vary slightly from ATS to ATS - an example payload for a taleo enterprise edition job is presented to the right. Most other ATSs should follow the same format, though there may be slight variations in which fields are returned or precisely which format certain fields are presented in. The `ats_id` field is always returned - this is the ID of the job in the ATS, and can be used to relate `job_add` events to their corresponding `job_update` & `job_remove` events, as well as being sent when [sending a candidate](doc:send-candidate). It may be the case that the default job payload for an ATS doesn't contain a field that you are interested in - perhaps there's a custom field you're interested in or even just a bit of data we don't currently get. Connects job fetching code is designed to be flexible - contact someone on the connect slack channel and we can add those fields to the payload for your connector. ### Remove Payloads The `data` field of a `job_remove` event will only ever contain the `ats_id` of that job. This can be used to mark the job as deleted in your system.
{"_id":"56e44fd5f0150e1700ce67f6","category":"56e43a6e7e2c0220000312db","excerpt":"","sync_unique":"","isReference":false,"parentDoc":null,"project":"569e6099ebbadc0d0079becd","title":"Candidate Status Events","updates":[],"hidden":false,"link_external":false,"link_url":"","order":2,"type":"basic","user":"56d846d5b20d260b0026570b","version":"569e609aebbadc0d0079bed0","__v":8,"api":{"params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":"","auth":"required"},"body":"RolePoint Connect can provide status details of applications and candidates that have been put into a supported remote ATS.  This automatically happens for any candidates that have been put into the ATS via RolePoint Connect, provided your integration is setup with a webhook URL.  For more details on setting up a webhook URL, see the [webhooks page](webhooks/).\n\nThe webhooks for candidate & application status come in two different webhook types:\n\n- `candidate_status_update`\n- `application_status_update`.\n\nThese values will be filled in the `event` field of any webhooks that come through.\n\nThe `data` parameters for these 2 webhook types are the same.  They will contain the following fields:\n\n- `entity_id` will contain the id of the application/candidate that the\n  update pertains to.\n- `status.id` will contain the ID of the status as returned by the ATS.\n- `status.value` will contain the text value of the status as returned by the\n  ATS.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Depending on the ATS, either `status.id` or `status.value` may be returned as null.\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"[\\n    {\\n      \\t\\\"event\\\": \\\"candidate_status_update\\\",\\n    \\t\\t\\\"event_time\\\": \\\"2015-05-12T11:44:20.559473\\\",\\n    \\t\\t\\\"data\\\": {\\n          \\t\\\"entity_id\\\": \\\"123\\\",\\n    \\t\\t\\t\\t\\\"status\\\": {\\n              \\t\\\"id\\\": 21, \\n              \\t\\\"value\\\": \\\"contacted\\\"\\n            }\\n        }\\n    },\\n    {\\n      \\t\\\"event\\\": \\\"application_status_update\\\",\\n    \\t\\t\\\"event_time\\\": \\\"2015-05-12T11:49:05.796921\\\",\\n    \\t\\t\\\"data\\\": {\\n          \\t\\\"entity_id\\\": \\\"456\\\",\\n    \\t\\t\\t\\t\\\"status\\\": {\\n              \\t\\\"id\\\": 22, \\n              \\t\\\"value\\\": \\\"hired\\\"\\n            }\\n        }\\n    }\\n]\",\n      \"language\": \"json\"\n    }\n  ],\n  \"sidebar\": true\n}\n[/block]","createdAt":"2016-03-12T17:20:21.138Z","githubsync":"","slug":"candidate-application-status-webhooks","childrenPages":[]}

Candidate Status Events


RolePoint Connect can provide status details of applications and candidates that have been put into a supported remote ATS. This automatically happens for any candidates that have been put into the ATS via RolePoint Connect, provided your integration is setup with a webhook URL. For more details on setting up a webhook URL, see the [webhooks page](webhooks/). The webhooks for candidate & application status come in two different webhook types: - `candidate_status_update` - `application_status_update`. These values will be filled in the `event` field of any webhooks that come through. The `data` parameters for these 2 webhook types are the same. They will contain the following fields: - `entity_id` will contain the id of the application/candidate that the update pertains to. - `status.id` will contain the ID of the status as returned by the ATS. - `status.value` will contain the text value of the status as returned by the ATS. [block:callout] { "type": "info", "body": "Depending on the ATS, either `status.id` or `status.value` may be returned as null." } [/block] [block:code] { "codes": [ { "code": "[\n {\n \t\"event\": \"candidate_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:44:20.559473\",\n \t\t\"data\": {\n \t\"entity_id\": \"123\",\n \t\t\t\t\"status\": {\n \t\"id\": 21, \n \t\"value\": \"contacted\"\n }\n }\n },\n {\n \t\"event\": \"application_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:49:05.796921\",\n \t\t\"data\": {\n \t\"entity_id\": \"456\",\n \t\t\t\t\"status\": {\n \t\"id\": 22, \n \t\"value\": \"hired\"\n }\n }\n }\n]", "language": "json" } ], "sidebar": true } [/block]
RolePoint Connect can provide status details of applications and candidates that have been put into a supported remote ATS. This automatically happens for any candidates that have been put into the ATS via RolePoint Connect, provided your integration is setup with a webhook URL. For more details on setting up a webhook URL, see the [webhooks page](webhooks/). The webhooks for candidate & application status come in two different webhook types: - `candidate_status_update` - `application_status_update`. These values will be filled in the `event` field of any webhooks that come through. The `data` parameters for these 2 webhook types are the same. They will contain the following fields: - `entity_id` will contain the id of the application/candidate that the update pertains to. - `status.id` will contain the ID of the status as returned by the ATS. - `status.value` will contain the text value of the status as returned by the ATS. [block:callout] { "type": "info", "body": "Depending on the ATS, either `status.id` or `status.value` may be returned as null." } [/block] [block:code] { "codes": [ { "code": "[\n {\n \t\"event\": \"candidate_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:44:20.559473\",\n \t\t\"data\": {\n \t\"entity_id\": \"123\",\n \t\t\t\t\"status\": {\n \t\"id\": 21, \n \t\"value\": \"contacted\"\n }\n }\n },\n {\n \t\"event\": \"application_status_update\",\n \t\t\"event_time\": \"2015-05-12T11:49:05.796921\",\n \t\t\"data\": {\n \t\"entity_id\": \"456\",\n \t\t\t\t\"status\": {\n \t\"id\": 22, \n \t\"value\": \"hired\"\n }\n }\n }\n]", "language": "json" } ], "sidebar": true } [/block]
{"_id":"56d83b8bb20d260b002656e0","__v":18,"api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"name":"","status":400,"language":"json","code":"{}"}]}},"body":"[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Attribute\",\n    \"h-1\": \"Type\",\n    \"h-2\": \"Required\",\n    \"0-0\": \"email\",\n    \"0-1\": \"string\",\n    \"0-2\": \"True\",\n    \"1-0\": \"first_name\",\n    \"2-0\": \"last_name\",\n    \"3-0\": \"phone\",\n    \"4-0\": \"cv_file\",\n    \"5-0\": \"cv_text\",\n    \"6-0\": \"cv_filename\",\n    \"7-0\": \"location\",\n    \"7-1\": \"[Location](doc:location)\",\n    \"8-0\": \"comment\",\n    \"8-1\": \"[Comment](doc:comment)\",\n    \"9-0\": \"social_profiles\",\n    \"9-1\": \"list<[Social Profile](doc:social-profile)>\",\n    \"10-0\": \"r