---
title: "How to receive assessment orders from an ATS with"
img: https://unified.to/images/logo.svg
date: 2026-10-23T15:44:00.000Z
updated: "2026-10-24T11:42:02.999Z"
tag: Guides
integrations: 
description: "If you sell an assessment or background-check product, ATS platforms such as Greenhouse, Workable, Ashby, SmartRecruiters, Teamtailor, Recruitee, TalentLyft,..."
url: "https://docs.unified.to/guides/how_to_receive_assessment_orders_from_an_ats_with"
---

# 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](https://unified.to/) when a recruiter places an order, and [Unified.to](https://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

1. You publish your assessment packages to [Unified.to](https://unified.to/).
2. A recruiter picks one of your packages for a candidate inside their ATS.
3. The ATS sends the order to [Unified.to](https://unified.to/).
4. [Unified.to](https://unified.to/) converts it to a standard [assessment order](https://docs.unified.to/assessment/order/model) and sends it to your webhook URL.
5. You run the assessment, then update the order with the results. [Unified.to](https://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](https://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](https://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](https://docs.unified.to/integrations).


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](https://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`:


```bash
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](https://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](https://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](https://unified.to/) once it is configured in step 5.
- Use `api-eu.unified.to` or `api-au.unified.to` if your workspace is in the EU or AU region.

## Step 4: Publish your assessment packages


Create the packages recruiters can choose from:


```bash
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](https://docs.unified.to/assessment/package/model) for all fields.


## Step 5: Point the ATS at [Unified.to](https://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:


```plain text
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](https://unified.to/) sends a POST request to your `hook_url`:

- `data` is an array containing the [assessment order](https://docs.unified.to/assessment/order/model): the `package_id` the recruiter selected, the candidate's details (such as `profile_name`, `profile_emails` and `profile_resume_url`), and the ATS's `job_id`, `application_id` and `candidate_id`.
- `type` is `NATIVE`.
- `webhook` describes the webhook that received the order.

Verify the signature before trusting the payload, as described in the [webhooks reference](https://docs.unified.to/reference/webhooks). 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:


```bash
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](https://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_type` is `assessment_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` / `created` webhook. Create it (step 3).
- **Orders arrive at the wrong URL:** the connection has more than one `created` webhook. Delete the extra ones so only one remains.