{"openapi":"3.1.0","info":{"title":"Runner Connector API","version":"2026-09-15","description":"Runner is a live-event concierge that runs in iMessage: set times, gates, leave-by, parking, merch and official offers for the event a person is going to. This API is how a person's own agent finds Runner: search the events Runner is running, read what Runner knows about one, and open a Runner thread already about it. No key, read-only, and nothing here returns anything about a fan.","contact":{"name":"Runner","url":"https://www.heyrunner.app/developers"},"termsOfService":"https://www.heyrunner.app/terms"},"servers":[{"url":"https://runner-cgxr.onrender.com"}],"components":{"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","insufficient_scope","not_found","invalid_request","rate_limited","idempotency_mismatch","not_configured","internal"]},"message":{"type":"string"},"details":{}}},"request_id":{"type":["string","null"]}}},"TextLink":{"type":"object","properties":{"event_id":{"type":"string"},"event_name":{"type":"string"},"number":{"type":"string"},"prefilled":{"type":"string"},"sms":{"type":["string","null"]},"short":{"type":["string","null"]},"deep_links":{"type":"object","properties":{"ios":{"type":"string"},"android":{"type":"string"},"android_intent":{"type":"string"}}},"qr_png":{"type":"string"},"embed":{"type":"string"}}},"PublicEventSummary":{"type":"object","required":["id","name","dates","timezone"],"properties":{"id":{"type":"string","example":"evt_acl_2026"},"name":{"type":"string"},"kind":{"type":["string","null"],"description":"concert | festival | sports | motorsport | tournament | comedy | theater | conference | other"},"dates":{"type":"array","items":{"type":"string","format":"date"}},"timezone":{"type":"string","example":"America/Chicago"},"venue":{"type":["object","null"],"properties":{"name":{"type":"string"},"city":{"type":["string","null"]}}}}},"Point":{"type":"object","required":["key","name","type"],"properties":{"key":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","description":"entrance | vip_entrance | dropoff | pickup | box_office | accessible | gate — or an amenity type (water, medical, bar, food, restroom, merch, lockers, charging…)"},"note":{"type":["string","null"]},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}}},"PublicOffer":{"type":"object","required":["id","kind","title"],"description":"An official offer the organizer listed on Runner. Never a third-party listing.","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["parking","transport","merch","upgrade","hotel","food","afterparty","experience","sponsor","tickets"]},"title":{"type":"string"},"detail":{"type":["string","null"]},"price":{"type":["string","null"]},"url":{"type":["string","null"]},"sponsor":{"type":["string","null"]},"audience":{"type":"string","enum":["all","no_ticket","ga","vip","driving","staying_over"]},"image_url":{"type":["string","null"]},"starts_at":{"type":["string","null"]},"ends_at":{"type":["string","null"]}}},"ThreadLink":{"type":"object","description":"How to open a Runner thread already about this event. `sms` opens Messages with the first text filled in; `short` is the permanent web link.","properties":{"code":{"type":["string","null"]},"number":{"type":["string","null"]},"prefilled":{"type":"string"},"sms":{"type":["string","null"]},"short":{"type":["string","null"]},"deep_links":{"type":["object","null"],"properties":{"ios":{"type":"string"},"android":{"type":"string"},"android_intent":{"type":"string"}}},"qr_png":{"type":"string"}}},"PublicEvent":{"type":"object","required":["event","schedule","policies","offers","ticket_status","as_of"],"properties":{"event":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":["string","null"]},"dates":{"type":"array","items":{"type":"string","format":"date"}},"timezone":{"type":"string"},"gates_open":{"type":["string","null"],"description":"HH:MM local"},"closes":{"type":["string","null"]}}},"venue":{"type":["object","null"],"properties":{"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}}},"stages":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"lat":{"type":["number","null"]},"lng":{"type":["number","null"]}}}},"schedule":{"type":"array","description":"Set times as the organizer or the festival's own site published them, soonest first.","items":{"type":"object","required":["day","artist"],"properties":{"day":{"type":"string","format":"date"},"artist":{"type":"string"},"stage":{"type":["string","null"]},"start":{"type":["string","null"],"description":"HH:MM local"},"end":{"type":["string","null"]},"headliner":{"type":"boolean"},"source":{"type":"string","description":"official | promoter_supplied | venue_verified | scraped | inferred | manual | crowdsourced"}}}},"policies":{"type":"object","description":"Bag policy, re-entry, prohibited items, age, cashless and whatever else the organizer set. Keys as written; `reentry_allowed` and `cashless` are always present.","additionalProperties":true,"properties":{"bag_policy":{},"reentry":{},"reentry_allowed":{"type":"boolean"},"prohibited_items":{},"age_policy":{},"cashless":{"type":"boolean"}}},"wayfinding":{"type":"array","items":{"$ref":"#/components/schemas/Point"}},"amenities":{"type":"array","items":{"$ref":"#/components/schemas/Point"}},"announcement":{"type":["object","null"],"description":"The organizer's or venue's own words for the active day, attributed.","properties":{"text":{"type":"string"},"from":{"type":["string","null"]},"day":{"type":["string","null"]}}},"offers":{"type":"array","items":{"$ref":"#/components/schemas/PublicOffer"}},"ticket_status":{"type":"array","items":{"type":"object","properties":{"day":{"type":["string","null"]},"tier":{"type":["string","null"]},"label":{"type":["string","null"]},"status":{"type":"string","enum":["on_sale","low","sold_out","not_on_sale_yet"]},"on_sale_url":{"type":["string","null"]},"note":{"type":["string","null"]},"updated_at":{"type":"string","format":"date-time"}}}},"sponsored_places":{"type":"array","description":"Places a sponsor bought, under the name the organizer sold. Wherever one of these places appears above (`stages[].name`, `schedule[].stage`, `amenities[].name`) it already carries this name; `base_name` / `stage_base` hold the plain one. Use the sponsored name when you name the place.","items":{"type":"object","properties":{"place":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["stage","amenity","area"]},"sponsor":{"type":"string"},"sponsor_url":{"type":["string","null"]}}}},"runner_thread":{"oneOf":[{"$ref":"#/components/schemas/ThreadLink"},{"type":"null"}]},"as_of":{"type":"string","format":"date-time"}}}}},"paths":{"/v1/public/events":{"get":{"operationId":"searchEvents","summary":"Find events Runner is running","description":"Matches the words a person used against the event's name, its venue and its city. Upcoming events only unless `include_past=true`. Only events an organizer has claimed on Runner are listed; a fan's own imported tickets never appear here.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Words from the event, venue or city — 'coachella', 'msg', 'miami'."},{"name":"city","in":"query","required":false,"schema":{"type":"string"},"description":"Only events in this city."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25},"description":"1–25, default 10."},{"name":"include_past","in":"query","required":false,"schema":{"type":"boolean"},"description":"Also return events that already happened."}],"responses":{"200":{"description":"Events","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicEventSummary"}}}}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/public/events/{eventId}":{"get":{"operationId":"getEvent","summary":"What Runner knows about an event","description":"Everything Runner will tell a fan before they text: dates and hours, the venue, stages, set times, gates and drop-off, amenities, policies, the organizer's announcement for the day, official offers, ticket status — and `runner_thread`, the link that opens a Runner thread already about this event. Read-only; nothing here is about a fan.","parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"},"example":"evt_coachella_2026"}],"responses":{"200":{"description":"Event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicEvent"}}}},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/public/events/{eventId}/handoff":{"get":{"operationId":"getHandoff","summary":"Two-way handoff: open a Runner thread, and what Runner links back to","parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"},"example":"evt_coachella_2026"}],"responses":{"200":{"description":"Handoff"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/public/events/{eventId}/text-link":{"get":{"operationId":"getTextLink","summary":"Public text-Runner link (used by runner.js)","parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"},"example":"evt_coachella_2026"}],"responses":{"200":{"description":"Link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextLink"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/public/events/{eventId}/qr.png":{"get":{"operationId":"getQr","summary":"QR code PNG that opens Messages with the event named","parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"},"example":"evt_coachella_2026"},{"name":"size","in":"query","schema":{"type":"integer","minimum":256,"maximum":2048}},{"name":"target","in":"query","schema":{"type":"string","enum":["sms","web"]}}],"responses":{"200":{"description":"PNG","content":{"image/png":{}}},"404":{"$ref":"#/components/responses/Error"}}}}}}