11# Implemented commands
22
3- Every command the CLI ships: five auth commands, 36 API operations across 11
3+ Every command the CLI ships: five auth commands, 36 API operations across 10
44command groups, the tilesets-cli proxy, ` completion ` and ` generate-skills ` . Each is
55shown in both of its renderings. Which one you get is decided by ` --output ` , whose default
66(` auto ` ) reads stdout: a terminal gets the left column, a pipe or redirect
@@ -13,8 +13,8 @@ else is as the API sent it.
1313** 32 of the 36 were run against the live API and show what came back:** 25
1414on 2026-09-01, ` fonts list ` , ` fonts upload ` and ` fonts delete ` on
15152026-09-08, once ` fonts:list ` /` fonts:write ` became registrable,
16- ` feedback list ` and ` feedback get ` on 2026-09-24, ` places get ` and
17- ` places batch ` on 2026-09-25, and ` feedback create ` on 2026-10-02.
16+ ` feedback list ` and ` feedback get ` on 2026-09-24, ` places ` on 2026-09-25,
17+ and ` feedback create ` on 2026-10-02.
1818The write operations were exercised as round trips on throwaway objects —
1919a style created, updated, drafted and deleted; icons uploaded to a sprite
2020and taken out again; a font uploaded and deleted — leaving the account as
@@ -33,9 +33,9 @@ can be checked cannot fall behind the binary.
3333
3434The remaining 4 give the response shape from the spec or the docs instead
3535of a live capture. All four are ` search ` 's, marked as no-access when this
36- page was first written — no longer true, discovered while writing `places
37- get ` 's example above, which needed a real ` search forward` result to test
38- against and got one. ` search ` 's own four sections below haven't been
36+ page was first written — no longer true, discovered while writing
37+ ` places ` 's example above, which needed a real ` search forward ` result to
38+ test against and got one. ` search ` 's own four sections below haven't been
3939re-captured with this pass, since that's a different command group's page
4040to touch; a worthwhile follow-up, not done here.
4141
@@ -96,8 +96,7 @@ nests, and is typed `mapbox styles draft get`.
9696[ geocoder.reverse] ( #mapbox-geocoder-reverse ) ·
9797[ geocoder.batch] ( #mapbox-geocoder-batch )
9898
99- ** [ Places] ( #places ) ** — [ places.get] ( #mapbox-places-get ) ·
100- [ places.batch] ( #mapbox-places-batch )
99+ ** [ Places] ( #places ) ** — [ places] ( #mapbox-places )
101100
102101** [ Search] ( #search ) ** — [ search.forward] ( #mapbox-search-forward ) ·
103102[ search.reverse] ( #mapbox-search-reverse ) ·
@@ -1415,134 +1414,83 @@ single query.
14151414---
14161415## Places
14171416
1418- Full detail for a place — hours, phone, website, photos, address,
1419- coordinates, activity data — by the ` mapbox_id ` a Search Box API result
1420- already returned. Curated by hand down to the parameters documented at
1421- docs.mapbox.com/api/search/places — see ` custom-openapi/README.md ` for why
1422- this command group doesn't come from the vendored specs the way most
1423- others do.
1417+ Full detail for one or more places — hours, phone, website, photos,
1418+ address, coordinates, activity data — by the ` mapbox_id ` s a Search Box
1419+ API result already returned. Curated by hand down to the parameters
1420+ documented at docs.mapbox.com/api/search/places — see
1421+ ` custom-openapi/README.md ` for why this command group doesn't come from
1422+ the vendored specs the way most others do. Public Preview, with a
1423+ 1000-records-per-account monthly quota.
14241424
14251425** This API has no search or suggest of its own.** It only resolves ids
14261426` search forward ` /` reverse ` /` category ` already returned — the detail-view
14271427follow-up to a search result, not a way to find places by name or location.
14281428
1429- ### ` mapbox places get `
1429+ ### ` mapbox places `
14301430
1431- Full detail for one place.
1431+ One or more full place records. No subcommand: earlier versions of this
1432+ page split this into ` places get ` (one id) and ` places batch ` (a JSON
1433+ array of ids) — reviewed as the wrong shape for any API with that pair, a
1434+ caller should not have to choose. ` mapbox places ` always sends the batch
1435+ request, one id or many, so there is one command and one response shape.
14321436
14331437#### Parameters
14341438
1435- ` <mapbox-id> ` (positional) is required — from a Search Box API result.
1439+ ` <mapbox-id>... ` (positional, one or more, up to 100) — each from a
1440+ Search Box API result. More than 100 is a usage error before the request
1441+ goes out.
14361442
14371443#### Examples
14381444
14391445``` sh
1440- mapbox places get dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA
1446+ mapbox places dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA
1447+ mapbox places dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA \
1448+ dXJuOm1ieHBvaTo4N2YzMmY2YS00MjkwLTQzNmItYWQyMi1hMzBhMzcxNWVmNzM
14411449```
14421450
14431451#### Outputs
14441452
1445- Captured live, a real place found via `search forward --q "Ferry Building
1446- San Francisco"`:
1453+ The response is always ` {"results": [<place record>, ...]} ` , one entry
1454+ per id, each carrying ` name ` , ` full_address ` , ` primary_category ` /
1455+ ` categories ` , ` coordinates ` (with ` routable_points ` ), structured
1456+ ` address ` , ` score ` (` closed ` /` reality ` /` popularity ` , each 0-1), and where
1457+ available ` brand ` , ` opening_hours ` , ` phone ` , ` photos ` , ` website ` ,
1458+ ` building ` , and ` telemetry ` (hourly activity by day of week).
14471459
1448- <table >
1449- <tr ><th width =" 50% " >Terminal — <code >-o text</code ></th ><th width =" 50% " >Agent — <code >-o json</code ></th ></tr >
1450- <tr ><td >
1451-
1452- ``` json
1453- {
1454- "mapbox_id" : " dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA" ,
1455- "name" : " Ferry Building" ,
1456- "full_address" : " San Francisco, California, 94105, United States" ,
1457- "primary_category" : " food" ,
1458- "categories" : [" cafe" , " food" , " food_and_drink" ],
1459- "status" : " active" ,
1460- "permanently_closed" : false ,
1461- "opening_hours" : " Sa 08:00-14:00" ,
1462- "phone" : " +14152373318" ,
1463- "website" : " http://crumbleandwhisk.com/" ,
1464- "score" : { "closed" : 0 , "reality" : 0.973 , "popularity" : 0.275 },
1465- "coordinates" : {
1466- "latitude" : 37.79557765 ,
1467- "longitude" : -122.39332918 ,
1468- "source" : " poi" ,
1469- "routable_points" : [
1470- { "name" : " driving" , "latitude" : 37.795594 , "longitude" : -122.393338 }
1471- ]
1472- },
1473- "address" : {
1474- "city" : " San Francisco" ,
1475- "neighborhood" : " Financial District" ,
1476- "postcode" : " 94105" ,
1477- "region" : " California" ,
1478- "region_code_full" : " US-CA" ,
1479- "country" : " United States" ,
1480- "country_code" : " US"
1481- }
1482- }
1483- ```
1484-
1485- </td ><td >
1486-
1487- ``` json
1488- {"mapbox_id" :" dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA" ,"name" :" Ferry Building" ,"full_address" :" San Francisco, California, 94105, United States" ,"primary_category" :" food" ,"categories" :[" cafe" ," food" ," food_and_drink" ],"status" :" active" ,"permanently_closed" :false ,"opening_hours" :" Sa 08:00-14:00" ,"phone" :" +14152373318" ,"website" :" http://crumbleandwhisk.com/" ,"score" :{"closed" :0 ,"reality" :0.973 ,"popularity" :0.275 },"coordinates" :{"latitude" :37.79557765 ,"longitude" :-122.39332918 ,"source" :" poi" ,"routable_points" :[{"name" :" driving" ,"latitude" :37.795594 ,"longitude" :-122.393338 }]},"address" :{"city" :" San Francisco" ,"neighborhood" :" Financial District" ,"postcode" :" 94105" ,"region" :" California" ,"region_code_full" :" US-CA" ,"country" :" United States" ,"country_code" :" US" }}
1489- ```
1490-
1491- </td ></tr >
1492- </table >
1493-
1494- Dropped ` attributes ` (14 boolean amenity flags — wheelchair access, payment
1495- types, and the like), ` created_at ` /` updated_at ` , and most ` address ` fields
1496- that were ` null ` for this place, for length; the real response carries
1497- them too. ` brand ` is ` null ` here since this isn't a chain location.
1498-
1499- ### ` mapbox places batch `
1500-
1501- Full detail for up to 100 places in one call — hydrates a whole list of
1502- search results in one round trip instead of one ` get ` per id.
1503-
1504- #### Parameters
1505-
1506- ` --data ` /` -d ` carries ` {"ids": [...]} ` , up to 100 ` mapbox_id ` strings.
1507-
1508- #### Examples
1509-
1510- ``` sh
1511- mapbox places batch -d ' {"ids": ["dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA", "dXJuOm1ieHBvaTo4N2YzMmY2YS00MjkwLTQzNmItYWQyMi1hMzBhMzcxNWVmNzM"]}'
1512- ```
1513-
1514- #### Outputs
1515-
1516- Captured live, the same Ferry Building above plus a second real place:
1460+ A single real place record below — the same Ferry Building result a
1461+ previous pass of this page captured live via `search forward --q "Ferry
1462+ Building San Francisco"` — run through this CLI's own output rendering
1463+ again to show both modes honestly for the one-command shape, rather than
1464+ reused verbatim from the old two-command page. Not re-captured from a
1465+ live call: this environment has no network access to the real API.
15171466
15181467<table >
15191468<tr ><th width =" 50% " >Terminal — <code >-o text</code ></th ><th width =" 50% " >Agent — <code >-o json</code ></th ></tr >
15201469<tr ><td >
15211470
1522- ``` json
1523- {
1524- "results" : [
1525- { "mapbox_id" : " …fa19cca0…" , "name" : " Ferry Building" },
1526- { "mapbox_id" : " …87f32f6a…" , "name" : " Golden Gate Bridge" }
1527- ]
1528- }
1471+ ``` text
1472+ NAME FULL_ADDRESS MAPBOX_ID OPENING_HOURS PERMANENTLY_CLOSED PHONE PRIMARY_CATEGORY STATUS WEBSITE
1473+ Ferry Building San Francis… dXJuOm1i… Sa 08:00-14:… no +141523… food active http://…
15291474```
15301475
15311476</td ><td >
15321477
15331478``` json
1534- {"results" :[{"mapbox_id" :" …fa19cca0… " ,"name" :" Ferry Building" },{ "mapbox_id" : " …87f32f6a… " , "name " :" Golden Gate Bridge " }]}
1479+ {"results" :[{"mapbox_id" :" dXJuOm1ieHBvaTpmYTE5Y2NhMC0yZmQ3LTQwMzgtYTEzNy02MzFmNGEwZDI5ODA " ,"name" :" Ferry Building" , "full_address" : " San Francisco, California, 94105, United States " , "primary_category" : " food " , "categories" :[ " cafe " , " food " , " food_and_drink " ], "status" : " active " , "permanently_closed" : false , "opening_hours" : " Sa 08:00-14:00 " , "phone" : " +14152373318 " , "website" : " http://crumbleandwhisk.com/ " , "score" :{ "closed" : 0 , "reality" : 0.973 , "popularity" : 0.275 }, "coordinates" :{ "latitude" : 37.79557765 , "longitude" : -122.39332918 , "source " :" poi " }, "address" :{ "city" : " San Francisco " , "region" : " California " } }]}
15351480```
15361481
15371482</td ></tr >
15381483</table >
15391484
1540- Each entry in ` results ` is the full record ` get ` returns, trimmed to
1541- ` mapbox_id ` /` name ` here for length. Not captured live: ` 206 ` with
1542- ` missing ` /` unprocessed ` alongside ` results ` — the documented shape for a
1543- batch where some ids didn't resolve. Both ids used to write this page were
1544- real and resolved, so triggering it would have meant fabricating a
1545- plausibly-shaped but fake id, which defeats the point of a live capture.
1485+ The response's own nested objects (` coordinates ` , ` address ` , ` score ` ) and
1486+ arrays (` categories ` , ` photos ` ) are dropped from the table — only scalar
1487+ fields become columns, the same rule every table on this page follows —
1488+ so the full detail is a ` -o json ` away. A call with more than one id adds
1489+ one row per place to the same table, same columns. ` 206 ` with
1490+ ` missing ` /` unprocessed ` alongside ` results ` — some ids didn't resolve — is
1491+ documented but not shown here, for the same reason: no live call to
1492+ trigger it from, and fabricating a plausibly-shaped but fake id to force
1493+ one would defeat the point of a real capture.
15461494
15471495---
15481496
0 commit comments