{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/grubhub/main/json-schema/grubhub-posfullschedule-schema.json", "title": "PosFullSchedule", "x-generated": "2026-09-17", "x-method": "derived", "x-source": "openapi/grubhub-merchant-schedules-openapi.yml#/components/schemas/PosFullSchedule", "type": "object", "properties": { "statuses": { "type": "object", "additionalProperties": { "type": "string", "description": "The status of a merchant as related to the schedule.", "enum": [ "PAUSED", "ONBOARDING", "OPEN", "CLOSED", "WHITED_IN", "BLACKED_OUT", "GHD_BLACKED_OUT", "MASS_BLACKED_OUT" ] }, "description": "A map of all schedule types (`DELIVERY`, `PICKUP`, etc.) and their current open/close status." }, "today_schedule": { "type": "object", "properties": { "empty": { "type": "boolean" } }, "additionalProperties": { "$ref": "#/$defs/PeriodSchedule" }, "description": "A collection of the types of schedules for a merchant, the date on which they begin, and the number of days in each schedule's period. Together, this collection defines the outlines of a merchant's pickup and delivery schedules.
Note that the first field, name, is used as the index of the collection." }, "overrides_in_effect": { "type": "array", "description": "The schedules overrides that currently apply to the various schedule types in effect for this merchant.", "items": { "$ref": "#/$defs/PosScheduleOverride" } }, "mass_overrides_in_effect": { "type": "array", "description": "The schedule overrides that apply to this and several other merchants, usually of the same merchant group.", "items": { "$ref": "#/$defs/PosMassScheduleOverride" } }, "repeating_schedules_in_effect": { "type": "array", "description": "Any repeating weekly schedules in effect for this merchant.", "items": { "$ref": "#/$defs/PosMerchantRepeatingSchedule" } }, "custom_schedules_in_effect": { "type": "array", "description": "Any custom, temporary schedules currently in place. These will take precedence over a repeating schedule of the same type.", "items": { "$ref": "#/$defs/PosCustomSchedule" } }, "all_schedule_overrides": { "type": "array", "description": "All previous, current, and future schedule overrides associated with this merchant.", "items": { "$ref": "#/$defs/PosScheduleOverride" } }, "all_mass_overrides": { "type": "array", "description": "All mass schedule overrides that have or could affect this merchant's schedule.", "items": { "$ref": "#/$defs/PosMassScheduleOverride" } }, "all_repeating_schedules": { "type": "array", "description": "All weekly repeating schedules associated with this merchant. These are used as the default schedule when no custom schedules, or unavailable/available overrides are in effect.", "items": { "$ref": "#/$defs/PosMerchantRepeatingSchedule" } }, "all_custom_schedules": { "type": "array", "description": "All custom schedules associated with this merchant. These are temporary schedules that change the working hours for the merchant for things like holiday or summer hours.", "items": { "$ref": "#/$defs/PosCustomSchedule" } }, "managed_delivery_schedules": { "type": "array", "description": "The managed delivery schedules for the region that includes this merchant's address.", "items": { "$ref": "#/$defs/RepeatingSchedule" } } }, "description": "Complete schedule information about the merchant, including the status of any alternate schedules or overrides.", "$defs": { "Chronology": { "type": "object", "properties": { "zone": { "$ref": "#/$defs/DateTimeZone" } } }, "CustomScheduleMetadata": { "required": [ "intervals", "source" ], "type": "object", "properties": { "created_by": { "type": "string", "description": "The creator of the schedule" }, "updated_by": { "type": "string", "description": "The last credential to update the schedule" }, "created_date": { "type": "string", "description": "The creation date of the schedule", "format": "date-time" }, "updated_date": { "type": "string", "description": "The last update date of the schedule", "format": "date-time" }, "legacy_id": { "type": "string", "description": "The legacy ID of the schedule in MySQL" }, "description": { "type": "string", "description": "The description for the schedule" }, "source": { "type": "string", "description": "The source of the creation or update of the custom schedule" }, "intervals": { "type": "array", "description": "A set of non-overlapping time periods", "items": { "$ref": "#/$defs/RepeatingScheduleRuleInterval" } } }, "description": "The metadata associated to a specific custom schedule" }, "DateTimeField": { "type": "object", "properties": { "name": { "type": "string" }, "type": { "$ref": "#/$defs/DateTimeFieldType" }, "supported": { "type": "boolean" }, "lenient": { "type": "boolean" }, "duration_field": { "$ref": "#/$defs/DurationField" }, "range_duration_field": { "$ref": "#/$defs/DurationField" }, "leap_duration_field": { "$ref": "#/$defs/DurationField" }, "minimum_value": { "type": "integer", "format": "int32" }, "maximum_value": { "type": "integer", "format": "int32" } } }, "DateTimeFieldType": { "type": "object", "properties": { "name": { "type": "string" }, "duration_type": { "$ref": "#/$defs/DurationFieldType" }, "range_duration_type": { "$ref": "#/$defs/DurationFieldType" } } }, "DateTimeZone": { "type": "object", "properties": { "id": { "type": "string" }, "fixed": { "type": "boolean" } } }, "DurationField": { "type": "object", "properties": { "name": { "type": "string" }, "type": { "$ref": "#/$defs/DurationFieldType" }, "supported": { "type": "boolean" }, "unit_millis": { "type": "integer", "format": "int64" }, "precise": { "type": "boolean" } } }, "DurationFieldType": { "type": "object", "properties": { "name": { "type": "string" } } }, "LocalTime": { "type": "object", "properties": { "chronology": { "$ref": "#/$defs/Chronology" }, "millis_of_day": { "type": "integer", "format": "int32" }, "hour_of_day": { "type": "integer", "format": "int32" }, "minute_of_hour": { "type": "integer", "format": "int32" }, "second_of_minute": { "type": "integer", "format": "int32" }, "millis_of_second": { "type": "integer", "format": "int32" }, "fields": { "type": "array", "items": { "$ref": "#/$defs/DateTimeField" } }, "values": { "type": "array", "items": { "type": "integer", "format": "int32" } }, "field_types": { "type": "array", "items": { "$ref": "#/$defs/DateTimeFieldType" } } } }, "MassScheduleOverrideMetadata": { "type": "object", "properties": { "name_filter": { "type": "string", "description": "Optional Java Regular Expression used to target specific RepeatingSchedules by name" }, "override_type": { "type": "string", "description": "The type of a schedule override. Describes whether the deviation is to open or close unexpectedly.", "enum": [ "BLACKOUT", "WHITEIN" ] }, "schedule_type": { "type": "string", "description": "The type of mass schedule override, whether timezones are applied", "enum": [ "LOCAL", "ZONED" ] }, "created_by": { "type": "string", "description": "The creator of the schedule" }, "updated_by": { "type": "string", "description": "The last credential to update the schedule" }, "created_date": { "type": "string", "description": "The creation date of the schedule", "format": "date-time" }, "updated_date": { "type": "string", "description": "The last update date of the schedule", "format": "date-time" }, "legacy_id": { "type": "string", "description": "The legacy ID of the schedule in MySQL" }, "description": { "type": "string", "description": "The description for the schedule" } }, "description": "Metadata associated to a merchant mass schedule override" }, "PeriodSchedule": { "type": "object", "properties": { "empty": { "type": "boolean" } }, "additionalProperties": { "type": "array", "properties": { "empty": { "type": "boolean" } }, "description": "A collection of the types of schedules for a merchant, the date on which they begin, and the number of days in each schedule's period. Together, this collection defines the outlines of a merchant's pickup and delivery schedules.
Note that the first field, name, is used as the index of the collection.", "items": { "$ref": "#/$defs/RepeatingScheduleRuleInterval" } }, "description": "A collection of the types of schedules for a merchant, the date on which they begin, and the number of days in each schedule's period. Together, this collection defines the outlines of a merchant's pickup and delivery schedules.
Note that the first field, name, is used as the index of the collection." }, "PosCustomSchedule": { "required": [ "date", "metadata", "name" ], "type": "object", "properties": { "merchant_id": { "type": "string" }, "name": { "type": "string", "description": "Type of schedule. If not specified, defaults to \"DELIVERY\"", "enum": [ "DELIVERY", "PICKUP", "CATERING", "GROUP" ] }, "date": { "type": "string", "format": "date" }, "metadata": { "$ref": "#/$defs/CustomScheduleMetadata" } }, "description": "All custom schedules associated with this merchant. These are temporary schedules that change the working hours for the merchant for things like holiday or summer hours." }, "PosMassScheduleOverride": { "type": "object", "properties": { "id": { "type": "string", "description": "The identifier of the mass override itself.", "format": "uuid" }, "merchant_ids": { "uniqueItems": true, "type": "array", "description": "The IDs of the merchants affected by this mass blackout.", "items": { "type": "string", "description": "The IDs of the merchants affected by this mass blackout." } }, "metadata": { "$ref": "#/$defs/MassScheduleOverrideMetadata" }, "start_time_utc": { "type": "string", "description": "The date and time when this mass override begins in the UTC (Coordinated Universal Time) time zone.", "format": "date-time" }, "end_time_utc": { "type": "string", "description": "The date and time when this mass override ends in the UTC (Coordinated Universal Time) time zone.", "format": "date-time" }, "start_time_local": { "type": "string", "description": "The date and time when this mass override begins in the merchant's local time zone.", "format": "date-time" }, "end_time_local": { "type": "string", "description": "The date and time when this mass override ends in the merchant's local time zone.", "format": "date-time" } }, "description": "Information about a blackout that applies to multiple merchants; used for groups of merchants to halt online orders or pause ordering during a disaster (Grubhub administrative use only)." }, "PosMerchantRepeatingSchedule": { "required": [ "merchant_id", "name", "repeating_schedule_content", "schedule_id" ], "type": "object", "properties": { "merchant_id": { "type": "string", "description": "The Grubhub or third-party provided external ID for the merchant." }, "schedule_id": { "type": "string", "description": "The ID of this schedule.", "format": "uuid" }, "name": { "type": "string", "description": "Type of schedule. If not specified, defaults to \"DELIVERY\"", "enum": [ "DELIVERY", "PICKUP", "CATERING", "GROUP" ] }, "version_id": { "type": "string", "description": "The ID of the version of this schedule which changes upon updates to the schedule.", "format": "uuid" }, "repeating_schedule_content": { "$ref": "#/$defs/RepeatingSchedule" }, "metadata": { "$ref": "#/$defs/RepeatingScheduleMetadata" } }, "description": "The repeating weekly schedule of a merchant." }, "PosScheduleOverride": { "required": [ "end_time_utc", "local_end_time", "local_start_time", "merchant_id", "name", "start_time_utc", "type" ], "type": "object", "properties": { "schedule_id": { "type": "string", "description": "The ID of this schedule", "format": "uuid" }, "merchant_id": { "type": "string", "description": "The Grubhub or third-party provided external ID for the merchant." }, "name": { "type": "string", "description": "Type of schedule. If not specified, defaults to \"DELIVERY\"", "enum": [ "DELIVERY", "PICKUP", "CATERING", "GROUP" ] }, "type": { "type": "string", "description": "Type of schedule override. \"UNAVAILABLE\" is a duration when the merchant should be closed, when normally they would be open. \"AVAILABLE\" is a duration when the merchant should be open, when normally they would be closed.", "enum": [ "WHITEIN", "BLACKOUT", "UNPAUSE", "AVAILABLE", "UNAVAILABLE", "AVAILABLE", "UNAVAILABLE" ] }, "metadata": { "$ref": "#/$defs/ScheduleOverrideMetadata" }, "local_start_time": { "type": "string", "description": "The time in the merchant's timezone when the override duration starts.", "format": "date-time" }, "local_end_time": { "type": "string", "description": "The time in the merchant's timezone when the override duration ends.", "format": "date-time" }, "start_time_utc": { "type": "string", "description": "The UTC time when the override duration starts.", "format": "date-time" }, "end_time_utc": { "type": "string", "description": "The UTC time when the override duration ends.", "format": "date-time" } }, "description": "Schedule Override for a merchant. Schedule overrides are ad hoc modifications to a merchant's normal hours of operation on Grubhub." }, "RepeatingSchedule": { "required": [ "external_id", "name", "rules" ], "type": "object", "properties": { "external_id": { "type": "string", "description": "The merchant-set ID for this schedule, which can be used to link it in the `PosNormalizedMenu`." }, "name": { "type": "string", "description": "The display name for this schedule, e.g. \"Sunday Brunch\"" }, "type": { "type": "string", "description": "How often this schedule repeats. Currently the only valid value is \"WEEKLY\".", "enum": [ "WEEKLY" ] }, "rules": { "type": "array", "description": "A set of non-overlapping time periods.", "items": { "$ref": "#/$defs/RepeatingScheduleRule" } } }, "description": "Information about a weekly schedule during which a menu item may be made available. Typical usages include Breakfast, Lunch, Dinner, Weekend Brunch, etc." }, "RepeatingScheduleMetadata": { "required": [ "source" ], "type": "object", "properties": { "created_by": { "type": "string", "description": "The creator of the schedule" }, "updated_by": { "type": "string", "description": "The last credential to update the schedule" }, "created_date": { "type": "string", "description": "The creation date of the schedule", "format": "date-time" }, "updated_date": { "type": "string", "description": "The last update date of the schedule", "format": "date-time" }, "legacy_id": { "type": "string", "description": "The legacy ID of the schedule in MySQL" }, "description": { "type": "string", "description": "The description for the schedule" }, "source": { "type": "string", "description": "The source of the creation or update of the repeating schedule" } }, "description": "The metadata associated to a specific repeating schedule" }, "RepeatingScheduleRule": { "required": [ "end_time", "start_time" ], "type": "object", "properties": { "days": { "uniqueItems": true, "type": "array", "description": "Days of the week for which the time period applies. Must be one of [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]", "items": { "type": "string", "description": "Days of the week for which the time period applies. Must be one of [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]", "enum": [ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" ] } }, "start_time": { "type": "string", "description": "The time when this schedule begins on the days listed, in the merchant's local time. Must conform to ISO date and time format", "example": "09:30:00.000" }, "end_time": { "type": "string", "description": "The time when this schedule ends on the days listed, in the merchant's local time. Must conform to ISO date and time format", "example": "22:30:00.000" } }, "description": "A time period and repetition rule." }, "RepeatingScheduleRuleInterval": { "required": [ "end_time", "start_time" ], "type": "object", "properties": { "start_time": { "$ref": "#/$defs/LocalTime" }, "end_time": { "$ref": "#/$defs/LocalTime" } } }, "ScheduleOverrideMetadata": { "required": [ "source" ], "type": "object", "properties": { "created_by": { "type": "string", "description": "The creator of the schedule" }, "updated_by": { "type": "string", "description": "The last credential to update the schedule" }, "created_date": { "type": "string", "description": "The creation date of the schedule", "format": "date-time" }, "updated_date": { "type": "string", "description": "The last update date of the schedule", "format": "date-time" }, "legacy_id": { "type": "string", "description": "The legacy ID of the schedule in MySQL" }, "description": { "type": "string", "description": "The description for the schedule" }, "source": { "type": "string", "description": "The source of the creation or update of the schedule override" } }, "description": "The metadata associated to a specific schedule override" } } }