{
  "service": "Agent Outposts",
  "logging": "Intent registrations are logged in aggregate (brand, intent, result counts, hashed caller id) for demand statistics. No raw IP addresses are stored; free-text fields are stored only as provided.",
  "disclaimer": "Agent Outposts is not affiliated with Grubhub. This Outpost is a demand registry operated by Agent Outposts; door-state data is compiled from public sources (evidence linked per claim) and is not provided, reviewed, or endorsed by Grubhub.",
  "outpost": "grubhub",
  "brand": "Grubhub",
  "category": "Platforms",
  "status": "collecting_demand",
  "headline": "Grubhub documents a full diner API (menus, availability, carts, tracking) but it is a partner-integration program for POS/ordering providers — no self-serve consumer agent door and no agent-native surfaces.",
  "wall_summary": "Grubhub documents a full diner API — menus, availability, carts, checkout and delivery tracking — but it is a partner-integration program for point-of-sale and online-ordering providers, with credentials flowing through partner onboarding. There is no self-serve consumer agent door and no agent-native surface.",
  "door_state_version": "census-2026-11-01",
  "door_state": {
    "inventory": {
      "state": "partner_gated",
      "via": "Grubhub diner API — GET /restaurants/availability_summaries (partner access)",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us/articles/115004601686-Getting-Started",
      "checked_at": "2026-11-01",
      "note": "Availability summaries report open / available_for_delivery / available_for_pickup for up to 30 restaurant IDs per call, for API partners only."
    },
    "menu_browse": {
      "state": "partner_gated",
      "via": "Grubhub diner/Partner APIs (documented at Grubhub Developers, Zendesk) — restaurants endpoint",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us/articles/115004601686-Getting-Started",
      "checked_at": "2026-11-01",
      "note": "Docs show GET /restaurants returning menus, but the developer portal frames access as partner integration (POS / online-ordering providers); no self-serve consumer signup found. Docs also state Grubhub provides no restaurant search — partners use a provided data feed."
    },
    "ordering": {
      "state": "partner_gated",
      "via": "Grubhub diner API — carts and checkout (partner access)",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us",
      "checked_at": "2026-11-01",
      "note": "Homepage frames the offer as 'Grubhub's Partner Integration API enables a merchant's Point-of-sale, third-party online-ordering provider, or the merchant themselves' to manage menus and orders. Diner cart/checkout endpoints exist in docs but credentials flow through partner onboarding, not self-serve signup."
    },
    "prices": {
      "state": "partner_gated",
      "via": "Grubhub diner API — menu item prices and cart bill token (partner access)",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us/articles/115004601686-Getting-Started",
      "checked_at": "2026-11-01",
      "note": "Menu payloads include item prices, delivery fees, minimums and tax, and checkout uses a bill token — all inside the partner-gated API, not an open consumer API."
    },
    "tracking": {
      "state": "partner_gated",
      "via": "Grubhub API — orders order-status and Deliveries endpoints (partner access)",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us/articles/115003834066-Deliveries",
      "checked_at": "2026-11-01",
      "note": "Delivery API 'lets you track the location of a courier' with status, driver assignment and ~60s location updates — documented for partners, no open consumer access found."
    }
  },
  "official_channels": [
    {
      "name": "Grubhub diner / Partner APIs",
      "kind": "partner_program",
      "covers": [
        "menu_browse",
        "prices",
        "inventory",
        "ordering",
        "tracking"
      ],
      "gate": "Access is framed as partner integration for a merchant's point-of-sale system, third-party online-ordering provider or the merchant itself, with credentials issued through partner onboarding rather than a self-serve consumer signup.",
      "evidence_url": "https://grubhub-developers.zendesk.com/hc/en-us/articles/115004601686-Getting-Started"
    }
  ],
  "agent_native": {
    "api_catalog": false,
    "llms_txt": false,
    "mcp_server": false
  },
  "bot_posture": {
    "summary": "robots.txt disallows /search, /checkout/, /account/, /oauth2/, /my-bag and restaurant menu-item/choice paths for all agents; llms.txt and /.well-known/api-catalog returned HTML (SPA fallback), not machine-readable agent files, on 2026-11-01.",
    "evidence_url": "https://www.grubhub.com/robots.txt"
  },
  "alternatives": {
    "menu_browse": {
      "count": 3,
      "access": "register_intent"
    },
    "prices": {
      "count": 3,
      "access": "register_intent"
    },
    "inventory": {
      "count": 3,
      "access": "register_intent"
    },
    "ordering": {
      "count": 3,
      "access": "register_intent"
    },
    "tracking": {
      "count": 3,
      "access": "register_intent"
    }
  },
  "alternatives_policy": "Ranked by fit only. Placement is never sold.",
  "register_intent": {
    "method": "POST",
    "url": "https://api.agentoutposts.com/outposts/grubhub/intent",
    "body": {
      "intent": "one of: menu_browse | prices | inventory | ordering | tracking",
      "detail": "optional context for the brand (max 500 chars), e.g. the task you were trying to complete. Never include personal data — no names, addresses, or order details.",
      "agent_label": "optional self-declared agent name (max 80 chars). Never put personal data in this field.",
      "est_frequency": "optional, e.g. '40/day'",
      "notify": "'poll' (default) or 'webhook'",
      "notify_url": "required when notify = 'webhook'"
    },
    "returns": "A receipt: ticket, queue position, live demand snapshot, alternatives for your intent, and (poll mode) a notify URL that reports door-state changes.",
    "limits": "100 intent registrations per caller per day"
  }
}