Changelog

Make Request Coercion Schema-Aware

  • Zod-validated Public API endpoints now apply legacy request body coercion based on each field's documented schema before running validation. String-encoded booleans and integers continue to be accepted for boolean and integer fields (for example, candidateTag.list still accepts "true" for includeArchived and "25" for limit), while numeric-looking strings sent to free-text fields are preserved as strings instead of being rewritten and rejected as invalid_input.
  • This affects endpoints on the Zod validation path, including candidateTag.create, candidateTag.archive, candidateTag.list, application.delete, interviewStage.info, user endpoints, and webhook endpoints.

Fix applicationForm.submit Rejecting Null utmData Fields

  • applicationForm.submit now correctly accepts null for utmData and its individual fields (utm_source, utm_medium, utm_campaign, utm_term, utm_content) again. Sending {"utmData": {"utm_source": null}} or {"utmData": null} was returning invalid_input after Zod validation was added in the presigned file upload release on April 14; this has been fixed. Omitting utmData or passing valid string values continues to work as before.

Added Error Codes for Invalid Opening References when Creating Offers

  • offer.create now returns specific error codes instead of a generic internal_server_error when the request fails due to a problem with the referenced opening:
    • opening_in_use — the opening is already in use by another offer.
    • opening_state_invalid — the opening has already been closed or filled by a different application.

Improved Error Codes for notetakerTranscript.info

  • notetakerTranscript.info now returns specific error codes instead of a generic notetaker_transcript_not_found when the request fails due to missing prerequisites:
    • notetaker_transcript_api_not_enabled — the endpoint has not been enabled for your organization (early access).
    • notetaker_transcript_not_enabled — your organization does not have the AI Notetaker add-on.
    • notetaker_transcript_expired — the transcript has expired on the free tier.

Added notetakerTranscript.info Endpoint and notetakerTranscriptId Field

  • Added notetakerTranscriptId field to the InterviewEvent object returned by interviewEvent.list and interviewSchedule.list. This field contains the ID of the AI Notetaker transcript recording for the event, or null if no transcript exists.
  • Added a new notetakerTranscript.info endpoint (Beta) to fetch transcript metadata and a pre-signed download URL for the raw transcript JSON. The URL is valid for 5 minutes. The response includes participant information (interviewers and candidate) resolved from the interview schedule. Contact your Ashby account team to enable this feature.