- Look up a schedule and its open slots.
- Generate a unique scheduling link for a candidate and hand it to them.
- Read the resulting booking once the candidate picks a slot (or subscribe to webhooks instead of polling).
- Reschedule or cancel a booking on the candidate’s behalf.
- Push back attendance (check-in/no-show) captured on your side.
/v1/partner/booking-schedules and /v1/partner/bookings
Authentication: Authorization: Bearer YOUR_API_KEY
Booking schedule creation and availability configuration are dashboard-only, the same way webhook URLs and API keys are — see API Reference Overview for the general conventions (response envelopes, pagination, errors) this API follows.
POST /booking-schedules/{bookingScheduleId}/links only supports INTERVIEW-profile schedules. For an EVENT-profile schedule (candidate picks a location and answers custom questions), use GET /booking-schedules/{bookingScheduleId}/locations and GET /booking-schedules/{bookingScheduleId}/questions to get the choices, then POST /booking-schedules/{bookingScheduleId}/bookings to record the booking directly. Attendance recording and rescheduling/cancellation work the same way for both profiles.A booking’s candidate isn’t always a job applicant.
Booking/BookingLink identify them with entityType + entityId (both always present):entityType: "JOB_CANDIDATE"— a job applicant;entityIdmatches ajobCandidateIdfrom the Jobs/Candidates APIs.entityType: "OUTREACH_CAMPAIGN_CANDIDATE"— a lead from an outreach campaign;entityIdis internal to TapTalent.entityType: "NOVA_CANDIDATE"— a candidate from TapTalent’s Agentic Onboarding flow;entityIdis internal to TapTalent.
bookingLinkId instead — returned from Create a candidate scheduling link, and it works the same regardless of entityType. Since a schedule is shared with TapTalent’s own outreach and onboarding flows, GET /bookings can include the other two types alongside yours — filter by entityType=JOB_CANDIDATE if you only want your own.List booking schedules
GET /booking-schedules
Retrieves the non-deleted booking schedules for your company. Use this to discover which schedules (sites, interview types) are available before creating a scheduling link for a candidate.
Query parameters
Example request
Example response
Get a booking schedule
GET /booking-schedules/:bookingScheduleId
Retrieves a single booking schedule. You can only access schedules that belong to your company; cross-company access returns 404.
Path parameters
Example request
Booking Schedule object
List available slots
GET /booking-schedules/:bookingScheduleId/slots
Returns the still-bookable slots for a schedule within a date range, after excluding slots already filled by active bookings. Use this to preview availability before creating a booking link, or to validate a scheduledStartAt before calling Reschedule a booking.
Path parameters
Query parameters
Example request
Example response
remainingCapacity reports how many more candidates can still book that slot; schedules configured with no booking limit report a large sentinel value rather than null — treat any positive number as bookable.
List locations
GET /booking-schedules/:bookingScheduleId/locations
Returns the locations a candidate can pick from when booking this schedule. Only meaningful for EVENT-profile schedules; an INTERVIEW-profile schedule always returns an empty list.
Path parameters
Example request
Location object
Example response
List questions
GET /booking-schedules/:bookingScheduleId/questions
Returns the custom questions a candidate must answer when booking this schedule. Only meaningful for EVENT-profile schedules; an INTERVIEW-profile schedule always returns an empty list.
Path parameters
Example request
Question object
Example response
bookingAnswers echoes these shapes back: a plain string for text/textarea/phone, a single string for single_choice, and an array of strings for multi_choice.
Create a candidate scheduling link
POST /booking-schedules/:bookingScheduleId/links
Generates a unique self-scheduling link for the given entity on this schedule — or returns its existing active link for it, rather than creating a duplicate. Identify the entity with entityType + entityId (see the candidate-identification note near the top of this page); TapTalent resolves the record and snapshots its contact details (firstName/lastName/email/phone) onto the link — you don’t supply those yourself. The entity must already exist; this endpoint doesn’t create new candidate records. Only JOB_CANDIDATE ids are obtainable through this API — OUTREACH_CAMPAIGN_CANDIDATE and NOVA_CANDIDATE ids have no corresponding lookup here.
Share data.url with the candidate yourself (email, SMS, your own portal); TapTalent does not send it on your behalf.
Path parameters
Body (JSON)
Example request
Example response
status is ACTIVE while awaiting a booking, LOCKED once the candidate has booked, REVOKED if invalidated, or REPLACED if superseded by a newer link for the same candidate and schedule. firstName/lastName/email/phone are snapshotted from the resolved entity at creation time, not supplied by you — any of them may be null if the source record doesn’t have that field on file.
Create a booking
POST /booking-schedules/:bookingScheduleId/bookings
Creates a booking directly for a given entity, slot, and — for an EVENT-profile schedule — a location and question answers. TapTalent validates the slot is still available, that selectedFormat is given when required (a BOTH-mode schedule) and omitted otherwise, and that selectedLocationId plus every required answer are present for an EVENT-profile schedule.
Path parameters
Body (JSON)
Example request — INTERVIEW-profile schedule
Example response
Example request — EVENT-profile schedule
Example response
attendanceCode is issued for EVENT-profile bookings too, the same as INTERVIEW — see Record attendance / check-in.
List bookings
GET /bookings
Paginated list of bookings for your company.
Query parameters
Example response
Get a booking
GET /bookings/:bookingId
Retrieves a single booking.
Booking object
Example request
Example response
Reschedule a booking
POST /bookings/:bookingId/reschedule
Moves a booking to a new slot on the same schedule. This cancels the current booking and creates a new one — the response returns the new booking with previousBookingId set, matching how candidate-initiated reschedules behave. The original booking’s own status becomes CANCELLED.
Blocked (returns 409) when:
- The schedule has
allowCandidateReschedule: false - Fewer than
rescheduleCutoffHoursremain before the currentscheduledStartAt - The booking is not
ACTIVE - The requested slot has no remaining capacity
Body (JSON)
Example request
Example response
Error response (409)
Cancel a booking
POST /bookings/:bookingId/cancel
Cancels an ACTIVE booking. Already-cancelled, already-attended, or no-show bookings cannot be cancelled again (409).
Body (JSON)
Example request
Record attendance / check-in
Two ways to mark attendance, depending on what your check-in point knows at that moment:- You already know
bookingId(e.g. you’re processing bookings fetched fromGET /bookings) — usePOST /bookings/:bookingId/attendancebelow. - You only have the candidate’s
attendanceCode— the normal case for a desk or QR scan, since a scanner doesn’t knowbookingIdup front — usePOST /attendance-codes/:attendanceCode/check-ininstead, which resolves the booking from the code itself.
INTERVIEW or EVENT), and both emit booking.attendance_updated to your webhook endpoint.
Record attendance by bookingId
POST /bookings/:bookingId/attendance
Marks a candidate as attended or not-attended. The booking does not need to already be past its scheduledStartAt — you can check a candidate in early. Not valid on a CANCELLED booking (409).
Body (JSON)
Example request
PARTNER_API in Booking.attendanceMarkedVia for any attendance update made through either endpoint, alongside whatever you pass in method.
Record attendance by code
POST /attendance-codes/:attendanceCode/check-in
Resolves the booking directly from its attendanceCode and records attendance — call this from a desk, kiosk, or QR scanner at the point of check-in. Consumes the code: on success, Booking.attendanceCode becomes null, same as the bookingId-based endpoint.
Path parameters
Body (JSON)
Same body as Record attendance by bookingId above.Example request
Webhooks
Rather than polling, subscribe to booking lifecycle events at your configured webhook endpoint:booking.scheduled, booking.rescheduled, booking.cancelled, and booking.attendance_updated. See Webhooks Overview for setup.
Errors
Validation errors return 400 withcode: "INVALID_REQUEST" (or a specific code such as RESCHEDULE_CUTOFF_PASSED). Missing or cross-company schedules/bookings return 404 with code: "NOT_FOUND". State conflicts (reschedule/cancel/attendance not allowed from the booking’s current status) return 409. Other failures may return 401, 429, or 500; see API Reference Overview for the shared error envelope and authentication error shapes.
Related
- Webhooks Overview and Webhook Event Types — real-time alternative to polling
GET /bookings - API Reference Overview — base URL, authentication, and shared conventions for all partner endpoints
.png?fit=max&auto=format&n=lKy84_BssSCy2hcz&q=85&s=ac7c949427cc2893306f6036415f087e)