Appointments
Schedule entries - appointments, projects, service calls, visits.
/appointmentsList appointments
Returns a cursor-paginated list of appointments for the authenticated organization. Soft-deleted appointments are excluded. Results are ordered by document id for stable, complete cursor coverage; each object carries its own createdAt for client-side sorting. Requires scope: appointments:read.
Response 200
Errors
/appointmentsCreate an appointment
Creates a new appointment for the authenticated organization. The organizationId and the creating actor are derived from the API key context and can never be set from the request body. Per-organization required-field configuration is enforced and returns 422 when a configured required field is missing. Supports the Idempotency-Key header for safe retries. Requires scope: appointments:write.
Request body
clientIdclientFullNamefirstNamelastNamecompanyphonesecondaryPhoneemailappointmentTypeappointmentTypeIdleadSourceleadSourceIddescriptionaddressline1unitcitystatezipcountryfullAddressserviceAreaserviceAreaIdcompanyIdcompanyNameteamidnamerolestatustagscustomFieldsvendorIdvendorsubStatustagIdsaddTagsremoveTagsstartAtendAttimezonetotalsubtotaltaxTotalemployeeCostcompanyCostlineItemsentryIditemIdnamerequireddescriptionquantityrequiredunitPricerequiredunitCosttaxabletaxRatetypeappliedTaxIdappliedTaxNametaxRatebalancecurrencytermsnotenoteslatitudelongitudestartAtLocalendAtLocalcreatedByIdcreatedByNameResponse 201
idobjectappointmentIduuidclientIdclientFullNamefirstNamelastNamecompanyphonesecondaryPhoneemailappointmentTypeappointmentTypeIdleadSourceleadSourceIddescriptionaddressline1unitcitystatezipcountryfullAddressserviceAreaserviceAreaIdcompanyIdcompanyNameteamidnamerolestatustagscustomFieldsstartAtendAttimezoneassignedUserIdslineItemsentryIditemIdnamedescriptionquantityunitPriceunitCosttaxabletaxRateamounttypesubtotaltaxTotaltotalbalanceappliedTaxIdappliedTaxNametaxRateemployeeCostcompanyCostcurrencytermsnotesidobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtlastInvoiceIdlastInvoicedAtlastEstimateIdlastEstimatedAtvendorIdvendorsubStatustagIdsstartAtLocalendAtLocalcreatedByNamelatitudelongitudecreatedAtupdatedAtErrors
/appointments/{id}Retrieve an appointment
Returns a single appointment by id. A record belonging to another organization returns 404 rather than 403, so this can never confirm cross-tenant existence. Requires scope: appointments:read.
Parameters
Path
idrequiredResponse 200
idobjectappointmentIduuidclientIdclientFullNamefirstNamelastNamecompanyphonesecondaryPhoneemailappointmentTypeappointmentTypeIdleadSourceleadSourceIddescriptionaddressline1unitcitystatezipcountryfullAddressserviceAreaserviceAreaIdcompanyIdcompanyNameteamidnamerolestatustagscustomFieldsstartAtendAttimezoneassignedUserIdslineItemsentryIditemIdnamedescriptionquantityunitPriceunitCosttaxabletaxRateamounttypesubtotaltaxTotaltotalbalanceappliedTaxIdappliedTaxNametaxRateemployeeCostcompanyCostcurrencytermsnotesidobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtlastInvoiceIdlastInvoicedAtlastEstimateIdlastEstimatedAtvendorIdvendorsubStatustagIdsstartAtLocalendAtLocalcreatedByNamelatitudelongitudecreatedAtupdatedAtErrors
/appointments/{id}Update an appointment
Updates an existing appointment. Ownership is verified before any write, so a cross-organization id returns 404. Only the fields supplied in the body are changed (merge semantics). Per-organization required-field configuration is enforced against the post-merge state, so a PATCH cannot blank a configured-required field. Requires scope: appointments:write.
Parameters
Path
idrequiredRequest body
clientIdclientFullNamefirstNamelastNamecompanyphonesecondaryPhoneemailappointmentTypeappointmentTypeIdleadSourceleadSourceIddescriptionaddressline1unitcitystatezipcountryfullAddressserviceAreaserviceAreaIdcompanyIdcompanyNameteamidnamerolestatustagscustomFieldsvendorIdvendorsubStatustagIdsaddTagsremoveTagsstartAtendAttimezonetotalsubtotaltaxTotalemployeeCostcompanyCostlineItemsentryIditemIdnamerequireddescriptionquantityrequiredunitPricerequiredunitCosttaxabletaxRatetypeappliedTaxIdappliedTaxNametaxRatebalancecurrencytermsnotenoteslatitudelongitudestartAtLocalendAtLocalcreatedByIdcreatedByNameResponse 200
idobjectappointmentIduuidclientIdclientFullNamefirstNamelastNamecompanyphonesecondaryPhoneemailappointmentTypeappointmentTypeIdleadSourceleadSourceIddescriptionaddressline1unitcitystatezipcountryfullAddressserviceAreaserviceAreaIdcompanyIdcompanyNameteamidnamerolestatustagscustomFieldsstartAtendAttimezoneassignedUserIdslineItemsentryIditemIdnamedescriptionquantityunitPriceunitCosttaxabletaxRateamounttypesubtotaltaxTotaltotalbalanceappliedTaxIdappliedTaxNametaxRateemployeeCostcompanyCostcurrencytermsnotesidobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtlastInvoiceIdlastInvoicedAtlastEstimateIdlastEstimatedAtvendorIdvendorsubStatustagIdsstartAtLocalendAtLocalcreatedByNamelatitudelongitudecreatedAtupdatedAtErrors
/appointments/{id}Delete an appointment
Soft-deletes an appointment (it is marked deleted, never hard-removed). Ownership is verified before the write, so a cross-organization id returns 404. Returns a deletion confirmation object. Requires scope: appointments:write.
Parameters
Path
idrequiredResponse 200
idobjectdeletedErrors
/appointments/{id}/notesList an appointment's notes
Returns every note on the appointment, newest first - the same notes the Notes panel of the appointment shows in Genaya, whether a person typed them there or an integration added them. The list is complete in one response (has_more is always false). An appointment of another organization returns 404. Requires scope: appointments:read.
Parameters
Path
idrequiredResponse 200
Errors
/appointments/{id}/notesAdd a note to an appointment
Adds one note, signed by the API key's owner. The note appears in the Notes panel of the appointment in Genaya right away and is returned with its id. Supports the Idempotency-Key header for safe retries. Requires scope: appointments:write.
Parameters
Path
idrequiredRequest body
textrequiredResponse 201
idobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtErrors
/appointments/{id}/notes/{noteId}Retrieve a note
Returns one note of the appointment. A note that was deleted, belongs to another appointment or to another organization returns 404. Requires scope: appointments:read.
Parameters
Path
idrequirednoteIdrequiredResponse 200
idobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtErrors
/appointments/{id}/notes/{noteId}Edit a note
Corrects the words of a note and / or pins it. Any note on the appointment can be edited, including one a person typed in Genaya. The change shows in the Notes panel of the appointment right away. Requires scope: appointments:write.
Parameters
Path
idrequirednoteIdrequiredRequest body
textpinnedResponse 200
idobjectappointmentIdtextcreatedByNamepinnedcreatedAtupdatedAtErrors
/appointments/{id}/notes/{noteId}Delete a note
Removes a note from the appointment. It leaves the Notes panel in Genaya and every notes list of the API. Returns a deletion confirmation object. Requires scope: appointments:write.
Parameters
Path
idrequirednoteIdrequiredResponse 200
idobjectdeleted