Availability feed

Definitions

AvailabilityFeed Definition

message AvailabilityFeed {
  repeated Schedule data = 1;
}

Schedule Definition

// Info about a schedule, which is a container for available slots that can be
// booked using an appointment. A schedule ID should be unique and stable for a
// given practitioner, facility, service type, and appointment type.
// (practitioner and appointment type are optional to identify a schedule) A
// AvailabilityFeed should be a list of this message.
message Schedule {
  // An opaque string from the partner to identify a practitioner. (required
  // only if booking by specific practitioner)
  string practitioner_id = 1;
  // An opaque string from the partner to identify a facility. (required)
  string facility_id = 2;
  // An opaque string to identify an appointment type. (required)
  string appointment_type_id = 4;

  // Ordering priority of appointment_types to display in Google Search/Map UI
  // for a practitioner/facility. Appointment_types with smaller priority number
  // will be displayed before the one with larger priority number. In the
  // compact UI block (E.g. only three appointment_types can be displayed),
  // appointment_types with lower priority might be hidden. The priority number
  // should be unique among the (practitioner_id, facility_id,
  // appointment_type_id) combination. And, they do not need to be a contiguous
  // integer sequence. If priority is not provided or not unique among a
  // (practitioner_id, facility_id, appointment_type_id) combination,
  // appointment_types will be displayed in the same order as the list of
  // schedules. (optional)
  int32 priority = 5;

  // All Availability Slots included in this schedule (required)
  repeated AvailableSlots available_slots = 6;

  // An action URL representing the deep link to this schedule. It will redirect
  // users to a booking webpage with the practitioner, facility, service_type,
  // and appointment_type preselected. (optional)
  ActionLink per_schedule_action_link = 7;

  // ...
}
// An action URL with associated language, list of countries restricted to, and
// optional platform that indicates which platform this action should be
// performed on.
message ActionLink {
  // The entry point URL for this action link. (required)
  string url = 1;

  // The BCP-47 language tag identifying the language in which the content
  // from this URI is available. (optional)
  string language = 2;

  // An unordered list of ISO 3166-1 alpha-2 country codes. Leave empty for
  // unrestricted visibility. (optional)
  repeated string restricted_country = 3;

  // ...
}

AvailableSlots Definition

// This proto can be used to show a slot for a single visit or number of
// available slot on a specific date. A slot for a single visit (30 minutes):
//   {start_sec: xx, duration_sec: 1800, spots_total: 1, spots_open: 1}
// number of available slot on a specific date:
//   {start_sec: xx, duration_sec: 86400, spots_total: 7, spots_open: 10}
//
message AvailableSlots {
  // Start time of this availability, using epoch time in seconds in UTC.
  // (required)
  int64 start_sec = 1;
  // Duration of the service in seconds, e.g. 30 minutes would be 1800.
  // (required)
  int64 duration_sec = 2;
  // Number of total spots and open spots of this availability. Typically, 1.
  // (both required)
  int64 spots_total = 3;
  int64 spots_open = 4;

  // Availability scheduling rules. (optional)
  SchedulingRuleOverrides scheduling_rule_overrides = 7;

  // ...
}

SchedulingRuleOverrides Definition

// Availability level scheduling rules.
message SchedulingRuleOverrides {
  // The last time (in seconds) that this slot is able to be booked. This
  // timestamp must be before the start_sec of the slot. (optional)
  int64 last_bookable_sec = 1;

  // ...
}

Availability feed samples

Availability Feed

{
  "data": [
    {
      "practitioner_id": "practitioner_00001",
      "facility_id": "facility_00111",
      "appointment_type_id": "appointment_type_00001",
      "per_schedule_action_link": {
        "url": "https://health.appointment/booking/facility_111/appt_type_1",
        "language": "en-US",
        "restricted_country": ["US"]
      },
      "available_slots": [
        {
          "start_sec": 1614907600,
          "duration_sec": 1800,
          "spots_total": 1,
          "spots_open": 1,
          "scheduling_rule_overrides": {
            "last_bookable_sec": 1614904000
          }
        },
        {
          "start_sec": 1614909400,
          "duration_sec": 1800,
          "spots_total": 1,
          "spots_open": 1,
          "scheduling_rule_overrides": {
            "last_bookable_sec": 1614905800
          }
        },
        {
          "start_sec": 1614911200,
          "duration_sec": 1800,
          "spots_total": 1,
          "spots_open": 1,
          "scheduling_rule_overrides": {
            "last_bookable_sec": 1614907600
          }
        }
      ]
    },
    {
      "practitioner_id": "practitioner_00002",
      "facility_id": "facility_00231",
      "appointment_type_id": "appointment_type_00001",
      "per_schedule_action_link": {
        "url": "https://health.appointment/booking/facility_231/appt_type_1",
        "language": "en-US",
        "restricted_country": ["US"]
      },
      "available_slots": [
        {
          "start_sec": 1623100000,
          "duration_sec": 1800,
          "spots_total": 1,
          "spots_open": 1
        }
      ]
    }
  ]
}

Descriptor File

{
  "generation_timestamp": 1616422319,
  "name": "healthappointments.availability",
  "data_file": [
    "healthappointments.availability-1616422319-00000-of-00003.json",
    "healthappointments.availability-1616422319-00001-of-00003.json",
    "healthappointments.availability-1616422319-00002-of-00003.json"
  ]
}