---
title: "candidate.pushToHris"
method: POST
path: "/candidate.pushToHris"
tags: ["Candidate"]
---

# candidate.pushToHris

`POST /candidate.pushToHris`

> Beta
>
> This feature is in beta and may not be available for all organizations.

Pushes a candidate's data to an HRIS system (e.g. Workday, BambooHR, ADP).

This endpoint triggers the "Add Candidate Data" flow for the specified application
and HRIS system. The candidate must have a name, and any offer associated with
the application must be in an accepted state (for systems that require it) before
pushing.

If the candidate has already been pushed to the same system, the push will be
retried automatically. For SelfServe integrations, `integrationPartnerId` is
required.

**Error codes:**

| Code | Description |
|---|---|
| `candidate_hris_push_blocked_by_offer_status` | The candidate's offer is not in a state that permits pushing to this HRIS. |
| `candidate_hris_push_failed` | The HRIS did not accept the push (e.g. a data or validation discrepancy reported by the downstream system, or a precondition it requires). The `message` includes detail about the failure (typically the error reported by the HRIS). If any of the data was already applied in the external system, verify there before retrying — this endpoint pushes with re-push enabled, so a blind retry can create a duplicate. |

> Retries
>
> A `generic_internal_error` response does not guarantee the push did not occur — the
> candidate mapping and downstream events may already have been created. Do not blindly
> retry on this error; check whether the candidate was already pushed first to avoid
> duplicate pushes.

**Requires the [`candidatesWrite`](authentication#permissions-candidatepushtohris) permission.**

## Request body

- CandidatePushToHrisRequest
  - `applicationId` string, uuid, required — The ID of the application whose candidate should be pushed to the HRIS.
  - `externalSystem` 'ADP' | 'BambooHR' | 'bob' | 'Charthop' | 'Dayforce' | 'Enboarder' | 'Gusto' | 'Lattice' | 'Namely' | 'OracleHCM' | 'Paychex' | 'Paylocity' | 'Personio' | 'Remote' | 'Rippling' | 'SAP' | 'SelfServe' | 'UKG' | 'Workday', required — The HRIS system to push the candidate to. Note: HiBob uses the value "bob".
  - `integrationPartnerId` string, uuid — The ID of the integration partner. Required for SelfServe integrations.

## Response `200`

Responses from the candidate.pushToHris endpoint

- union
  - CandidatePushToHrisSuccessResponse
    - `success` true, required
    - `results` CandidateExternalMapping, required
      - `id` string, uuid, required — The unique identifier of the external mapping
      - `candidateId` string, uuid, required — The ID of the candidate
      - `applicationId` string, uuid, nullable, required — The ID of the application. Null for systems that do not support per-application pushes (e.g. ADP, BambooHR); populated for systems that do (e.g. Workday, Lattice, Oracle HCM).
      - `externalId` string, required — The external ID in the HRIS system
      - `externalSystem` 'ADP' | 'BambooHR' | 'bob' | 'Charthop' | 'Dayforce' | 'Enboarder' | 'Gusto' | 'Lattice' | 'Namely' | 'OracleHCM' | 'Paychex' | 'Paylocity' | 'Personio' | 'Remote' | 'Rippling' | 'SAP' | 'SelfServe' | 'UKG' | 'Workday', required — The HRIS system the candidate was pushed to
      - `createdAt` string, date-time, required — ISO 8601 timestamp of when the mapping was created
  - ErrorResponse
    - `success` false, required
    - `errors` ErrorDetail[], required
      - `message` string, required
      - `parameter` string

---

[API](https://skmtc.net/ashbyhq/apis/ashby-api.md) · [All operations](https://skmtc.net/ashbyhq/apis/ashby-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ashbyhq/ashby-api/revisions/778b919dc743/schema)
