How to receive assessment orders from an ATS with
October 23, 2026
If you sell an assessment or background-check product, ATS platforms such as Greenhouse, Workable, Ashby, SmartRecruiters, Teamtailor, Recruitee, TalentLyft, Cornerstone, JobAdder, Paylocity and ATS Anywhere let recruiters order your assessment without leaving the ATS. With the Unified Assessment API, the ATS calls Unified.to when a recruiter places an order, and Unified.to forwards that order to you as a webhook.
This guide covers what you need to set up for each of your customers so those orders reach you.
How it works
- You publish your assessment packages to Unified.to.
- A recruiter picks one of your packages for a candidate inside their ATS.
- The ATS sends the order to Unified.to.
- Unified.to converts it to a standard assessment order and sends it to your webhook URL.
- You run the assessment, then update the order with the results. Unified.to writes them back to the ATS so the recruiter sees them.
You don't poll for orders. They arrive as soon as the recruiter places them, as long as the connection has an assessment_order webhook (step 3 below).
Before you start
- You need to be an assessment partner of the ATS. Each ATS issues partner credentials (for example, a partner API key) once you're approved.
- You need a Unified.to API key and workspace.
- Use a Production connection. Assessment orders are delivered through native webhooks, and native webhooks can't be created on Sandbox connections.
Step 1: Activate the assessment integration
In your Unified.to workspace, activate the assessment version of the ATS, for example Greenhouse Assessment rather than Greenhouse. Assessment integrations are separate from regular ATS integrations: they use your partner credentials and can't be used to read the ATS's jobs or candidates.
Step 2: Create a connection
Create a connection for each of your customers using your partner credentials. The credentials each ATS needs are listed on its page in the integrations directory.
Note the connection_id; you'll use it in every following step.
Step 3: Create the assessment order webhook
This step is required. Without it, Unified.to has nowhere to send orders, and the ATS's request fails when a recruiter orders an assessment.
Create a webhook on the connection with object_type set to assessment_order and event set to created:
curl -X POST https://api.unified.to/unified/webhook \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"connection_id": "CONNECTION_ID",
"object_type": "assessment_order",
"event": "created",
"hook_url": "https://yourapp.com/webhooks/unified"
}'
💡 Ashby Assessment: also create a second webhook with
"event": "deleted". Unified.to sends it when a recruiter cancels an assessment in Ashby.
Things to know:
- Create one webhook per event per connection. Orders are delivered to a single webhook.
- This is a native webhook. Unified.to doesn't register anything with the ATS when you create it; it simply stores where to send orders. The ATS starts calling Unified.to once it is configured in step 5.
- Use
api-eu.unified.toorapi-au.unified.toif your workspace is in the EU or AU region.
Step 4: Publish your assessment packages
Create the packages recruiters can choose from:
curl -X POST https://api.unified.to/assessment/CONNECTION_ID/package \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Frontend Skills Assessment",
"description": "HTML/CSS/JS take-home, about 45 minutes"
}'
The ATS reads this list when a recruiter orders an assessment. See the package model for all fields.
Step 5: Point the ATS at Unified.to
The ATS needs to know where to send orders. Depending on the ATS, either you register this once with the ATS as a partner, or your customer enters it when they enable your app in their ATS. The endpoint is:
https://api.unified.to/assessments/CONNECTION_ID
Use api-eu.unified.to or api-au.unified.to for EU or AU workspaces. Note that this path is /assessments/ (plural); it is the endpoint the ATS calls, not the Unified API you call.
Step 6: Receive orders
When a recruiter orders an assessment, Unified.to sends a POST request to your hook_url:
datais an array containing the assessment order: thepackage_idthe recruiter selected, the candidate's details (such asprofile_name,profile_emailsandprofile_resume_url), and the ATS'sjob_id,application_idandcandidate_id.typeisNATIVE.webhookdescribes the webhook that received the order.
Verify the signature before trusting the payload, as described in the webhooks reference. Then start your assessment flow, for example by emailing the candidate a link.
Step 7: Send the results back
When the candidate finishes, update the order:
curl -X PATCH https://api.unified.to/assessment/CONNECTION_ID/order/ORDER_ID \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "COMPLETED",
"response_score": 87,
"response_max_score": 100,
"response_url": "https://yourapp.com/results/123"
}'
Unified.to writes the results back to the ATS, where the recruiter can see the status, score and a link to the full report. You can also send an update with "status": "IN_PROGRESS" before the assessment is complete.
Troubleshooting
- "does not support webhook" when creating the webhook: check that the connection is for the assessment integration (for example Greenhouse Assessment), and that
object_typeisassessment_order. - "Cannot create native webhooks in Sandbox environment": create the webhook on a Production connection.
- The recruiter gets an error when ordering, and you receive nothing: the connection has no
assessment_order/createdwebhook. Create it (step 3). - Orders arrive at the wrong URL: the connection has more than one
createdwebhook. Delete the extra ones so only one remains.