[{"data":1,"prerenderedAt":278},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fvector-tiles":3,"_apollo:default":274,"_apollo:stationEditor":275,"_apollo:feedManagement":276,"_apollo:transferAnalyst":277},{"id":4,"title":5,"body":6,"description":264,"extension":265,"meta":266,"navigation":268,"path":269,"seo":270,"stem":271,"__hash__":272,"lastUpdated":273},"content\u002Fdocs\u002Fvector-tiles\u002Findex.md","Transitland v2 Vector Tiles",{"type":7,"value":8,"toc":257},"minimark",[9,16,57,68,73,76,86,101,175,213,217,220,230,242,246,250,254],[10,11,12],"div",{},[13,14],"account-tiers",{"explorer":15,"paygo":15,"academic":15,"enterprise":15},"",[17,18,19,20,25,26,32,33,37,38,42,43,47,48,42,52,56],"p",{},"Transitland publishes the routes and stops of every active ",[21,22,24],"a",{"href":23},"\u002Fdocumentation\u002Fconcepts\u002Fstatic-gtfs-feed-versions","feed version"," as two tilesets in ",[21,27,31],{"href":28,"rel":29},"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Fvector-tile-spec",[30],"nofollow","Mapbox Vector Tile (MVT)"," format. Each feature carries the attributes to label, style, filter, and link it: names, colors, route types, operators, and ",[21,34,36],{"href":35},"\u002Fdocumentation\u002Fconcepts\u002Fonestop-id-scheme","Onestop IDs",". Use a feature's Onestop ID to look up the full ",[21,39,41],{"href":40},"\u002Fdocumentation\u002Fconcepts\u002Froutes","route"," or ",[21,44,46],{"href":45},"\u002Fdocumentation\u002Fconcepts\u002Fstops","stop"," in the ",[21,49,51],{"href":50},"\u002Fdocumentation\u002Frest-api","REST",[21,53,55],{"href":54},"\u002Fdocumentation\u002Fgraphql-api","GraphQL"," API.",[58,59,60],"info",{},[17,61,62,63,67],{},"The ",[21,64,66],{"href":65},"\u002Fdocumentation\u002Fwebsite\u002Fglobal-transit-map","Transitland Global Transit Map"," is drawn from these tiles.",[69,70,72],"h2",{"id":71},"requests","Requests",[17,74,75],{},"Tiles are addressed by zoom, column, and row in the XYZ scheme:",[77,78,83],"pre",{"className":79,"code":81,"language":82},[80],"language-text","https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Ftiles\u002Froutes\u002Ftiles\u002F{z}\u002F{x}\u002F{y}.pbf\nhttps:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Ftiles\u002Fstops\u002Ftiles\u002F{z}\u002F{x}\u002F{y}.pbf\n","text",[84,85,81],"code",{"__ignoreMap":15},[17,87,88,89,92,93,95,96,100],{},"Send your API key in the ",[84,90,91],{},"apikey"," header, or as the ",[84,94,91],{}," query parameter for clients that cannot set headers. To get a key, see ",[21,97,99],{"href":98},"\u002Fdocumentation#sign-up","Signing up for an API key",".",[102,103,104,117],"table",{},[105,106,107],"thead",{},[108,109,110,114],"tr",{},[111,112,113],"th",{},"Status",[111,115,116],{},"Meaning",[118,119,120,135,145,155,165],"tbody",{},[108,121,122,128],{},[123,124,125],"td",{},[84,126,127],{},"200",[123,129,130,131,134],{},"The tile, as ",[84,132,133],{},"application\u002Fx-protobuf",", gzip-encoded",[108,136,137,142],{},[123,138,139],{},[84,140,141],{},"204",[123,143,144],{},"No features in this tile, or a zoom past the tileset's maximum",[108,146,147,152],{},[123,148,149],{},[84,150,151],{},"400",[123,153,154],{},"A column or row outside the zoom level's range",[108,156,157,162],{},[123,158,159],{},[84,160,161],{},"401",[123,163,164],{},"Missing or unknown API key",[108,166,167,172],{},[123,168,169],{},[84,170,171],{},"429",[123,173,174],{},"Rate limit or fair-use limit reached",[17,176,177,178,183,184,187,188,191,192,195,196,203,204,209,210,100],{},"Each tileset also has a ",[21,179,182],{"href":180,"rel":181},"https:\u002F\u002Fgithub.com\u002Fmapbox\u002Ftilejson-spec",[30],"TileJSON"," document, at ",[84,185,186],{},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Ftiles\u002Froutes"," and ",[84,189,190],{},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Ftiles\u002Fstops",", which a MapLibre source can use as its ",[84,193,194],{},"url",". Its tile URLs do not include your key, so send the key with each tile request, for example with MapLibre's ",[21,197,200],{"href":198,"rel":199},"https:\u002F\u002Fmaplibre.org\u002Fmaplibre-gl-js\u002Fdocs\u002FAPI\u002Ftype-aliases\u002FRequestTransformFunction\u002F",[30],[84,201,202],{},"transformRequest"," option. An ",[21,205,208],{"href":206,"rel":207},"https:\u002F\u002Fspec.openapis.org\u002Foas\u002Fv3.0.3",[30],"OpenAPI"," description of both tilesets is at ",[84,211,212],{},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv2\u002Ftiles\u002Fopenapi.json",[69,214,216],{"id":215},"freshness-and-ids","Freshness and IDs",[17,218,219],{},"The tiles are rebuilt daily from the active feed versions, so they can lag the REST and GraphQL APIs by up to a day.",[17,221,222,223,226,227,100],{},"Each feature's ID is Transitland's internal integer ID for the route or stop, so MapLibre can use feature state without ",[84,224,225],{},"promoteId",". Internal IDs change when a feed version is replaced. To store or link to a route or stop, use its ",[84,228,229],{},"onestop_id",[17,231,232,233,237,238,241],{},"Lists and objects are stored as JSON strings. Parse them in your code, for example in a click handler. Their fields are listed under ",[234,235,236],"strong",{},"Show fields",". An attribute with no value, such as a blank ",[84,239,240],{},"route_short_name",", is omitted from the feature.",[69,243,245],{"id":244},"route-tiles","Route tiles",[247,248],"vector-tile-layer",{"layer":249},"routes",[69,251,253],{"id":252},"stop-tiles","Stop tiles",[247,255],{"layer":256},"stops",{"title":15,"searchDepth":258,"depth":258,"links":259},2,[260,261,262,263],{"id":71,"depth":258,"text":72},{"id":215,"depth":258,"text":216},{"id":244,"depth":258,"text":245},{"id":252,"depth":258,"text":253},"Global route and stop layers in Mapbox Vector Tile (MVT) format, for web maps in MapLibre GL JS, Mapbox GL JS, OpenLayers, and other MVT clients.","md",{"template":267},"api-reference",true,"\u002Fdocs\u002Fvector-tiles",{"title":5,"description":264},"docs\u002Fvector-tiles\u002Findex","OycgYgrsDjkHh4Ns0hwfInZnhhBQ_N8P9kevVTzjlag","2026-10-18T16:23:16-07:00",{},{},{},{},1792407816293]