On this page

Send take-home invitations or let candidates choose a live interview time.

Invites

POST /api/v1/invites invites a candidate to an assessment. What the candidate receives depends on that assessment's delivery mode, configured in Litmus. The invite request does not change the delivery mode.

Take-home and live interview invites

Assessment modeEmail and candidate experienceDoes the invite book a time?
Take-home (async)An assessment invitation. The candidate follows the link and completes the exercise under its configured deadline and access rules.No. A take-home does not require an interview booking.
Live interview (sync)A scheduling invitation with a Pick a time link. The candidate chooses from the role's interviewer availability. The interviewer unlocks the exercise during the call.No. A booking is created when a time is selected.

Read the pipeline to find the assessment's delivery_mode and assessment_id. Pass assessment_id explicitly so the invite targets the intended take-home or live round.

If your automation already chooses the interview time, use POST /interviews directly. It can create the candidate and sends the booking confirmation, so a separate invite is unnecessary.

Send an assessment invite

POST /api/v1/invites · Required scope: invites:write.

The example below targets one assessment explicitly. Use an async assessment ID for a take-home invitation or a sync assessment ID for a scheduling invitation.

bash
curl --fail-with-body -X POST https://litmushiring.com/api/v1/invites \
  -H "Authorization: Bearer $LITMUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "posting_id": "posting_abc123",
    "assessment_id": "asmt_ghi789",
    "candidate_email": "candidate@example.com",
    "candidate_name": "Sample Candidate"
  }'

Returns:

json
{
  "invite_id": "cand_xyz789",
  "invite_url": "https://litmushiring.com/sign-in?assessmentToken=...",
  "reused": false
}

Returns 201 with invite_id (the candidate record ID), invite_url, and reused: false for a new invitation. Litmus sends the invitation email automatically. You can also display invite_url in your own portal; this does not suppress the email.

FieldRequiredDescription
posting_idYesID of the role or cohort containing the assessment.
assessment_idNoTarget assessment attached to the posting. If omitted, the posting's first attached assessment is used. Set it explicitly when targeting a particular round.
candidate_emailYesCandidate's email address.
candidate_nameYesCandidate's display name.

Find the posting ID in its dashboard URL (/company/posting/{id}) or through GET /roles. A cohort uses the same request shape with its ID as posting_id. The assessment must be ready for invitations and the posting must be open. Self-select assessment groups are not supported by this endpoint.

For live self-scheduling, configure interviewer availability before sending the invite. Without available times, the candidate cannot complete the booking.

Retries

Invitations are matched by assessment and normalized candidate email. Repeating an invitation returns 200 with the existing invite_id and reused: true. It does not send another email or return the original sign-in link.

json
{
  "invite_id": "cand_xyz789",
  "reused": true
}

Save invite_url when creating a new invitation if your integration needs to display it. Retrying the request cannot retrieve that URL.

role_id is deprecated. The endpoint originally accepted role_id; it still works, but only for role-type postings, and will be removed in a future version. Use posting_id instead. Passing a cohort id via role_id returns 400 ROLE_ID_TYPE_MISMATCH.

Errors

StatuserrorMeaning
404posting_id not foundThe ID does not exist in the key's organization.
400ROLE_ID_TYPE_MISMATCHA cohort ID was sent as role_id. Use posting_id.
400SELF_SELECT_UNSUPPORTEDInvitations to self-select groups are not supported.
400POSTING_CLOSEDReopen the posting before inviting.
409ALREADY_INVITEDAn existing candidate record cannot be reused for this invitation.
    Invites · Litmus docs