Skip to content

Create an event

Request

Creates a calendar event. Exactly one participant must be flagged as is_organizer and exactly one as is_creator, and each participant must have a unique user_id. Requires SITE_CALENDAR:WRITE.

Security
bearerAuth
Bodyapplication/jsonrequired
typestringrequired

Event type identifier as returned by GET /calendar/events/types (the id field). Determines the behavior and the available form fields for the event.

Example:"\"7\" = visit"
starts_atstringrequired

Event start, UTC datetime in strict format YYYY-MM-DDTHH:MM:SSZ (the trailing Z is required).

Example:"2026-01-15T09:00:00Z"
ends_atstringrequired

Event end, UTC datetime in strict format YYYY-MM-DDTHH:MM:SSZ (the trailing Z is required). Must be after starts_at.

Example:"2026-01-15T10:00:00Z"
all_daybooleanrequired

When true, the event spans the whole day(s) and the time portion of starts_at/ends_at is ignored by calendar displays.

titlestring or null

Free-text title shown on the event. Falls back to the event type label when null.

locationstring or null

Human-readable address or place where the event takes place.

location_geoobject or null

Geographic coordinates of the event location. When provided, both lat and lng are required.

sequence_durationinteger or null

Duration of a single appointment slot in minutes, used when the event type allows online booking with successive time slots (e.g. open-house sequences).

gathering_gaugeinteger or null

Maximum number of attendees that can book the same slot (capacity). Used for group/open-house style appointments.

commute_durationinteger or null

Estimated travel time to the location, in minutes, reserved before the event for the agent's commute.

communicate_locationboolean or null

Whether the event location may be shared with the attendees/contacts.

is_confidentialboolean or null

When true, event details are hidden from users who are not participants; the slot still appears as busy.

remind_time_in_mininteger or null, >= 0

Lead time of the reminder before the event start, in minutes (e.g. 15 = remind 15 minutes before). 0 disables the offset.

appointment_modestring or null

How the appointment is conducted:

  • OFFICE: at the agency office
  • PHONE: by phone
  • PRODUCT: on-site at the property
  • VISIO: video conference
Enum:"OFFICE""PHONE""PRODUCT""VISIO"null
participantsArray of objects or null(EventParticipantInput)

Users (agents) attending the event. Exactly one must have is_organizer: true and exactly one is_creator: true, and every user_id must be unique.

productsArray of integers or null

Immofacile product (property listing) IDs linked to the event. Each ID must be within the client update scope.

contactsArray of integers or null

Immofacile customer (contact) IDs linked to the event.

notesstring or null

Free-text internal notes attached to the event.

visio_urlstring or null

URL of the video-conference room (used when appointment_mode is VISIO).

immo360_organizer_urlstring or null

Link used by the agent to host the live/virtual visit.

immo360_participation_urlstring or null

Link shared with attendees to join the live/virtual visit.

archivedboolean or null

Whether the event is created in an archived (hidden) state.

parent_idinteger or null

ID of the parent event when this event is an occurrence/child of a recurring series.

recurrenceobject or null(EventRecurrence)

iCalendar RRULE-style recurrence definition. When present, dtstart, freq and interval are required. The by* arrays follow the RFC 5545 recurrence semantics.

curl -i -X POST \
  https://api-doc.immo-facile.com/_mock/openapi/calendar/events \
  -H 'Authorization: Bearer <YOUR_opaque_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "\"7\" = visit",
    "starts_at": "2026-01-15T09:00:00Z",
    "ends_at": "2026-01-15T10:00:00Z",
    "all_day": true,
    "title": "string",
    "location": "string",
    "location_geo": {
      "lat": 48.8566,
      "lng": 2.3522
    },
    "sequence_duration": 0,
    "gathering_gauge": 0,
    "commute_duration": 0,
    "communicate_location": true,
    "is_confidential": true,
    "remind_time_in_min": 0,
    "appointment_mode": "OFFICE",
    "participants": [
      {
        "user_id": 0,
        "is_creator": true,
        "is_organizer": true
      }
    ],
    "products": [
      0
    ],
    "contacts": [
      0
    ],
    "notes": "string",
    "visio_url": "string",
    "immo360_organizer_url": "string",
    "immo360_participation_url": "string",
    "archived": true,
    "parent_id": 0,
    "recurrence": {
      "dtstart": "2026-01-15T09:00:00Z",
      "freq": "yearly",
      "interval": 1,
      "count": 1,
      "until": "2026-12-31T23:59:59Z",
      "bymonth": [
        1
      ],
      "bymonthday": [
        -31
      ],
      "bynmonthday": [
        0
      ],
      "byyearday": [
        -366
      ],
      "byweekno": [
        -53
      ],
      "byweekday": [
        "MO"
      ],
      "bynweekday": [
        [
          0
        ]
      ],
      "bysetpos": [
        0
      ],
      "exdate": [
        "2026-02-15T09:00:00Z"
      ]
    }
  }'

Responses

Event created

Bodyapplication/json
dataobject(EventResponse)

A calendar event. The set of populated fields depends on the event type and on the information supplied when the event was created.

Response
{ "data": { "id": 0, "type": "VISIT", "starts_at": "2026-01-15T09:00:00Z", "ends_at": "2026-01-15T10:00:00Z", "all_day": true, "title": "string", "location": "string", "location_geo": {}, "sequence_duration": 0, "gathering_gauge": 0, "commute_duration": 0, "communicate_location": true, "is_confidential": true, "remind_time_in_min": 0, "appointment_mode": "OFFICE", "participants": [], "products": [], "contacts": [], "notes": "string", "visio_url": "string", "immo360_organizer_url": "string", "immo360_participation_url": "string", "archived": true, "parent_id": 0, "recurrence": {} } }