BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://cartes.io/api/maps'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://cartes.io/api/maps", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "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",
      "op

Parameters

ParameterTypeRequiredDescription
(maps)pathOptional`/maps` lists public maps, paginated. maps
(one map)pathOptional`/maps/{uuid}` returns a single map by its identifier. 63baf5ac-045f-4e1d-a1cb-8c2fb8a009b7
(markers)pathOptional`/maps/{uuid}/markers` returns the markers on a map with their categories and positions. markers
(categories)pathOptional`/marker-categories` lists the shared category vocabulary markers can use. marker-categories
pagequeryOptionalPage 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

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.