[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Reject remaining JazzHR candidates when a job is filled

> Move every open candidate of a filled JazzHR job to Not Hired and send the decline email, with your OK before anything reaches a candidate.

Source: https://cotlet.dev/integrations/jazzhr-api-mcp-server/reject-candidates-when-job-filled

The offer is accepted and the job is marked Filled, but 40 candidates are still sitting in Review and Interview, and none of them has heard back.

Cotlet does it in your own JazzHR account with list\_jobs, list\_candidates, bulk\_change\_status and send\_candidate\_email, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=jazzhr) [All JazzHR tools](https://cotlet.dev/integrations/jazzhr-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can JazzHR do this on its own?

JazzHR documents bulk change of status and bulk email in the app, and no API call for either (checked 20 Oct 2026). The REST API can list the candidates of a job, but it has no call to update their status and none to send an email. The job status itself cannot be changed through the API either.

## How you do it in JazzHR today

1. A recruiter opens Jobs, picks the job and selects workflow stages, or leaves the stage blank to pull all candidates, then clicks Apply at the bottom.
2. Clicking Bulk Actions at the top and toggling Change Status to Yes lets the recruiter pick the new status, for a filled job usually a Not Hired disposition.
3. The decline email is a second pass: templates live in Settings > Templates > Email, and candidates are emailed from the Emails tab of each profile or in bulk.
4. The repeat is the part that gets missed: every filled job needs the same two passes, and a candidate left in a stage keeps waiting.

## How to reject remaining JazzHR candidates when a job is filled

Prompt

```
For every job that is now Filled, take the candidates still in the pipeline, move them to Not Hired and email each one the decline template. Show me the list before you send.
```

1. 01  
### Find the filled jobs  
list\_jobs runs with status Filled and returns each job with its ID. The agent keeps the jobs you named, or all of them when you did not name one, and skips a job it has already cleaned in this run.
2. 02  
### Read who is still in the pipeline  
list\_candidates reads every candidate of the job, following the cursor until it comes back empty. The agent leaves out the candidate who was hired and anyone already in a closing status, so nobody is rejected twice.
3. 03  
### Show the list first  
The agent prints the names, current stages and the template it would send, then waits. If a candidate has a recent note that says to keep them, the agent moves them to your list for a manual decision instead.
4. 04  
### Change the status in one pass  
bulk\_change\_status moves the whole group in one call, as the Bulk Actions button does. It asks for your OK by default, because the stage change can trigger the workflow helpers on that stage.
5. 05  
### Email the decline  
send\_candidate\_email sends the template you named to each candidate, one call per person, and confirms each unless you switch confirmation off for it. A candidate without an email on file is listed, not skipped silently.

### What you get back

Example data

```
Filled job: Senior Support Agent (job_20261012_8f3a)
Still in the pipeline: 14 candidates
Moved to Not Hired: 14
Decline template sent: 13
No email on file: 1 (Priya Nair, listed for you)
Kept for you: 0
```

### Other ways to ask

- Every Friday, do this for all jobs filled this week and send me one summary.
- Reject only candidates who never got past the first stage, and keep the rest in Silver Medalists for later.
- Do the same for Cancelled jobs, but send the cancellation template instead of the decline one.
- Move the group but do not email anyone; I will write the messages myself.

## What JazzHR allows, and what to know first

- JazzHR has six job statuses: Open, On Hold, Drafting, Filled, Cancelled and Closed, and a job in any status other than Open is inactive and does not show on partner job boards.
- JazzHR's bulk change of status works on the candidates selected for a job after you filter by workflow stage, or on all of them when the stage is left blank.
- Candidates bulk-moved into a cloned or new job land in the New workflow stage, and workflow helpers attached to New are not run.
- JazzHR email templates are created under Settings > Templates > Email, and an email can be sent right away, delayed to a set time or saved as a draft.
- The JazzHR API returns at most 100 results per page, so a large job needs several calls to read.

bulk\_change\_status and send\_candidate\_email ask for your OK by default. To run it weekly without you, switch confirmation off for those tools in your dashboard.

Sources: [JazzHR Help: Performing Bulk Actions](https://help.jazzhr.com/s/article/Performing-Bulk-Actions) · [JazzHR Help: Job Status Overview](https://help.jazzhr.com/s/article/Job-Status-Overview) · [JazzHR Help: Using Email Scheduling](https://help.jazzhr.com/s/article/Using-Email-Scheduling) · [JazzHR API reference](https://www.resumatorapi.com/v1/)

## Call bulk\_change\_status from a script

curl

```
curl -X POST https://cotlet.dev/api/v1/jazzhr/jobs/job_20261012_8f3a/change-status/bulk \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"Not Hired","candidate_ids":["prospect_20261001_c41d","prospect_20261003_72be","prospect_20261004_9a10"]}'
```

Example response

```
{
"job_id": "job_20261012_8f3a",
"status": "Not Hired",
"moved": 3,
"skipped": []
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is jazzhr\_write → bulk\_change\_status. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/jazzhr-api-mcp-server.md#automations)

## JazzHR tools this automation uses

__Cotlet JazzHR tools used to reject remaining JazzHR candidates when a job is filled__
| Tool | Parameters |
| ---------------------- | --------------------------------------------------------- |
| list\_jobs | status, title, department, cursor |
| list\_candidates | job\_id, stage, name, applied\_since, rating, cursor |
| bulk\_change\_status | job\_id, status, candidate\_ids |
| send\_candidate\_email | candidate\_id, job\_id, template, subject, body, send\_at |

[All 13 JazzHR tools with descriptions](https://cotlet.dev/integrations/jazzhr-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect JazzHR to Cotlet?

Yes. You sign in to JazzHR yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get JazzHR once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More JazzHR automations

- [Advance JazzHR applicants by your screening rules](https://cotlet.dev/integrations/jazzhr-api-mcp-server/advance-applicants-by-screening-rules.md)
- [Create JazzHR follow-up tasks for candidates](https://cotlet.dev/integrations/jazzhr-api-mcp-server/create-follow-up-tasks-for-candidates.md)
- [JazzHR API and MCP server: every tool](https://cotlet.dev/integrations/jazzhr-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to JazzHR.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with JazzHR.

[Sign up free](https://cotlet.dev/app/signup?app=jazzhr)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
