Cartes.io API
Free collaborative mapping API with no key: read public maps and their markers, or create maps anyone can pin to. Tested read-only example and live response included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Cartes.io API?
Cartes.io is a free, key-free API for creating and reading collaborative maps. Any map can be created without an account, markers can be added by anyone or restricted to logged-in users, and the public listing of maps and their markers is readable over plain HTTP GET.
The unusual thing about Cartes.io is that a map needs no account to exist. Posting to the maps endpoint returns a UUID and a token, and that pair is the whole ownership model — which makes it well suited to throwaway crowdsourced maps: an incident report, a scavenger hunt, a conference venue guide, a community survey that runs for a fortnight and then stops mattering.
The example documented here is deliberately the read side. Listing public maps returns a paginated feed with each map's UUID, title, privacy setting, marker count and the `users_can_create_markers` policy that governs who may pin to it. Markers themselves live at `/maps/{uuid}/markers` and carry their own categories, descriptions and optional expiry times, so a map can be made to age out on its own.
Quick facts
- Base URL
https://cartes.io/api- Authentication
- No key for reads. Creating a map returns a token you keep; there is no account or signup step involved.
- Rate limit
- 60 requests per minute per IP, reported in the `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers.
- Pricing
- Free and open source.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Cartes.io API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List public maps with their marker counts
GET https://cartes.io/api/maps
curl 'https://cartes.io/api/maps'const res = await fetch("https://cartes.io/api/maps");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://cartes.io/api/maps", timeout=20)
res.raise_for_status()
print(res.json()){
"data": [
{
"slug": "63baf5ac-045f-4e1d-a1cb-8c2fb8a009b7",
"title": "KBS Location Map",
"description": "",
"privacy": "public",
"users_can_create_markers": "only_logged_in",
"options": null,
"uuid": "63baf5ac-045f-4e1d-a1cb-8c2fb8a009b7",
"created_at": "2026-08-20T08:39:51+02:00",
"updated_at": "2026-08-20T08:39:51+02:00",
"markers_count": 0,
"is_linked_to_user": false,
"user": null
},
{
"slug": "933fe511-3c64-434f-b5ac-f90d91d2223c",
"title": "KBS Location Map",
"description": "",
"privacy": "public",
"users_can_create_markers": "only_logged_in",
"options": null,
"uuid": "933fe511-3c64-434f-b5ac-f90d91d2223c",
"created_at": "2026-08-20T08:39:51+02:00",
"updated_at": "2026-08-20T08:39:51+02:00",
"markers_count": 0,
"is_linked_to_user": false,
"user": null
},
{
"slug": "663ccc48-236f-4f3b-8fb4-08739fa5ee8f",
"title": "KBS Location Map",
"description": "",
"privacy": "public",
"users_can_create_markers": "only_logged_in",
"options": null,
"uuid": "663ccc48-236f-4f3b-8fb4-08739fa5ee8f",
"created_at": "2026-08-20T08:39:51+02:00",
"updated_at": "2026-08-20T08:39:51+02:00",
"markers_count": 0,
"is_linked_to_user": false,
"user": null
},
{
"slug": "56dfcf10-9824-470c-b205-af7401d9e1ec",
"title": "Trip to Europe",
"description": "",
"privacy": "public",
"users_can_create_markers": "only_logged_in",
"opParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(maps) | path | Optional | `/maps` lists public maps, paginated. maps |
(one map) | path | Optional | `/maps/{uuid}` returns a single map by its identifier. 63baf5ac-045f-4e1d-a1cb-8c2fb8a009b7 |
(markers) | path | Optional | `/maps/{uuid}/markers` returns the markers on a map with their categories and positions. markers |
(categories) | path | Optional | `/marker-categories` lists the shared category vocabulary markers can use. marker-categories |
page | query | Optional | Page number through the map listing. 2 |
Response fields
dataarray- The page of maps. Pagination metadata accompanies it.
uuid / slugstring- Map identifier. Both fields carry the same UUID; either can address the map.
title / descriptionstring- Map title and description as set by whoever created it. Both may be empty.
privacystring- `public`, `unlisted` or `private`. Only public maps appear in the listing.
users_can_create_markersstring- Who may add markers: `yes`, `no` or `only_logged_in`. This is the map's contribution policy.
markers_countinteger- How many markers the map holds — worth checking before fetching them.
created_at / updated_atstring- ISO 8601 timestamps with a timezone offset.
is_linked_to_user / userboolean / object- Whether the map belongs to a registered account, and who, when it does.
What you can build with the Cartes.io API
- Spin up a crowdsourced map for an event without building a backend
- Read markers from a public map into your own visualisation
- Collect location reports from a community with no signup friction
- Embed a shared, editable map in a site or wiki page
- Build a temporary incident or sightings map that expires on its own
Common errors and how to fix them
429 Too Many Requests
The 60-per-minute IP quota is exhausted.
Fix: Read `X-RateLimit-Remaining` and pace accordingly. Marker feeds change slowly enough that polling once a minute is plenty.
404 on a map UUID
The map is private or unlisted, or the UUID is wrong.
Fix: Only public maps appear in the listing. Unlisted maps are reachable if you already hold the UUID; private ones need their token.
Markers cannot be added
The map's `users_can_create_markers` is `no` or `only_logged_in`.
Fix: Read that field before offering a contribution interface. It is the map owner's setting, not an API restriction.
Titles and descriptions are empty
They are optional at creation and many maps leave them blank.
Fix: Fall back to the UUID or the marker count for a label. Do not assume a title exists.
Cartes.io API — frequently asked questions
Is Cartes.io free?
Yes, free and open source with no key or account required. Reads are open, and creating a map returns a token that acts as the credential — there is no signup step.
Do I need an account to create a map?
No. Posting to the maps endpoint returns the map's UUID and an ownership token, and holding that token is what proves ownership. An account is optional and only useful if you want maps tied to a profile.
Can anyone add markers to my map?
That is your choice at creation, expressed in the `users_can_create_markers` field: open to everyone, restricted to logged-in users, or closed. The setting is returned on every map so clients can adapt their interface.
Do markers expire?
They can. Markers accept an optional expiry time, which suits temporary maps — incident reports, event pins, sightings — where stale points are worse than no points.
Tools that pair with this API
GeoJSON Validator
Validate GeoJSON against RFC 7946 and get the exact JSON path of every problem: unclosed rings, swapped coordinates, missing properties and more.
CSV to GeoJSON Converter
Turn a CSV of coordinates into a GeoJSON FeatureCollection, picking the latitude and longitude columns and keeping every other column as a property.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Cartes.io is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.