Ephemeral maps
Send a map without an account or API key, and get back a link. Whoever opens it sees the map, and can add it to their account to keep editing. Until then, you can change it.
squidmaps is in beta. Features, the map spec and these docs may change without notice, and things may occasionally break. Export a copy of any map that matters to you, and tell us when something isn't right: use Beta feedback, or email [email protected].
On this page
An ephemeral map is temporary: it lasts an hour after it’s made or last changed, and a day at most, unless someone adds it to their account, where it becomes an ordinary map that stays. It’s how an AI agent, an automated workflow or an app turns data into a map it can hand someone: see From an AI assistant.
Create an ephemeral map
POST https://squidmaps.io/api/ephemeral-mapsThe request body is a map: the whole map in one document,
with its features, their styles and popups, and its legend, basemap and view.
Only features is required:
| Field | Default when missing |
|---|---|
name |
"Untitled map" |
description |
"" |
basemap |
The default basemap |
extent |
Every zoom level, with no bounds |
view |
null: the map fits its features when first opened |
legend |
null: no legend |
Features without an id get one, and coordinates are rounded to six decimal
places.
curl -X POST https://squidmaps.io/api/ephemeral-maps \
-H "Content-Type: application/json" \
-d '{
"name": "Coffee in the East Village",
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [-73.9845, 40.7265] },
"properties": {
"name": "Abraço",
"description": "Tiny espresso bar. Get the olive oil cake.",
"@point-type": "emoji",
"@emoji": "☕"
}
}
]
}'Response
A 201 with the map’s link:
{
"id": "x4LqT0b9cE2mVd7nRk1sPw",
"url": "https://squidmaps.io/claim/x4LqT0b9cE2mVd7nRk1sPw",
"editToken": "Hq0tWb3c9Lr1ZkVx7Nf2Ys5aGd8EmPjU",
"expiresAt": "2026-10-16T18:00:00.000Z"
}| Field | What it is |
|---|---|
id |
The ephemeral map’s id. |
url |
The link to hand to a person. |
editToken |
The secret to change the map with. Keep it, and don’t share it. |
expiresAt |
When the link stops working: an hour after it was made. |
Change the map
Until someone adds the map to their account, you can replace it with a
changed map, using the editToken from when you made it:
PUT https://squidmaps.io/api/ephemeral-maps/{id}
Authorization: Bearer {editToken}The request body is the whole map, as when you made it, not just what
changed. The response is the map’s id, url and new expiresAt. The link
stays the same, and anyone who has it open sees the change within a few
seconds, so a person can watch the map while you work on it with them.
Each change keeps the map for another hour, up to a day after it was made.
| Status | Why |
|---|---|
401 |
No edit token was sent. |
403 |
The edit token isn’t this map’s. |
404 |
The map has expired, or never existed. |
409 |
Someone has added the map to their account. They change it in squidmaps now. |
Preview the map
GET https://squidmaps.io/api/ephemeral-maps/{id}/preview.jpgA JPEG picture of the map as its link shows it, with its panel and legend. An assistant can look at it to check its work: whether the map shows what it should, and how it looks. It takes a few seconds to draw, and is drawn again only after the map changes.
It’s 1200×630 pixels unless you ask for another size:
| Parameter | What it is | Default | Range |
|---|---|---|---|
width |
The width of the screen it’s drawn on, in pixels. | 1200 |
320 to 2000 |
height |
Its height, in pixels. | 630 |
240 to 2000 |
scale |
Image pixels per screen pixel: 2 for a sharper picture of the same view, twice as wide and tall. |
1 |
1 or 2 |
A larger screen shows more of the map, so match the size to the map’s shape: taller for a map that runs north to south, wider for one that runs east to west. In all, a picture can be at most 4,000,000 pixels (width × height × scale²).
GET https://squidmaps.io/api/ephemeral-maps/{id}/preview.jpg?width=800&height=1000| Status | Why |
|---|---|
400 |
A size is out of range, isn’t a whole number, or makes too many pixels in all. The message says which. |
404 |
The map has expired, or never existed. |
429 |
Too many previews from your address. Wait as long as the Retry-After header says. |
Opening the link
Anyone with the link sees the map. The first signed-in person to add it to their account gets it as their own draft map, and can edit and publish it like any other. After that, the link tells everyone else the map has been added, and leads the person who added it to their copy.
Adding the map counts toward that account’s limits: during the beta, 15 maps, and up to 500 features and 1 MB of features on one map.
From GeoJSON
A pipeline that already makes GeoJSON can send its FeatureCollection’s
features as they are. Features without style properties get the default
look, so add them as needed, with jq or your own code:
jq '{name: "Inspections, week 42", features: .features}' inspections.geojson \
| curl -X POST https://squidmaps.io/api/ephemeral-maps \
-H "Content-Type: application/json" -d @-From an AI assistant
The endpoint needs no account or key, so an assistant that can make web requests, through a tool, a function call or code it runs, can use it directly:
- The person asks for a map, like “the best taco spots in East Austin”.
- The assistant writes the map in the map spec.
- It posts the map here, and gives the person the
urlfrom the response. - As they ask for changes, the assistant changes the map rather than making another. The link stays the same.
- Once they like it, the person adds the map to their account from the link, to keep editing and publish it.
To write valid maps, point the model at the spec: every docs page is
available as Markdown, listed in /llms.txt, and the spec is
published as JSON Schema. A 400 names what’s
wrong and where, so the assistant can fix the map and try again.
Assistants that support MCP, like Claude and ChatGPT, can add the squidmaps MCP server instead. Its tools use this API, and in many apps they show the map in the conversation.
Limits
- The request body can be up to 5 MB.
- Features can’t have images: add them after the map is in an account.
- Feature ids must be unique.
- Each IP address can create 30 ephemeral maps, change them 120 times and preview them 30 times every 10 minutes.
- Previews are drawn at most 2000 pixels on a side (twice that in the image,
at
scale2), and can be at most 4,000,000 pixels in all. - However often it’s changed, a map expires a day after it was made.
Errors
A map that doesn’t match the spec gets a 400, with a
message saying what’s wrong and where. See Errors.
Tip: Validate maps against the published JSON Schema before sending them.
Need a hand? Email [email protected]. Attribution. Privacy. . © 2026 squidmaps
