Flukto Pulse API
One public JSON with the live Flukto pulse: how many people are on air in the world, where the map is warm, and, if you tell us where you are, how many are on air in your city. Made for gadgets, desk displays, widgets and websites. No key, no sign-up.
The call
GET https://flukto.com/api/v1/pulse
Optional query parameters:
| Parameter | Meaning |
|---|---|
lat, lng | Your position in decimal degrees. Rounded to 0.01° (about 1 km) on our side. Adds near. |
city | A city name instead of coordinates, e.g. city=K%C3%B6ln or city=Cologne. Adds near. |
compact=1 | Leaves out cells. For small devices that only show numbers. |
lang | en (default), de, ru: language of the ready-made text lines. |
The answer
{
"v": 1,
"now": "2026-10-06T08:12:21.000Z",
"at": "2026-10-06T08:12:00.000Z",
"ttl": 20,
"world": { "on_air": 29, "reachable": 12, "accounts": 128, "cities": 4,
"text": "41 reachable · 4 cities alive" },
"cells": [[50.47, 5.7, 0.75, 2], [51.41, 6.36, 0.65, 3]],
"near": { "name": "Köln", "country": "DE", "on_air": 7, "at_least": 7,
"notes": 3, "warm": 0.6, "text": "7 on air in Köln" },
"links": { "app": "https://flukto.com/get", "docs": "https://flukto.com/api",
"logo": "https://flukto.com/assets/logo.svg",
"wordmark": "https://flukto.com/assets/wordmark.svg" }
}
- now is the server time (handy for gadgets without a clock); at is when the numbers were counted; ttl says how many seconds to wait before asking again. Asking more often only gets you the same cached answer.
- world.on_air: people on air right now, worldwide. reachable: people not on air who are open to chat (the switch is on, the app was opened within the last 100 days and the account is still signed in on a phone; they sit on the map as a resting dot). accounts: accounts that exist. cities: cities with at least one person on air.
- cells is the heat map for drawing a planet: each entry is
[lat, lng, warm, res], the centre of a warm hexagon, its warmth from 0 to 1, and its size:res 2is about 150 km across,res 3about 60 km. Paint a soft spot per entry and you have the Flukto globe. - near comes only with
lat/lngorcity. on_air is the number of people on air in that city (a hexagon of about 50 km). Below five people the number is withheld:on_airisnullandat_leastis 1 (someone is on air) or 0 (nobody). notes: notes lying around in that area. warm: warmth of the city on the map, 0 to 1. - text lines are ready to print, in the language you asked for.
Limits
Answers are cached for 20 seconds per URL. Each IP address may ask 30 times a minute; after that you get 429 with a Retry-After header. The response carries Access-Control-Allow-Origin: *, so a browser widget on any site can read it directly.
What is not in it
No people, no positions, no profiles. The numbers are the same k-anonymous counts the app shows in its World tab: a city count only exists from five people upwards, a warm cell is at least 60 km wide, and nothing in the answer can be traced back to a person. Read more under Privacy.
Examples
Shell:
curl "https://flukto.com/api/v1/pulse?city=Cologne&compact=1&lang=en"
A line on a website:
<span id="flukto">…</span>
<script>
fetch('https://flukto.com/api/v1/pulse?compact=1')
.then(r => r.json())
.then(p => { document.getElementById('flukto').textContent = p.world.text; });
</script>
ESP32 (Arduino, ArduinoJson):
HTTPClient http;
http.begin(client, "https://flukto.com/api/v1/pulse?compact=1&lat=50.93&lng=6.96");
if (http.GET() == 200) {
JsonDocument doc;
deserializeJson(doc, http.getStream());
long onAir = doc["world"]["on_air"];
const char *line = doc["near"]["text"]; // "7 on air in Köln"
}
http.end();
delay(20000); // ttl
Our own desk globe (ESP32-S3 with a 1.47" display) draws the planet from cells and shows world.on_air; its ready-to-flash firmware is on /gadgets, a browser preview at /iot/esp32s3174.
Logo
If a gadget or page shows the Flukto numbers, it may show the mark: logo.svg (the hexagon) and wordmark.svg (hexagon and name), ember #f2a25c on night #0b0e13. Do not change the colours or the shape.
Changes
The v field names the format. Fields may be added at any time; existing fields keep their meaning. If something has to break, it gets a new version and this page says so.