[{"data":1,"prerenderedAt":1059},["ShallowReactive",2],{"docs-\u002Fdocs\u002Frest-api\u002Fpatterns":3,"_apollo:default":1058,"_apollo:stationEditor":1058,"_apollo:feedManagement":1058,"_apollo:transferAnalyst":1058},{"id":4,"title":5,"body":6,"description":1048,"extension":1049,"meta":1050,"navigation":792,"path":1053,"seo":1054,"stem":1055,"__hash__":1056,"lastUpdated":1057},"content\u002Fdocs\u002Frest-api\u002Fpatterns.md","REST API - Route patterns",{"type":7,"value":8,"toc":1039},"minimark",[9,14,24,32,37,45,53,60,64,72,83,110,160,169,173,206,212,222,226,259,300,303,314,318,332,371,374,397,410,421,424,1026,1029,1035],[10,11,13],"h2",{"id":12},"route-patterns","Route patterns",[15,16,17,18,23],"p",{},"The route patterns endpoint returns a route's ",[19,20,22],"a",{"href":21},"\u002Fdocumentation\u002Fconcepts\u002Froutes#stop-patterns","stop patterns"," for one service date: each sequence of stops the route's trips serve that day, and how many trips run it. It can also return each pattern's stops, the shapes its trips follow, and a timetable of every trip's stop times.",[15,25,26,27,31],{},"For an overview of trips and schedules, see the ",[19,28,30],{"href":29},"\u002Fdocumentation\u002Fconcepts\u002Ftrips-schedules","Trips and schedules concept page",".",[33,34,36],"h3",{"id":35},"route-patterns-trips-and-departures","Route patterns, trips, and departures",[15,38,39,40,44],{},"Use ",[41,42,43],"strong",{},"route patterns"," to get a route's schedule for a full service date. One request returns the arrival and departure times of every trip at every stop, as one timetable for each pattern.",[15,46,47,48,52],{},"Use the ",[19,49,51],{"href":50},"\u002Fdocumentation\u002Frest-api\u002Ftrips","trips endpoint"," to get the details of one trip, such as its calendar, or its stop times with pickup and drop-off types. The trips endpoint returns stop times only for a request for a single trip by ID.",[15,54,39,55,59],{},[19,56,58],{"href":57},"\u002Fdocumentation\u002Frest-api\u002Fdepartures","stop departures"," to get the trips that depart one stop within a time window, with real-time estimates where a feed provides them. Route patterns return scheduled times from the static GTFS feed only.",[33,61,63],{"id":62},"request-overview","Request overview",[15,65,66,67,71],{},"Patterns are requested through a route, by the route's internal ID, a ",[68,69,70],"code",{},"\u003Cfeed onestop_id>:\u003Croute_id>"," key, or the route's Onestop ID. A route Onestop ID can match routes in more than one feed, so the response is a list of routes, each with its own patterns. Results are not paginated.",[15,73,74,75,77,78,82],{},"A route requested by Onestop ID or by ",[68,76,70],{}," key is read from the \"active\" ",[19,79,81],{"href":80},"\u002Fdocumentation\u002Fconcepts\u002Fstatic-gtfs-feed-versions","feed versions",". An internal ID identifies a route in one feed version, whether or not that feed version is active.",[15,84,85,86,89,90,89,93,96,97,100,101,103,104,106,107,109],{},"Each pattern always includes its ",[68,87,88],{},"stop_pattern_id",", ",[68,91,92],{},"direction_id",[68,94,95],{},"count"," of trips, and the requested ",[68,98,99],{},"service_date",". Patterns are listed in order of ",[68,102,95],{},", highest first. Trips with the same stops but different ",[68,105,92],{}," values are listed as separate patterns with the same ",[68,108,88],{},". The following parameters add fields:",[111,112,113,126],"table",{},[114,115,116],"thead",{},[117,118,119,123],"tr",{},[120,121,122],"th",{},"Parameter",[120,124,125],{},"Adds to each pattern",[127,128,129,140,150],"tbody",{},[117,130,131,137],{},[132,133,134],"td",{},[68,135,136],{},"include_stops=true",[132,138,139],{},"Its stops, in order, with names and locations",[117,141,142,147],{},[132,143,144],{},[68,145,146],{},"include_shapes=true",[132,148,149],{},"Each shape its trips follow, once, with the distance along the shape at each point",[117,151,152,157],{},[132,153,154],{},[68,155,156],{},"include_timetable=true",[132,158,159],{},"Its trips, and grids of their arrival times, departure times, and distances along their shapes",[15,161,162,163,31],{},"Route pattern API results are based on this ",[19,164,168],{"href":165,"rel":166},"https:\u002F\u002Fgithub.com\u002Finterline-io\u002Ftransitland-lib\u002Fblob\u002Fmain\u002Fserver\u002Frest\u002Froute_pattern_request.gql",[167],"nofollow","GraphQL query",[33,170,172],{"id":171},"dates","Dates",[15,174,175,176,178,179,182,183,186,187,89,190,193,194,197,198,200,201,205],{},"A date is required. Use ",[68,177,99],{}," for a GTFS service date in ",[68,180,181],{},"YYYY-MM-DD"," format, or ",[68,184,185],{},"relative_date"," for a date relative to the current date in the feed version's timezone, such as ",[68,188,189],{},"TODAY",[68,191,192],{},"TUESDAY",", or ",[68,195,196],{},"NEXT_TUESDAY",". When both are given, ",[68,199,185],{}," is used. The ",[19,202,204],{"href":203},"\u002Fdocumentation\u002Frest-api\u002Fdepartures#how-do-i-specify-a-date","stop departures page"," explains how relative dates are chosen.",[15,207,208,209,211],{},"The response includes only the patterns that have trips on that date. A pattern's ",[68,210,95],{}," is the number of its trips that operate on that date. Its timetable lists those trips, except flex trips and trips whose stored stop times do not match the pattern's stops.",[15,213,214,215,217,218,221],{},"When the date is outside the feed version's service window, the endpoint uses the same day of the week in the feed version's fallback week: the week in the service window with the most scheduled service, preferring weeks with service on all seven days. The response's ",[68,216,99],{}," is the requested date, not the fallback date. Set ",[68,219,220],{},"use_service_window=false"," to disable this fallback.",[33,223,225],{"id":224},"timetable-layout","Timetable layout",[15,227,228,229,232,233,236,237,240,241,244,245,248,249,252,253,255,256,258],{},"A pattern's ",[68,230,231],{},"timetable"," contains its trips' stop times as grids. In every grid, row ",[68,234,235],{},"i"," is the stop ",[68,238,239],{},"stop_ids[i]"," and column ",[68,242,243],{},"j"," is the trip ",[68,246,247],{},"trips[j]",", so ",[68,250,251],{},"departure_times.values[i][j]"," is when trip ",[68,254,243],{}," leaves stop ",[68,257,235],{},". Trips are ordered by their time at the first stop.",[260,261,262,286],"ul",{},[263,264,265,268,269,272,273,276,277,280,281,285],"li",{},[68,266,267],{},"arrival_times"," and ",[68,270,271],{},"departure_times"," are GTFS times in ",[68,274,275],{},"HH:MM:SS"," format. GTFS measures times from noon minus 12 hours on the service date, which is midnight except on days when daylight saving time changes. Times after midnight are later than ",[68,278,279],{},"24:00:00",". Where the feed does not give a time for a stop, the grid contains the time Transitland ",[19,282,284],{"href":283},"\u002Fdocumentation\u002Fconcepts\u002Ftrips-schedules#stop-times-and-schedules","interpolated"," on import.",[263,287,288,291,292,295,296,299],{},[68,289,290],{},"shape_distances"," is each stop's distance along its trip's shape, in whole meters, measured the same way as the ",[68,293,294],{},"distances"," that ",[68,297,298],{},"include_shapes"," returns. It is null for a trip without a shape, and for a stop more than 500 meters from its trip's shape.",[15,301,302],{},"A cell is null where there is no value.",[15,304,305,306,309,310,313],{},"A trip defined by ",[68,307,308],{},"frequencies.txt"," appears once, as a template, and its ",[68,311,312],{},"frequencies"," field lists the periods and headways at which it repeats. Flex trips, which serve locations or time windows rather than set times, have no timetable.",[33,315,317],{"id":316},"encoded-responses","Encoded responses",[15,319,320,321,324,325,328,329,331],{},"Timetables for routes with many trips produce large responses. The ",[68,322,323],{},"encoding=polyline"," parameter reduces response size. For example, a full service date of TriMet MAX Red Line timetables and shapes is 36 percent of its ",[68,326,327],{},"encoding=array"," size. With ",[68,330,323],{},":",[260,333,334,358],{},[263,335,336,337,340,341,344,345,349,350,353,354,357],{},"Each shape's ",[68,338,339],{},"geometry"," is replaced by ",[68,342,343],{},"polyline",", an ",[19,346,348],{"href":347},"\u002Fdocumentation\u002Fconcepts\u002Fencoded-polylines","encoded polyline"," at five digits of precision. With ",[68,351,352],{},"encoding=polyline6",", it is replaced by ",[68,355,356],{},"polyline6",", at six digits.",[263,359,360,361,340,364,366,367,268,369,31],{},"Each timetable grid's ",[68,362,363],{},"values",[68,365,343],{},", one string for each row. Grids hold whole numbers, so they are encoded the same way under ",[68,368,343],{},[68,370,356],{},[15,372,373],{},"To decode a grid:",[375,376,377,388,391],"ol",{},[263,378,379,380,384,385,387],{},"Decode each row's string as a sequence of single integers with the ",[19,381,383],{"href":382},"\u002Fdocumentation\u002Fconcepts\u002Fencoded-polylines#how-the-algorithm-works","encoded polyline algorithm",", not as coordinate pairs, and without scaling. A ",[68,386,31],{}," marks a null cell.",[263,389,390],{},"Each integer is the difference from the previous non-null value in the row. The first integer is the difference from 0. Compute a running sum along the row.",[263,392,393,394,396],{},"In each column, the first non-null value is absolute, and each later value is the difference from it. Add the first value to each later value. For times, the values are in seconds, measured as the ",[68,395,275],{}," times are.",[15,398,399,400,402,403,406,407,331],{},"For example, a ",[68,401,271],{}," grid's first row starts ",[68,404,405],{},"c_a@ooB"," and its second row starts ",[68,408,409],{},"oF??",[375,411,412,415,418],{},[263,413,414],{},"The first row decodes to 17410, 1800. The second row decodes to 120, 0, 0.",[263,416,417],{},"The running sums are 17410, 19210 for the first row and 120, 120, 120 for the second row.",[263,419,420],{},"Adding each column's first value gives the times. The first two trips depart the first stop at 17410 and 19210 seconds (04:50:10 and 05:20:10), and depart the second stop 120 seconds later (04:52:10 and 05:22:10).",[15,422,423],{},"This JavaScript decodes one grid:",[425,426,431],"pre",{"className":427,"code":428,"language":429,"meta":430,"style":430},"language-js shiki shiki-themes github-light github-dark","\u002F\u002F Decode one row: polyline integers, each the difference from the last value present.\nfunction decodeRow (s) {\n  const row = []\n  let prev = 0\n  let i = 0\n  while (i \u003C s.length) {\n    if (s[i] === '.') {\n      row.push(null)\n      i++\n      continue\n    }\n    let result = 0\n    let shift = 0\n    let b\n    do {\n      b = s.charCodeAt(i++) - 63\n      result |= (b & 0x1f) \u003C\u003C shift\n      shift += 5\n    } while (b >= 0x20)\n    prev += (result & 1) ? ~(result >> 1) : (result >> 1)\n    row.push(prev)\n  }\n  return row\n}\n\n\u002F\u002F Decode a grid: rows are stops and columns are trips. Add each trip's first value back.\nfunction decodeGrid (rows) {\n  const grid = rows.map(decodeRow)\n  const nTrips = grid[0]?.length ?? 0\n  for (let j = 0; j \u003C nTrips; j++) {\n    let first = null\n    for (const row of grid) {\n      if (row[j] === null) {\n        continue\n      }\n      if (first === null) {\n        first = row[j]\n      } else {\n        row[j] += first\n      }\n    }\n  }\n  return grid\n}\n","js","",[68,432,433,442,464,480,495,507,527,545,563,572,578,584,597,609,617,626,654,680,692,711,755,766,772,781,787,794,800,815,834,860,891,904,923,939,945,951,965,976,987,998,1003,1008,1013,1021],{"__ignoreMap":430},[434,435,438],"span",{"class":436,"line":437},"line",1,[434,439,441],{"class":440},"sJ8bj","\u002F\u002F Decode one row: polyline integers, each the difference from the last value present.\n",[434,443,445,449,453,457,461],{"class":436,"line":444},2,[434,446,448],{"class":447},"szBVR","function",[434,450,452],{"class":451},"sScJk"," decodeRow",[434,454,456],{"class":455},"sVt8B"," (",[434,458,460],{"class":459},"s4XuR","s",[434,462,463],{"class":455},") {\n",[434,465,467,470,474,477],{"class":436,"line":466},3,[434,468,469],{"class":447},"  const",[434,471,473],{"class":472},"sj4cs"," row",[434,475,476],{"class":447}," =",[434,478,479],{"class":455}," []\n",[434,481,483,486,489,492],{"class":436,"line":482},4,[434,484,485],{"class":447},"  let",[434,487,488],{"class":455}," prev ",[434,490,491],{"class":447},"=",[434,493,494],{"class":472}," 0\n",[434,496,498,500,503,505],{"class":436,"line":497},5,[434,499,485],{"class":447},[434,501,502],{"class":455}," i ",[434,504,491],{"class":447},[434,506,494],{"class":472},[434,508,510,513,516,519,522,525],{"class":436,"line":509},6,[434,511,512],{"class":447},"  while",[434,514,515],{"class":455}," (i ",[434,517,518],{"class":447},"\u003C",[434,520,521],{"class":455}," s.",[434,523,524],{"class":472},"length",[434,526,463],{"class":455},[434,528,530,533,536,539,543],{"class":436,"line":529},7,[434,531,532],{"class":447},"    if",[434,534,535],{"class":455}," (s[i] ",[434,537,538],{"class":447},"===",[434,540,542],{"class":541},"sZZnC"," '.'",[434,544,463],{"class":455},[434,546,548,551,554,557,560],{"class":436,"line":547},8,[434,549,550],{"class":455},"      row.",[434,552,553],{"class":451},"push",[434,555,556],{"class":455},"(",[434,558,559],{"class":472},"null",[434,561,562],{"class":455},")\n",[434,564,566,569],{"class":436,"line":565},9,[434,567,568],{"class":455},"      i",[434,570,571],{"class":447},"++\n",[434,573,575],{"class":436,"line":574},10,[434,576,577],{"class":447},"      continue\n",[434,579,581],{"class":436,"line":580},11,[434,582,583],{"class":455},"    }\n",[434,585,587,590,593,595],{"class":436,"line":586},12,[434,588,589],{"class":447},"    let",[434,591,592],{"class":455}," result ",[434,594,491],{"class":447},[434,596,494],{"class":472},[434,598,600,602,605,607],{"class":436,"line":599},13,[434,601,589],{"class":447},[434,603,604],{"class":455}," shift ",[434,606,491],{"class":447},[434,608,494],{"class":472},[434,610,612,614],{"class":436,"line":611},14,[434,613,589],{"class":447},[434,615,616],{"class":455}," b\n",[434,618,620,623],{"class":436,"line":619},15,[434,621,622],{"class":447},"    do",[434,624,625],{"class":455}," {\n",[434,627,629,632,634,636,639,642,645,648,651],{"class":436,"line":628},16,[434,630,631],{"class":455},"      b ",[434,633,491],{"class":447},[434,635,521],{"class":455},[434,637,638],{"class":451},"charCodeAt",[434,640,641],{"class":455},"(i",[434,643,644],{"class":447},"++",[434,646,647],{"class":455},") ",[434,649,650],{"class":447},"-",[434,652,653],{"class":472}," 63\n",[434,655,657,660,663,666,669,672,674,677],{"class":436,"line":656},17,[434,658,659],{"class":455},"      result ",[434,661,662],{"class":447},"|=",[434,664,665],{"class":455}," (b ",[434,667,668],{"class":447},"&",[434,670,671],{"class":472}," 0x1f",[434,673,647],{"class":455},[434,675,676],{"class":447},"\u003C\u003C",[434,678,679],{"class":455}," shift\n",[434,681,683,686,689],{"class":436,"line":682},18,[434,684,685],{"class":455},"      shift ",[434,687,688],{"class":447},"+=",[434,690,691],{"class":472}," 5\n",[434,693,695,698,701,703,706,709],{"class":436,"line":694},19,[434,696,697],{"class":455},"    } ",[434,699,700],{"class":447},"while",[434,702,665],{"class":455},[434,704,705],{"class":447},">=",[434,707,708],{"class":472}," 0x20",[434,710,562],{"class":455},[434,712,714,717,719,722,724,727,729,732,735,738,741,743,745,747,749,751,753],{"class":436,"line":713},20,[434,715,716],{"class":455},"    prev ",[434,718,688],{"class":447},[434,720,721],{"class":455}," (result ",[434,723,668],{"class":447},[434,725,726],{"class":472}," 1",[434,728,647],{"class":455},[434,730,731],{"class":447},"?",[434,733,734],{"class":447}," ~",[434,736,737],{"class":455},"(result ",[434,739,740],{"class":447},">>",[434,742,726],{"class":472},[434,744,647],{"class":455},[434,746,331],{"class":447},[434,748,721],{"class":455},[434,750,740],{"class":447},[434,752,726],{"class":472},[434,754,562],{"class":455},[434,756,758,761,763],{"class":436,"line":757},21,[434,759,760],{"class":455},"    row.",[434,762,553],{"class":451},[434,764,765],{"class":455},"(prev)\n",[434,767,769],{"class":436,"line":768},22,[434,770,771],{"class":455},"  }\n",[434,773,775,778],{"class":436,"line":774},23,[434,776,777],{"class":447},"  return",[434,779,780],{"class":455}," row\n",[434,782,784],{"class":436,"line":783},24,[434,785,786],{"class":455},"}\n",[434,788,790],{"class":436,"line":789},25,[434,791,793],{"emptyLinePlaceholder":792},true,"\n",[434,795,797],{"class":436,"line":796},26,[434,798,799],{"class":440},"\u002F\u002F Decode a grid: rows are stops and columns are trips. Add each trip's first value back.\n",[434,801,803,805,808,810,813],{"class":436,"line":802},27,[434,804,448],{"class":447},[434,806,807],{"class":451}," decodeGrid",[434,809,456],{"class":455},[434,811,812],{"class":459},"rows",[434,814,463],{"class":455},[434,816,818,820,823,825,828,831],{"class":436,"line":817},28,[434,819,469],{"class":447},[434,821,822],{"class":472}," grid",[434,824,476],{"class":447},[434,826,827],{"class":455}," rows.",[434,829,830],{"class":451},"map",[434,832,833],{"class":455},"(decodeRow)\n",[434,835,837,839,842,844,847,850,853,855,858],{"class":436,"line":836},29,[434,838,469],{"class":447},[434,840,841],{"class":472}," nTrips",[434,843,476],{"class":447},[434,845,846],{"class":455}," grid[",[434,848,849],{"class":472},"0",[434,851,852],{"class":455},"]?.",[434,854,524],{"class":472},[434,856,857],{"class":447}," ??",[434,859,494],{"class":472},[434,861,863,866,868,871,874,876,879,882,884,887,889],{"class":436,"line":862},30,[434,864,865],{"class":447},"  for",[434,867,456],{"class":455},[434,869,870],{"class":447},"let",[434,872,873],{"class":455}," j ",[434,875,491],{"class":447},[434,877,878],{"class":472}," 0",[434,880,881],{"class":455},"; j ",[434,883,518],{"class":447},[434,885,886],{"class":455}," nTrips; j",[434,888,644],{"class":447},[434,890,463],{"class":455},[434,892,894,896,899,901],{"class":436,"line":893},31,[434,895,589],{"class":447},[434,897,898],{"class":455}," first ",[434,900,491],{"class":447},[434,902,903],{"class":472}," null\n",[434,905,907,910,912,915,917,920],{"class":436,"line":906},32,[434,908,909],{"class":447},"    for",[434,911,456],{"class":455},[434,913,914],{"class":447},"const",[434,916,473],{"class":472},[434,918,919],{"class":447}," of",[434,921,922],{"class":455}," grid) {\n",[434,924,926,929,932,934,937],{"class":436,"line":925},33,[434,927,928],{"class":447},"      if",[434,930,931],{"class":455}," (row[j] ",[434,933,538],{"class":447},[434,935,936],{"class":472}," null",[434,938,463],{"class":455},[434,940,942],{"class":436,"line":941},34,[434,943,944],{"class":447},"        continue\n",[434,946,948],{"class":436,"line":947},35,[434,949,950],{"class":455},"      }\n",[434,952,954,956,959,961,963],{"class":436,"line":953},36,[434,955,928],{"class":447},[434,957,958],{"class":455}," (first ",[434,960,538],{"class":447},[434,962,936],{"class":472},[434,964,463],{"class":455},[434,966,968,971,973],{"class":436,"line":967},37,[434,969,970],{"class":455},"        first ",[434,972,491],{"class":447},[434,974,975],{"class":455}," row[j]\n",[434,977,979,982,985],{"class":436,"line":978},38,[434,980,981],{"class":455},"      } ",[434,983,984],{"class":447},"else",[434,986,625],{"class":455},[434,988,990,993,995],{"class":436,"line":989},39,[434,991,992],{"class":455},"        row[j] ",[434,994,688],{"class":447},[434,996,997],{"class":455}," first\n",[434,999,1001],{"class":436,"line":1000},40,[434,1002,950],{"class":455},[434,1004,1006],{"class":436,"line":1005},41,[434,1007,583],{"class":455},[434,1009,1011],{"class":436,"line":1010},42,[434,1012,771],{"class":455},[434,1014,1016,1018],{"class":436,"line":1015},43,[434,1017,777],{"class":447},[434,1019,1020],{"class":455}," grid\n",[434,1022,1024],{"class":436,"line":1023},44,[434,1025,786],{"class":455},[1027,1028],"hr",{},[1030,1031],"openapi-endpoint",{"doc":1032,"path":1033,":heading-level":1034},"rest","\u002Froutes\u002F{route_key}\u002Fpatterns","3",[1036,1037,1038],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":430,"searchDepth":444,"depth":444,"links":1040},[1041],{"id":12,"depth":444,"text":13,"children":1042},[1043,1044,1045,1046,1047],{"id":35,"depth":466,"text":36},{"id":62,"depth":466,"text":63},{"id":171,"depth":466,"text":172},{"id":224,"depth":466,"text":225},{"id":316,"depth":466,"text":317},"Get a route's stop patterns for a service date with the Transitland v2 REST API, with each pattern's stops, shapes, and a timetable of every trip's stop times.","md",{"layout":1051,"template":1052},"documentation","api-reference","\u002Fdocs\u002Frest-api\u002Fpatterns",{"title":5,"description":1048},"docs\u002Frest-api\u002Fpatterns","U0ds8zzOx9WdI9XnhpMcrm6GBtr14yWtBFxcBRgqX8Q","2026-11-02T16:09:19-08:00","{}",1793664648789]