openapi: 3.2.0 info: version: v1 title: Spotio 2.0 Appointments V2 API description: ' The controller is responsible for handling the creation, updating, deleting and retrieval of appointment. Mainly the controller allow to manage appointment (current and future). Every appointment has related activity. ' contact: name: Contact us url: https://spotio.com/contact/ email: support@spotio.com servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test security: - Bearer: [] tags: - name: AppointmentsV2 description: ' The controller is responsible for handling the creation, updating, deleting and retrieval of appointment. Mainly the controller allow to manage appointment (current and future). Every appointment has related activity. ' paths: /api/v2/appointments/{appointmentId}: get: tags: - AppointmentsV2 summary: Get an appointment by ID description: "### Appointment id formats\n#### Single appointment \n* \"{Id}\" --> \"997\"\n#### Single appointment from recurring series (\"ghost\" appointment from future)\n* \"{Id]-[RecurringDefinitionId}-{OriginalStartDate}\" --> \"0-5173-638186040000000000\" \n" parameters: - name: appointmentId in: path required: true schema: type: string responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test put: tags: - AppointmentsV2 summary: Update an existing appointment description: "### Appointment id formats\n#### Single appointment \n* \"{Id}\" --> \"997\"\n#### Single appointment from recurring series (\"ghost\" appointment from future)\n* \"{Id]-[RecurringDefinitionId}-{OriginalStartDate}\" --> \"0-5173-638186040000000000\" \n" parameters: - name: appointmentId in: path required: true schema: type: string requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9449667+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9449707+00:00' application/json-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9449667+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9449707+00:00' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9449667+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9449707+00:00' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9449667+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9449707+00:00' application/*+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9449667+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9449707+00:00' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9506031+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9506031+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9506031+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test patch: tags: - AppointmentsV2 summary: Partially update an existing appointment description: "### Appointment id formats\n#### Single appointment \n* \"{Id}\" --> \"997\"\n#### Single appointment from recurring series (\"ghost\" appointment from future)\n* \"{Id]-[RecurringDefinitionId}-{OriginalStartDate}\" --> \"0-5173-638186040000000000\" \n" parameters: - name: appointmentId in: path required: true schema: type: string requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9683473+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9683532+00:00' application/json-patch+json: schema: $ref: '#/components/schemas/Morcatko.AspNetCore.JsonMergePatch.JsonMergePatchDocument`1[[Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2, Spotio.Frontend.ViewModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9683473+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9683532+00:00' application/json: schema: $ref: '#/components/schemas/Morcatko.AspNetCore.JsonMergePatch.JsonMergePatchDocument`1[[Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2, Spotio.Frontend.ViewModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9683473+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9683532+00:00' text/json: schema: $ref: '#/components/schemas/Morcatko.AspNetCore.JsonMergePatch.JsonMergePatchDocument`1[[Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2, Spotio.Frontend.ViewModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9683473+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9683532+00:00' application/*+json: schema: $ref: '#/components/schemas/Morcatko.AspNetCore.JsonMergePatch.JsonMergePatchDocument`1[[Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2, Spotio.Frontend.ViewModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9683473+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9683532+00:00' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9729001+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9729001+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9729001+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test /api/v2/appointments/byActivity/{activityId}: get: tags: - AppointmentsV2 summary: Get an appointment by activity ID parameters: - name: activityId in: path required: true schema: type: integer format: int32 responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject' '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test /api/v2/appointments: post: tags: - AppointmentsV2 summary: Create a new appointment description: "If AllDay = true (lasts for the entirety of the date), an appointment is created without a start and end\n### Appointment id formats\n#### Single appointment \n* \"{Id}\" --> \"997\"\n#### Single appointment from recurring series (\"ghost\" appointment from future)\n* \"{Id]-[RecurringDefinitionId}-{OriginalStartDate}\" --> \"0-5173-638186040000000000\" \n" requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.981722+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9817243+00:00' application/json-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.981722+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9817243+00:00' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.981722+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9817243+00:00' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.981722+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9817243+00:00' application/*+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' examples: default: value: dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.981722+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 remindBeforeInSeconds: 3600 activityTemplateId: '4' intention: allFromRecurring originalStartDate: '2026-08-03T07:14:38.9817243+00:00' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9820425+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9820425+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' examples: default: value: id: '2163003' dataObjectId: 6141d5853bf5da0001e891ee ownerId: '2' date: '2026-08-03T07:14:38.9820425+00:00' duration: 60 title: Talk about insurance notes: They want to buy activityId: '2163003' allDay: false done: false recurringDefinition: id: '304' periodicity: hours interval: 5 repeatOn: - monday - friday count: 5 activityTemplateId: '4' remindBeforeInSeconds: 3600 auto: false createdById: '1234' dataObjectTypeId: 1 access: full '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test /api/v2/appointments/bulk/create: post: tags: - AppointmentsV2 summary: Bulk actions to create appointment for many records requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto' application/json-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto' application/*+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto' responses: '200': description: Success '400': description: Bad Request '401': description: Unauthorized security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test /api/v2/appointments/multiple: post: tags: - AppointmentsV2 summary: Create multiple appointments (max 20) description: "Creates multiple appointments in a single request (max 20 per request). Each appointment is processed individually and the response \nincludes the result for each appointment (success with created appointment or failure with error details).\nPartial success is possible - some appointments may succeed while others fail." requestBody: content: application/merge-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest' application/json-patch+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest' application/*+json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest' responses: '200': description: Success content: text/plain: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsResponse' application/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsResponse' text/json: schema: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsResponse' '400': description: Bad Request content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '401': description: Unauthorized '415': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '422': description: Client Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' '500': description: Server Error content: text/plain: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' application/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' text/json: schema: $ref: '#/components/schemas/Spotio.Infrastructure.Common.DataModel.Error.Error' security: - Bearer: [] servers: - url: https://api.spotio2.com description: Production - url: https://app-test.spotio2.com description: Test components: schemas: Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinitionPatch: type: object description: Equivalent to RRule - recurring settings additionalProperties: false properties: id: type: - string - 'null' periodicity: $ref: '#/components/schemas/Spotio.Appointments.Client.Model.PeriodicityDto' interval: type: integer format: int32 repeatOn: type: - array - 'null' items: $ref: '#/components/schemas/System.DayOfWeek' until: type: - string - 'null' count: type: - integer - 'null' format: int32 timezone: type: - string - 'null' Spotio.Frontend.ViewModel.Appointment.V2.AppointmentAccessDto: type: string enum: - Full - Ghost - Visible - Editable - NotVisible Spotio.Appointments.Client.Model.ChangeAppointmentIntentionDto: type: string enum: - Single - SingleFromRecurring - AllInFutureFromRecurring - AllFromRecurring Spotio.Frontend.ViewModel.DataObjects.BulkPolygonFilter: type: object additionalProperties: false properties: points: type: - array - 'null' items: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.DataObjects.PolygonPoint' Spotio.Infrastructure.Common.DataModel.Error.Error: type: object additionalProperties: false properties: errors: readOnly: true Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentError: type: object additionalProperties: false properties: code: type: - string - 'null' description: The error code. message: type: - string - 'null' description: The error message. Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinition: type: object description: Equivalent to RRule - recurring settings additionalProperties: false properties: id: type: - string - 'null' periodicity: $ref: '#/components/schemas/Spotio.Appointments.Client.Model.PeriodicityDto' interval: type: integer format: int32 repeatOn: type: - array - 'null' items: $ref: '#/components/schemas/System.DayOfWeek' until: type: - string - 'null' count: type: - integer - 'null' format: int32 timezone: type: - string - 'null' Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject: type: object additionalProperties: false properties: id: type: - string - 'null' description: 'The unique identifier of the appointment. Id has to 2 formats: [id] when id is saved in database, [id]-[recurringId]-[originalStartDate] when an appointment is one of the recurring appointment from the future' dataObjectId: type: - string - 'null' description: The unique identifier of the associated data object. ownerId: type: - string - 'null' description: The unique identifier of the appointment owner. date: type: string description: The date and time of the appointment. format: date-time duration: type: integer description: The duration of the appointment in minutes. format: int32 title: type: - string - 'null' description: The title of the appointment. notes: type: - string - 'null' description: Additional notes for the appointment. activityId: type: - string - 'null' description: The identifier of the activity associated with the appointment. allDay: type: boolean description: Indicates whether the appointment is an all-day event. done: type: boolean description: Indicates whether the appointment has been completed. autoplayDataObjectId: type: - string - 'null' description: The unique identifier of the autoplay data object. recurringDefinition: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinition' activityTemplateId: type: - string - 'null' description: The identifier of the activity template associated with the appointment. remindBeforeInSeconds: type: - integer - 'null' description: The number of seconds before the appointment to send a reminder. format: int32 auto: type: - boolean - 'null' description: Indicates whether the appointment was created automatically. autoplayDataObjectStepId: type: - string - 'null' description: The unique identifier of the autoplay data object step. allDayDate: type: - string - 'null' description: The date of the all-day event, if applicable. createdById: type: - string - 'null' description: The unique identifier of the user who created the appointment. dataObjectTypeId: type: - integer - 'null' description: The identifier of the data object type from the workflow settings. format: int32 dataObject: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentWithDataObject%2BDataObjectWithParentAndChildDto' access: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentAccessDto' sendInvitation: type: - boolean - 'null' description: Determines if the invitation should be sent. invitationStatus: $ref: '#/components/schemas/InvitationStatus' invitationDescription: type: - string - 'null' description: The invitation description. updatedById: type: integer description: The unique identifier of the user who last updated the appointment. format: int32 updatedAt: type: string description: The last updated date and time of the appointment. format: date-time nbaId: type: - string - 'null' description: The unique identifier of the NBA recommendation. InvitationStatus: type: string enum: - 'Yes' - 'No' - Maybe - Noreply System.DayOfWeek: type: string enum: - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentResult: type: object additionalProperties: false properties: index: type: integer description: The index of the appointment in the original request. format: int32 success: type: boolean description: Indicates whether the appointment was successfully created. appointment: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2' errors: type: - array - 'null' description: The errors that occurred during creation, if unsuccessful. items: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentError' Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2: type: object additionalProperties: false properties: id: type: - string - 'null' description: 'The unique identifier of the appointment. Id has to 2 formats: [id] when id is saved in database, [id]-[recurringId]-[originalStartDate] when an appointment is one of the recurring appointment from the future' dataObjectId: type: - string - 'null' description: The unique identifier of the associated data object. ownerId: type: - string - 'null' description: The unique identifier of the appointment owner. date: type: string description: The date and time of the appointment. format: date-time duration: type: integer description: The duration of the appointment in minutes. format: int32 title: type: - string - 'null' description: The title of the appointment. notes: type: - string - 'null' description: Additional notes for the appointment. activityId: type: - string - 'null' description: The identifier of the activity associated with the appointment. allDay: type: boolean description: Indicates whether the appointment is an all-day event. done: type: boolean description: Indicates whether the appointment has been completed. autoplayDataObjectId: type: - string - 'null' description: The unique identifier of the autoplay data object. recurringDefinition: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinition' activityTemplateId: type: - string - 'null' description: The identifier of the activity template associated with the appointment. remindBeforeInSeconds: type: - integer - 'null' description: The number of seconds before the appointment to send a reminder. format: int32 auto: type: - boolean - 'null' description: Indicates whether the appointment was created automatically. autoplayDataObjectStepId: type: - string - 'null' description: The unique identifier of the autoplay data object step. allDayDate: type: - string - 'null' description: The date of the all-day event, if applicable. createdById: type: - string - 'null' description: The unique identifier of the user who created the appointment. dataObjectTypeId: type: - integer - 'null' description: The identifier of the data object type from the workflow settings. format: int32 access: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentAccessDto' sendInvitation: type: - boolean - 'null' description: Determines if the invitation should be sent. invitationStatus: $ref: '#/components/schemas/InvitationStatus' invitationDescription: type: - string - 'null' description: The invitation description. nbaId: type: - string - 'null' description: The unique identifier of the NBA recommendation. Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsResponse: type: object additionalProperties: false properties: results: type: - array - 'null' description: The results of creating each appointment. items: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentResult' successCount: type: integer description: The number of appointments that were successfully created. format: int32 readOnly: true failureCount: type: integer description: The number of appointments that failed to be created. format: int32 readOnly: true Spotio.Appointments.Client.Model.PeriodicityDto: type: string enum: - None - Seconds - Minutes - Hours - Days - Weeks - Months - Years Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request: type: object additionalProperties: false properties: dataObjectId: type: - string - 'null' description: The unique identifier of the data object associated with the appointment. ownerId: type: - string - 'null' description: The unique identifier of the owner of the appointment. date: type: - string - 'null' description: The date and time of the appointment. format: date-time duration: type: - integer - 'null' description: The duration of the appointment in minutes. format: int32 title: type: - string - 'null' description: The title of the appointment. notes: type: - string - 'null' description: Additional notes about the appointment. activityId: type: - string - 'null' description: The unique identifier of the activity associated with the appointment. allDay: type: boolean description: Indicates whether the appointment has an all-day duration. done: type: boolean description: Indicates whether the appointment has been completed. recurringDefinition: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinition' remindBeforeInSeconds: type: - integer - 'null' description: The number of seconds before the scheduled start of the appointment when a reminder should be sent. format: int32 activityTemplateId: type: - string - 'null' description: The unique identifier of the activity template associated with the appointment. intention: $ref: '#/components/schemas/Spotio.Appointments.Client.Model.ChangeAppointmentIntentionDto' originalStartDate: type: string description: The original start date and time of the appointment if it has been rescheduled. format: date-time allDayDate: type: - string - 'null' description: If AllDay is true, the date of the appointment without the time component. appendRecordNameToTitle: type: - boolean - 'null' description: Append record name to the title sendInvitation: type: - boolean - 'null' description: Determines if the invitation email should be sent invitationDescription: type: - string - 'null' description: The invitation description. nbaId: type: - string - 'null' description: The unique identifier of the NBA recommendation. Spotio.Frontend.ViewModel.Appointment.V2.PatchAppointmentV2: type: object additionalProperties: false properties: dataObjectId: type: - string - 'null' ownerId: type: - string - 'null' date: type: - string - 'null' description: Date of the appointment format: date-time duration: type: - integer - 'null' description: Duration in minutes format: int32 title: type: - string - 'null' notes: type: - string - 'null' activityId: type: - string - 'null' allDay: type: - boolean - 'null' description: All Day - if true, the appointment will have an all day duration. False by default done: type: - boolean - 'null' description: If true, the appointment will not be scheduled in the upcoming events, but historical recurringDefinition: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.RecurringAppointmentDefinitionPatch' remindBeforeInSeconds: type: - integer - 'null' description: How many seconds before scheduled start of the activity reminder should be sent format: int32 activityTemplateId: type: - string - 'null' description: ActivityTemplateId from workflow settings intention: $ref: '#/components/schemas/Spotio.Appointments.Client.Model.ChangeAppointmentIntentionDto' originalStartDate: type: - string - 'null' description: Date and time when activity was created to recurring events, the original start time of the event format: date-time allDayDate: type: - string - 'null' description: If AllDay = true, the day of the activity without time nbaId: type: - string - 'null' description: The unique identifier of the NBA recommendation. Spotio.Frontend.ViewModel.Appointment.V2.CreateAppointmentsRequest: type: object additionalProperties: false properties: appointments: type: - array - 'null' description: The list of appointments to create. items: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' Spotio.Frontend.ViewModel.Appointment.CreateAppointmentBulkRequestDto: type: object additionalProperties: false properties: polygon: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.DataObjects.BulkPolygonFilter' filterId: type: - string - 'null' description: Filter data objects by filter ID dataObjectIds: type: - array - 'null' description: IDs of the data objects to perform bulk actions on items: type: string q: type: - string - 'null' description: Search query singleType: type: - integer - 'null' description: Type ID of the data objects to perform bulk actions on, if only a single type is selected from workflow settings format: int32 appointment: $ref: '#/components/schemas/Spotio.Frontend.ViewModel.Appointment.V2.AppointmentV2Request' Spotio.Frontend.ViewModel.DataObjects.PolygonPoint: type: object additionalProperties: false properties: lat: type: number format: double lng: type: number format: double securitySchemes: Bearer: type: apiKey description: 'Enter the Bearer Authorization string as following: `Bearer Generated-JWT-Token`' name: Authorization in: header