openapi: 3.1.0 info: title: Grubhub Deliveries Delivery Status Menu Ingestion API description: The Grubhub Deliveries API enables partners to manage delivery logistics and interact with Grubhub's nationwide courier network. It provides delivery status tracking through key states including driver assignment, pickup ready, and out for delivery. Partners can leverage Grubhub Connect, a full-service delivery solution for delivery aggregators, marketplaces, and enterprise merchants to fulfill orders using Grubhub drivers. The API also supports driver communication through proxy phone numbers. version: 1.0.0 x-last-validated: '2026-06-02' contact: name: Grubhub Developer Support url: https://grubhub-developers.zendesk.com/hc/en-us termsOfService: https://www.grubhub.com/legal/terms-of-use servers: - url: https://api-third-party-gtm.grubhub.com description: Production Server - url: https://api-third-party-gtm-pp.grubhub.com description: Preproduction Server security: - hmacAuth: [] tags: - name: Menu Ingestion description: Endpoints for uploading and managing normalized menus including schedules, sections, items, and modifiers. paths: /pos/v1/menu/ingestion: post: operationId: ingestMenu x-microcks-operation: delay: 0 dispatcher: FALLBACK summary: Grubhub Ingest a Normalized Menu description: Uploads a complete menu to Grubhub including schedules, sections, items, and modifiers. The API uses external IDs to perform a diff between the current and uploaded versions. Matching external IDs will have their fields updated, new IDs will create objects, and missing IDs will cause the associated items to be removed. Processing completes asynchronously after the endpoint responds. tags: - Menu Ingestion requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PosNormalizedMenu' examples: IngestMenuRequestExample: summary: Default ingestMenu request x-microcks-default: true value: merchant_id: ghm-1234567890 schedules: - external_id: id-1234567890 name: Sample Name availability: - {} sections: - {} responses: '202': description: Menu ingestion accepted for processing content: application/json: schema: $ref: '#/components/schemas/IngestionJobResponse' examples: IngestMenu202Example: summary: Default ingestMenu 202 response x-microcks-default: true value: job_id: id-1234567890 '400': description: Invalid menu payload content: application/json: schema: $ref: '#/components/schemas/Error' examples: IngestMenu400Example: summary: Default ingestMenu 400 response x-microcks-default: true value: error: invalid_request message: Operation completed successfully. status: 0 '401': description: Authentication failed content: application/json: schema: $ref: '#/components/schemas/Error' examples: IngestMenu401Example: summary: Default ingestMenu 401 response x-microcks-default: true value: error: invalid_request message: Operation completed successfully. status: 0 /pos/v1/menu/ingestion/jobs/{job_id}: get: operationId: getMenuIngestionStatus x-microcks-operation: delay: 0 dispatcher: FALLBACK summary: Grubhub Get Menu Ingestion Job Status description: Returns the status of a full menu ingestion job. Use this endpoint to check whether a previously submitted menu ingestion has completed processing successfully or encountered errors. tags: - Menu Ingestion parameters: - $ref: '#/components/parameters/JobId' responses: '200': description: Ingestion job status content: application/json: schema: $ref: '#/components/schemas/IngestionJobStatus' examples: GetMenuIngestionStatus200Example: summary: Default getMenuIngestionStatus 200 response x-microcks-default: true value: job_id: id-1234567890 status: PENDING errors: - code: string message: string '401': description: Authentication failed content: application/json: schema: $ref: '#/components/schemas/Error' examples: GetMenuIngestionStatus401Example: summary: Default getMenuIngestionStatus 401 response x-microcks-default: true value: error: invalid_request message: Operation completed successfully. status: 0 '404': description: Job not found content: application/json: schema: $ref: '#/components/schemas/Error' examples: GetMenuIngestionStatus404Example: summary: Default getMenuIngestionStatus 404 response x-microcks-default: true value: error: invalid_request message: Operation completed successfully. status: 0 components: schemas: MenuSection: type: object description: A grouping of menu items such as appetizers, entrees, or desserts. properties: external_id: type: string description: A unique external identifier for diff-based ingestion. example: id-1234567890 name: type: string description: The display name of the section. example: Sample Name items: type: array description: Menu items within this section. items: $ref: '#/components/schemas/MenuItem' required: - external_id - name - items MenuItem: type: object description: An individual menu item that a diner can order for delivery or pickup. properties: external_id: type: string description: A unique external identifier for diff-based ingestion. example: id-1234567890 name: type: string description: The display name of the menu item. example: Sample Name description: type: string description: A description of the menu item. example: string price: type: number format: double description: The base price of the menu item in the merchant's currency. minimum: 0 example: 9.99 available: type: boolean description: Whether this item is currently available for ordering. example: true size_prompt: $ref: '#/components/schemas/SizePrompt' modifier_prompts: type: array description: Modifier prompts for this item, such as salad dressing choice or add-on toppings. items: $ref: '#/components/schemas/ModifierPrompt' required: - external_id - name - price ModifierPrompt: type: object description: A modifier prompt for a menu item, allowing customization such as choice of dressing, extra toppings, or preparation preferences. properties: external_id: type: string description: A unique external identifier for this modifier prompt. example: id-1234567890 name: type: string description: The display name of the modifier prompt. example: Sample Name required: type: boolean description: Whether a selection is required from this modifier prompt. example: true min_selections: type: integer description: Minimum number of selections required. minimum: 0 example: 0 max_selections: type: integer description: Maximum number of selections allowed. minimum: 1 example: 0 options: type: array description: Available modifier options. items: $ref: '#/components/schemas/ModifierOption' required: - external_id - name - options PosNormalizedMenu: type: object description: A complete normalized menu structure containing schedules, sections, items, and modifiers. Each object must have an external_id for diff-based ingestion. properties: merchant_id: type: string description: The Grubhub merchant identifier this menu belongs to. example: ghm-1234567890 schedules: type: array description: Top-level menu schedules that define what items are available during specific periods of the days and week. items: $ref: '#/components/schemas/MenuSchedule' required: - merchant_id - schedules MenuSchedule: type: object description: A schedule defining availability windows and the sections of menu items available during those periods. properties: external_id: type: string description: A unique external identifier assigned by the partner for diff-based menu ingestion. example: id-1234567890 name: type: string description: The display name of the schedule. example: Sample Name availability: type: array description: Time windows when this schedule is active. items: $ref: '#/components/schemas/Availability' sections: type: array description: Menu sections available during this schedule, such as appetizers or entrees. items: $ref: '#/components/schemas/MenuSection' required: - external_id - name - sections SizeOption: type: object description: An individual size option within a size prompt. properties: external_id: type: string description: A unique external identifier for this size option. example: id-1234567890 name: type: string description: The display name of the size option. example: Sample Name price: type: number format: double description: The price adjustment for selecting this size. example: 9.99 SizePrompt: type: object description: A size selection prompt for a menu item. Sizes can affect the price of both the item and its modifiers. properties: external_id: type: string description: A unique external identifier for this size prompt. example: id-1234567890 name: type: string description: The display name for the size prompt. example: Sample Name options: type: array description: Available size options. items: $ref: '#/components/schemas/SizeOption' IngestionJobStatus: type: object description: Status of a menu ingestion or override job. properties: job_id: type: string description: The unique identifier for the job. example: id-1234567890 status: type: string description: The current status of the job. enum: - PENDING - PROCESSING - COMPLETED - FAILED example: PENDING errors: type: array description: List of errors encountered during processing, if any. items: type: object properties: code: type: string description: Error code. message: type: string description: Human-readable error message. ModifierOption: type: object description: An individual modifier option within a modifier prompt. properties: external_id: type: string description: A unique external identifier for this modifier option. example: id-1234567890 name: type: string description: The display name of the modifier option. example: Sample Name price: type: number format: double description: The additional price for selecting this modifier. minimum: 0 example: 9.99 available: type: boolean description: Whether this modifier option is currently available. example: true IngestionJobResponse: type: object description: Response returned when a menu ingestion job is accepted. properties: job_id: type: string description: The unique identifier for the ingestion job, used to check status. example: id-1234567890 Availability: type: object description: A time window defining when a schedule or item is available. properties: day_of_week: type: string description: The day of the week this availability applies to. enum: - MONDAY - TUESDAY - WEDNESDAY - THURSDAY - FRIDAY - SATURDAY - SUNDAY example: MONDAY start_time: type: string description: The start time in HH:mm format. pattern: ^\d{2}:\d{2}$ example: '2026-06-02T18:30:00Z' end_time: type: string description: The end time in HH:mm format. pattern: ^\d{2}:\d{2}$ example: '2026-06-02T18:30:00Z' Error: type: object description: Standard error response from the Grubhub API. properties: error: type: string description: Error type identifier. example: invalid_request message: type: string description: Human-readable error description. example: Operation completed successfully. status: type: integer description: HTTP status code. example: 0 parameters: JobId: name: job_id in: path required: true description: The unique identifier for the ingestion or override job. schema: type: string securitySchemes: hmacAuth: type: apiKey in: header name: Authorization description: HMAC-based authentication. Every request must include X-GH-PARTNER-KEY and an Authorization header with MAC authentication details. externalDocs: description: Grubhub Deliveries API Documentation url: https://developer.grubhub.com/api/deliveries