{"api":"theuniversal v1","docs":"https://dialin.io/developers","auth":"Authorization: Bearer tu_…","routes":[{"method":"GET","path":"/api/v1/me","scope":"map:read","what":"Your key: its app, scopes, standing and limits."},{"method":"GET","path":"/api/v1/dictionary","scope":"dictionary:read","what":"Every kind of thing and the dials it's described by. ?type=restaurant for one."},{"method":"GET","path":"/api/v1/dictionary/dials","scope":"dictionary:read","what":"A category's core four, its most-dialed added dials, and the rating. ?category=food"},{"method":"GET","path":"/api/v1/map/live","scope":"map:read","what":"Right now: every lit bat signal and open offer on a displaced cell, the pairs that could meet, recent meets."},{"method":"GET","path":"/api/v1/stream","scope":"map:read","what":"Live: every pulse as it happens, as server-sent events (dial, signal.lit, signal.dim, search, offer.open, offer.close, meet). Resume with Last-Event-ID."},{"method":"GET","path":"/api/v1/map/pulses","scope":"map:read","what":"The same pulses by polling: ?after=<last id> (none = the last 15 minutes)&limit=200. Kept 24 hours."},{"method":"GET","path":"/api/v1/map/flow","scope":"map:read","what":"Groups of 5+ released into the commons over time. ?since=ISO&limit=500"},{"method":"GET","path":"/api/v1/map/searches","scope":"map:read","what":"What people are looking for, with how many looked. ?hours=24"},{"method":"GET","path":"/api/v1/map/snapshot","scope":"map:read","what":"The people behind a taste, blurred: values 5+ share, counts in fives. ?tastes=food,pizza&facets={\"age_band\":[\"25-34\"]}"},{"method":"GET","path":"/api/v1/map/pulse","scope":"map:read","what":"Coarse totals: people, held and released this week, all time."},{"method":"GET","path":"/api/v1/map/axes","scope":"map:read","what":"The core dials as the world is dialing them (5+ people per axis)."},{"method":"GET","path":"/api/v1/rank","scope":"map:read","what":"Things near a point ranked by a dial's consensus. ?dial=spice&lat=41.88&lng=-87.63&q=egg roll&order=desc"},{"method":"GET","path":"/api/v1/offers","scope":"offers:read","what":"Your offers (at this key's place, if it has one), newest first. ?live=1&limit=50"},{"method":"POST","path":"/api/v1/offers","scope":"offers:write","what":"Make an offer: {title, points_cost, inventory (null = unlimited), place, starts_at, ends_at, min_trust, target:{facets, dials}, description, fine_print, photo_url}. Send Idempotency-Key to retry safely."},{"method":"POST","path":"/api/v1/offers/reach","scope":"offers:write","what":"How many real people a target matches, in fives: {target:{facets, dials}, min_trust}."},{"method":"GET","path":"/api/v1/offers/:id","scope":"offers:read","what":"One of your offers, with reserved and redeemed counts."},{"method":"PATCH","path":"/api/v1/offers/:id","scope":"offers:write","what":"Change an offer: any create field but points_cost and place; {active:false} pauses it."},{"method":"DELETE","path":"/api/v1/offers/:id","scope":"offers:write","what":"Close an offer. Codes already given out still redeem."},{"method":"GET","path":"/api/v1/webhooks","scope":"offers:read","what":"Your webhooks and how their last delivery went."},{"method":"POST","path":"/api/v1/webhooks","scope":"offers:read","what":"Hear offer.reserved, offer.redeemed and offer.released the moment they happen: {url, events}. The secret is shown once."},{"method":"POST","path":"/api/v1/webhooks/:id/ping","scope":"offers:read","what":"Send a test delivery."},{"method":"DELETE","path":"/api/v1/webhooks/:id","scope":"offers:read","what":"Stop a webhook."}]}