Schemas
APIErrorResponse
error_codeMachine-readable UPPER_SNAKE_CASE identifier
messageHuman-readable description
Additional context
Echo of X-Request-ID
AnswerAssessment
The automated quality assessment of a single screening answer.
Booking
The booked calendar or ATS event, with a deep link when one is available. Its ref is the booking's stable identifier.
kindThe type of appointment.
Appointment start (timezone-aware).
When the booking was confirmed/persisted.
The channel the booking was confirmed on.
Extra booking fields specific to your setup. Free-form and not part of the API contract: the keys change without notice, so do not depend on any particular key.
How long the appointment lasts, in minutes.
Appointment end; or derive from duration_minutes.
Physical address or video/phone join target.
How the meeting happens.
Who attends and in what role. A booking may have several people.
Other external records this booking touches: contact / deal / order. The primary is the dedicated external_ref field.
BookingKind
The type of appointment booked.
BookingParticipant
roleRole in the booking (e.g. rep, buyer, realtor).
Email address.
Display name.
Phone number in E.164 format: a leading + and the country calling code.
BusinessOutcomes
Every booking made, across all attempts on the task.
A request to be contacted again later, if any.
The participant's decline of this campaign, if any.
A hand-off to a person, if any.
The most recent qualification, if there was one.
A failed hard requirement of the screening, if any.
The participant's opt-out from all contact, if any.
The most recent screening assessment, if there was one.
Every write Ringtime made to your systems, across all attempts.
CallbackChannel
The channel a requested callback should happen on.
CallbackPreference
stated_preferenceThe participant's stated preference, verbatim natural language ('call me tomorrow afternoon').
The channel the callback should happen on — may differ from where it was asked (asked on WhatsApp to be called = voice).
Extra context.
The resolved callback slot.
CampaignEmbed
idCampaign identifier
The campaign name in every language it is held in. Keys are BCP 47 language codes, values are the name in that language. Not resolved to a single language: pick the key you want.
Outreach channel for the campaign: voice | whatsapp_chat | sms.
BCP 47 language codes the campaign offers. Null = inherits the screening flow's languages.
ConfirmationChannel
The channel a booking was confirmed on.
CreateTriggerRequest
campaignRouting key identifying the target campaign
Disambiguate when one routing key maps to campaigns on multiple channels
The person to contact. Required unless the source named in ids[] lets Ringtime read the person from that system; see Sources. Omitting it for any other source, or when ids is empty, gives a 400 VALIDATION_ERROR. If such a source sends it anyway, the record read from the source wins for every field except language, which is kept as the fallback language. Also required when test_mode is set: the test call goes to this phone number.
Key/values (scalars or nested objects) merged into the task context. See Sources for required context keys.
External ids for the contact. See Sources for each source's identity and required/optional id types. Omit ids when you have no source system; the contact is then matched on its phone number.
test_modeTest run. Ringtime keeps the real candidate record and any updates to your system, but sends every call and message to contact.phone instead of the real person. A STOP reply during a test never opts out the real person. Requires contact.
Disinterest
Free-text detail.
Why they declined.
EntityRef
refThe external id.
typeWhat kind of entity this points at. New values are added over time, so treat an unrecognised value as a kind you do not handle yet, never as an error.
Deep link to the entity — when the system provides one or we can compute it from the id.
EnvelopeResponse_TaskCancelResource_
Response payload
Response metadata
EnvelopeResponse_TaskResource_
Response payload
Response metadata
EnvelopeResponse_TriggerCreatedResource_
Response payload
Response metadata
Escalation
reasonWhy the conversation was handed to a human.
The handoff target, typed (phone_number / desk / ticket).
Whether the warm transfer actually connected.
How the escalation happened.
EscalationType
How an escalation to a human happened.
FieldChange
fieldThe field as the external system names it (its API name, for example postal_code__c), recorded as it was at the time of the write.
The new value (null = cleared).
Readable label for the field when one is known (for example "Postcode"), so you can label the change without looking the field up. Null when no label is known beyond field.
The external system's own key for this field. Stable, so you can match on it across writes.
The value before the write, when it is known. Usually null: Ringtime does not read the record back before writing it.
Readable label for previous, on the same terms as value_name. previous always keeps the raw value; null when no label is known.
Readable label for value when one is known (for example "1.0 | Pre-screening" for a pipeline stage id), so you can show the change without resolving ids yourself. value always keeps the raw value. Null when no label is known.
InteractionSummary
agent_idID of the agent that handled this interaction
idUnique identifier for the interaction
kindInteraction channel type
primary_language_codePrimary language code used in the interaction
statusInteraction status
Display name of the agent
Direction of the interaction (voice only)
Human-readable duration (e.g., '5m 30s')
Duration of the interaction in seconds
When the interaction ended
number_of_turnsNumber of interaction turns
When the interaction happened — the media session start, falling back to when it was created for a call that never connected.
Subject of the interaction
AI-generated summary of the interaction
LeadQualification
qualifiedWhether the lead met the agent's qualification gate. New values are added over time, so treat anything other than yes as not qualified.
The filled-in Q&A trail next to the fields summary.
The qualifying data that was captured. The keys depend on your setup and are not part of the API contract, so do not depend on any particular key.
Name of the schema that governs fields, when Ringtime has published one for your setup, for consumers that want to validate it.
The 'why' — qualified or not.
MessageSent
channelThe message channel.
Reference to the sent message, as the sending system identifies it.
External reference to the recipient, when known.
typeIdentifies this kind of write.
NotEligible
Free-text detail.
The hard mismatch, summarized.
NoteAdded
bodyThe note text.
The record the note was logged against.
The note category, when the external system types its notes.
typeIdentifies this kind of write.
OptOut
reasonWhy the participant opted out. gdpr = legal objection/erasure request, flagging legal handling beyond the org-wide suppression.
Free-text detail.
OptOutReason
Why a participant opted out (org-wide do-not-contact).
QualificationAnswer
answerThe participant's answer, as a free-text summary.
questionThe question text as asked — snapshotted.
1-indexed order the question was asked, when known.
RecommendedNextStep
Advice on what to do next after a screening. Input to a person, never a verdict.
proceed = the person cleared the bar, so move them to your next step, whatever
that is: an intake booking, a second screen, an offer. You decide which.
manual_review = someone should look before moving them on.
RecordCreated
The created record.
Optional parent entity (e.g. the vacancy an application was created under).
typeIdentifies this kind of write.
RecordLinked
The existing external record the candidate now names.
typeIdentifies this kind of write.
RecordUpdated
The fields that were set.
The record that was updated.
Optional note written in the same call.
typeIdentifies this kind of write.
ResponseMetadata
Echo of the client-provided X-Request-ID header
ScreeningAnswer
answerThe candidate's response, as a free-text summary.
assessmentThe automated quality assessment of this answer.
position1-indexed order the question was asked.
questionThe question text as asked (resolved to the screening language). Snapshotted — the flow definition can change later.
weightHow heavily the question counts — drives scoring (mandatory x4 ... low x1).
What the question is about (topic grouping).
The offered options for choice questions.
The answer format expected.
Join key to the live question definition.
sourceWhere the answer came from: heard = given in this conversation, known = carried over from an earlier one.
valueOptional normalized typed answer value
ScreeningAssessment
The filled-in flow, ordered by position.
scoreThe overall assessment score, weighted across answers.
Flow display name, resolved to the screening language.
has_mandatory_failA mandatory question scored <= neutral — a knockout (e.g. 'no' on a mandatory driver's-licence question); routes to manual_review.
has_soft_negativeA non-mandatory question scored negative — worth a recruiter's look, not a knockout.
The language the screening was conducted in (BCP-47).
Deterministic human-readable summary of the assessment.
Advisory routing hint — input to a human, never a verdict.
score_scaleThe scale the score is expressed on. binary_interest = synthesized from interest signals (100 = interested, 0 = not interested).
Join key to the live screening-flow definition.
The minimum score this submission was judged against. Null = no threshold was recorded for it; 0 = knockout questions only, with no numeric bar.
Flow questions that got no answer, ordered by position.
ScreeningCategory
What a screening question is about (topic grouping).
ScreeningQuestionType
The answer format a screening question expects.
ScreeningUnansweredQuestion
position1-indexed order the question sits at in the flow.
questionThe question text (resolved to the screening language). Snapshotted.
weightHow heavily the question counts — mandatory means it was a must-have.
Join key to the live question definition.
ScreeningWeight
How heavily a screening question counts toward the score.
SideEffect
The write itself. type says which kind it is.
integrationThe system that was written to. Free-form: the set of systems Ringtime writes to grows over time, so do not match on a fixed list of values.
When the write happened.
succeededWhether the external write succeeded.
Short verb for the write, for display and auditing (for example move_stage). It restates what effect already says.
Extra detail about the write, for auditing. Free-form and not part of the API contract; it never contains credentials.
SideEffectNote
bodyThe note text.
The note category, when the external system types its notes.
TaskCancelRequest
Optional free-form short code for why the task is being cancelled (e.g. 'recruiter_took_over', 'candidate_moved', 'vacancy_closed'). Recorded for analytics and surfaced back to your team.
TaskCancelResource
idTask identifier
statusThe task's current status. 'cancelled' after a successful stop; an already-terminal task returns its existing status unchanged (the outreach was already over).
When the task was cancelled (its last-updated time). Null when the task is in a non-cancelled terminal state — it concluded on its own.
Echo of the cancellation reason supplied in the request (null if none was given)
TaskExecutionObservation
statusWhere the task stands: its final state, or its current plan.
The channel the attempt uses. Null when not yet known.
Why the task ended without a completed attempt, when that is what happened.
When the next attempt is planned, in UTC. It may already be in the past. Null when there is no plan to report.
TaskResource
agent_idAgent identifier
business_goalBusiness goal tracked by this task
created_atWhen the task was created
idTask identifier
organization_idOrganization owning the task
participant_identifierParticipant phone/email identifier
statusTask status
updated_atWhen the task last changed
Everything the task achieved, gathered across its attempts. Returned only when the request asks for include=business_outcomes; null otherwise. An envelope with every field empty means there are no outcomes yet.
The campaign this task belongs to, with its id on the node. Embedded by default when you read a single task. Null when the task has no campaign.
Values the agent gathered while running this task. Free-form and not part of the API contract: the keys and their meaning differ per agent and change without notice, so do not depend on any particular key. For results you can rely on, read business_outcomes.
What Ringtime currently plans or has concluded for this task. Returned only when the request asks for include=interactions; null when there is nothing to report. scheduled_at is the current plan for the next attempt, not a promise about when it starts.
The task's attempts, each as a short summary, oldest first. Returned only when the request asks for include=interactions; null otherwise. An empty list means there have been no attempts yet.
Preferred language code
Extra data attached to the task. Free-form and not part of the API contract: the keys and their meaning change without notice, so do not depend on any particular key.
participant_first_nameParticipant first name
participant_last_nameParticipant last name
Working context the agent carries between attempts on this task. Free-form and not part of the API contract: the keys and their meaning differ per agent and change without notice, so do not depend on any particular key.
How far the outreach got, counting the best attempt on the task. Voicemail counts as unreached. An attempt that reached the person and ended conclusively counts as resolved. New values are added over time, so tolerate one you do not recognise.
Identifier of the outreach request this task was created from.
The single headline result of the task, for when you do not want to read business_outcomes in full. It is a summary, so use business_outcomes for reporting, billing, or anything you must be able to defend. Null = no attempt has happened yet. none = the person was reached but nothing came of it. New values are added over time, so tolerate one you do not recognise.
TriggerAddress
Belgium-specific apartment / box number
City / municipality
ISO 3166-1 alpha-2 code (e.g. 'BE', 'NL')
Single-line fallback address when the decomposed fields are unavailable
House / building number
Postal / ZIP code
Province / state
Street name
TriggerContact
first_nameContact's first name
language^[a-z]{2}(-[A-Z]{2})… · requiredBCP 47 language code for the conversation (e.g. 'nl', 'fr-BE')
phoneContact's phone number, including the country calling code. Separators and a national trunk prefix are normalized away (e.g. +15555550100)
Contact's address as a structured object
Contact's email address
Contact's last name
When YOUR record for this contact was last changed, with a UTC offset (e.g. '2026-03-03T14:22:00+01:00'). It dates every field in this block, including the address, which is why it sits on the contact and not on the address. Send it when you are enrolling a profile that was edited a while ago, so a later correction from the person is not outranked by today's batch. Omit it and we read the address as of this request. A naive timestamp or one in the future is rejected.
TriggerCreatedResource
created_atWhen the trigger was recorded
idThe trigger's id (trg_ prefixed)
statusAlways 'accepted' for a created trigger
task_idThe created task's id (task_ prefixed)
TriggerId
sourceSource system the id belongs to, e.g. 'carerix'
typeWhat the id refers to, e.g. 'candidate', 'application', 'job'
valueThe id value in the source system

