JSON format for maps

Maps can be exported and imported as a JSON file. This page describes the format. The export file of an existing map is a reliable template for the structure of the JSON file. Not every exported field and not every setting is taken over on import, though, the tables below describe what is supported.

If you use the AI module in Edumaps, you do not need this format: open the “Map options” menu in the map and choose “Change Content”. There you describe in your own words what the AI should create or change.

Last updated: 7 November 2026, format version 2

  1. Structure
  2. Smallest useful file
  3. Example
  4. Data types
  5. mapdata
  6. Columns
  7. Boxes
  8. Arrows
  9. Text fields
  10. Text format
  11. Files
  12. What is not transferred
  13. Limits
  14. AI assistant
  15. Further information

Structure of the file

A file contains exactly one JSON object with these keys. The import reads every key by its name, the order does not matter. Unknown keys are ignored without a message.

Key Type Required Content
Header
formatversion number no Version of the format, currently 2. Files of format version 1 are still imported. If the key is missing, the file counts as version 1. Any other value is refused (message “Unknown format version”, code JSI-4).
format string no Note for readers of the file with the link to this page. The import does not read it.
Map
mapdata object yes Title and settings of the map. Without mapdata or without a title the import stops (code JSI-1).
paths list no The columns of the map in their order. Each column holds its boxes in boxes. Without paths the map is empty. How a column appears depends on mapformat: on the Pinboard the columns stand side by side, in the Timeline each column is a row. On the Sticker Wall, in the Gallery and in the Journal the column heads are hidden and the columns only order the boxes (Sticker Wall: each box at its position, Gallery: all boxes in one continuous row, Journal: all boxes below each other at full width). The tables below always say “column”.
arrows list no Arrows on the map. The export only writes the key if the map has arrows.
labels list no Text fields on the map. The export only writes the key if the map has text fields.

Smallest useful file

Only the title of the map is required. Everything else gets its default on import: an empty Pinboard with the default background, without columns and boxes. The two header keys formatversion and format are optional, the only required content is mapdata with a title. A file should still carry the header.

{
	"formatversion": 2,
	"format": "Edumaps map export. Box content uses the Edumaps text markup (Markdown-like, raw HTML is shown literally). Documentation: https://www.edumaps.de/docs/json",
	"mapdata": {
		"title": "My map"
	}
}

Example map

A map with two columns and three boxes. This file imports without errors.

{
	"formatversion": 2,
	"format": "Edumaps map export. Box content uses the Edumaps text markup (Markdown-like, raw HTML is shown literally). Documentation: https://www.edumaps.de/docs/json",
	"mapdata": {
		"title": "The water cycle",
		"subtitle": null,
		"tags": "geography grade5",
		"mapbg": "i10",
		"mapfont": "0",
		"mapformat": "0",
		"maptype": "0",
		"flags": "0",
		"language": "en",
		"extras": null
	},
	"paths": [
		{
			"title": "Basics",
			"visiblefrom": null,
			"visibleuntil": null,
			"annotation": null,
			"color": null,
			"flags": "0",
			"widthmode": "1",
			"extras": null,
			"boxes": [
				{
					"title": "What is the water cycle?",
					"content": "## In short\n\nWater is always on the move.\n\n- Evaporation\n- Condensation\n- Precipitation",
					"subject": "Geography",
					"booktime": null,
					"booklimit": "0",
					"color": null,
					"flags": "0",
					"ratingmode": "1",
					"position": null,
					"visiblefrom": null,
					"visibleuntil": null,
					"extras": null
				},
				{
					"title": "Read more",
					"content": "**Tip:** For an overview see {the Wikipedia article}{https://en.wikipedia.org/wiki/Water_cycle}.",
					"subject": null,
					"booktime": null,
					"booklimit": "0",
					"color": "#3a86ff",
					"flags": "16",
					"ratingmode": "0",
					"position": null,
					"visiblefrom": null,
					"visibleuntil": null,
					"extras": null
				}
			]
		},
		{
			"title": "Going further",
			"visiblefrom": null,
			"visibleuntil": null,
			"annotation": null,
			"color": null,
			"flags": "0",
			"widthmode": "0",
			"extras": null,
			"boxes": [
				{
					"title": "Rain, snow and hail",
					"content": "How water falls from the clouds is explained in the article {Precipitation}{https://en.wikipedia.org/wiki/Precipitation}.",
					"subject": null,
					"booktime": null,
					"booklimit": "0",
					"color": null,
					"flags": "0",
					"ratingmode": "0",
					"position": null,
					"visiblefrom": null,
					"visibleuntil": null,
					"extras": null
				}
			]
		}
	]
}

Data types

  • The file is UTF-8 encoded and has the extension .json.
  • The export writes every scalar value as a string or as null (objects and lists keep their JSON type), numbers and flags included (for example "0"). The only exception is formatversion, a JSON number. The import accepts numbers as a string and as a JSON number, "16" and 16 have the same effect.
  • A missing field, null and an empty string mean the same: the import uses the default from the tables below.
  • The string "0" is a valid text, also as a map title, box title and box content. Only null and "" are empty.
  • If a field for text holds a list or an object, the field is skipped and counted in the message after the import. For the title and the annotation of a column the entries of a list are joined with spaces.
  • Flags are sums of single values. A box filled with its color (16) and with a hidden title (64) has "80".
  • Colors in the color fields are hex strings with a hash: "#RGB", "#RRGGBB" or "#RRGGBBAA". Other values are dropped, arrows then get "#0000ff", text fields "#ffff9c". Colors are stored in lowercase, uppercase input is accepted. Colored text in the box content only knows 3 or 6 digits (see below).
  • Texts that are too long are shortened to the given length on import, the message after the import names their number.

Fields of mapdata

Field Type Required Default on import Meaning
title string yes (none) Title of the map, at most 800 characters.
subtitle string or null no null Subtitle of the map below the title, at most 200 characters.
tags string or null no null Keywords separated by spaces, never by commas, for example "geography grade5 water". A keyword itself contains no space. At most 800 characters, duplicates are removed.
mapbg string or null no "i10" Background: a predefined image (p0 to p3, i1 to i33, s1 to s21), a color ("#RRGGBB") or the link to an Edumaps file (at most 100 characters, the file is copied into your account). Invalid values are dropped.
mapfont number as string no "0" Font, 0 to 20, 0 is the default font.
mapformat number as string no "0" View: 0 Pinboard, 1 Timeline, 2 Sticker Wall, 3 Gallery, 4 Journal.
maptype number as string no "0" Kind of map: 0 standard, 1 quiz, 2 course.
flags number as string no "0" Display of the title: 1 white title, 2 darkened background, 4 blurred background. All other values are removed on import.
language string or null no language of the server ("de") Language of the content as a two-letter code, for example "de", "en", "tr". Unknown codes are replaced by the default.
extras string or null no null Further settings of the map as short codes separated by spaces (for example "hmo fix"). Unknown codes are removed, the delete protection is never taken over. It is best to copy the value from an export file.

An imported map is always unpublished and unlocked. A map password is not part of the format.

Fields of a column (paths)

Field Type Required Default on import Meaning
title string or null no empty Title of the column, at most 800 characters.
visiblefrom string or null no null (visible right away) From this point in time the column is visible, not before. Format "YYYY-MM-DD" (midnight) or "YYYY-MM-DD HH:MM:SS", time zone of the Edumaps servers (Europe/Berlin), without a time zone offset. The date, the hour and the minutes are kept, seconds are dropped. If the time is outside 0 to 23 hours or 0 to 59 minutes, only the date stays (midnight).
visibleuntil string or null no null (visible without end) Until this point in time the column is visible, not after. Format as for visiblefrom. Both fields together make a time window. If visiblefrom lies after visibleuntil, the column is never visible.
annotation string or null no null Notes on the column, at most 2000 characters.
color string or null no null (default color) Color of the column as a hex string.
flags number as string no "0" Sum of the values from the table “Flags of a column”. Other values are removed on import.
widthmode number as string no "0" Width of the column: 0 normal, 1 wide, 2 double width. Other values become 0.
extras string or null no null Older short codes (spu, phs), others are removed. New files use flags for this.
boxes list no empty column The boxes of the column in their order.

The values 8 and 16, together with visiblefrom and visibleuntil, correspond to the option “Visibility in map view” in the column editor: whoever only views the map never sees a hidden column, editors still see it in edit mode. The value 512 (“Hide from students in edit mode”) additionally hides the column in edit mode, but only for students.

Flags of a column Meaning
1column locked for other editors
2column title hidden
4column title in black
8Hide column (in map view)
16Display column title in view: until the time in visiblefrom only the column title is visible
32only the column title locked
512Hide from students in edit mode

Files of format version 1 may still carry the old values 64 (wide) and 128 (double width) for the column width, they are still imported. Older files (version 1) have one field showdate instead of visiblefrom and visibleuntil and are still imported: without the value 256 in flags it is taken as visiblefrom, with 256 as visibleuntil.

Example: the column appears on 1 November 2026 at midnight. Before that, viewers only see its title with the note “Appears on …”, not yet its boxes.

"flags": "16",
"visiblefrom": "2026-11-01"

Fields of a box (boxes)

Field Type Required Default on import Meaning
title string or null no null Title of the box, at most 800 characters. Line breaks are removed. **bold**, *italic* and #tag are allowed.
content string or null no null Content of the box in the Edumaps text format (see below), at most 12000 characters. Line breaks as \n.
subject string or null no null Text of the badge above the box title (in the editor: “Label”), for example a school subject or a category, at most 200 characters. The field name is historical.
booktime string or null no null Date of a booking or start of a course, exactly in the format "YYYY-MM-DD HH:MM:SS", otherwise dropped. Only effective with bookings switched on.
booklimit number as string no "0" Maximum number of participants of a booking, 0 without a limit. Allowed are 0 to 1000, other values become 0.
color string or null no null (default color) Color of the box as a hex string.
flags number as string no "0" Sum of the values from the table “Flags of a box”.
ratingmode number as string no "0" Rating of the box: 0 off, 1 Assessment (good / medium / bad), 2 Answer (yes / maybe / no), 3 Voting (option A / B / C). Other values become 0.
position string or null no null Sticker Wall only: position "x y" in pixels, for example "120 80", at most 12 characters. No effect in the other views.
visiblefrom string or null no null (visible right away) From this point in time the box is visible, not before. Format and time zone as for the column. The date, the hour and the minutes are kept, seconds are dropped. If the time is outside 0 to 23 hours or 0 to 59 minutes, only the date stays (midnight).
visibleuntil string or null no null (visible without end) Until this point in time the box is visible, not after. Format as for visiblefrom. Both fields together make a time window. If visiblefrom lies after visibleuntil, the box is never visible.
extras string or null no null The export writes the field, the import ignores it.

The values 8192, 16384 and 32768, together with visiblefrom and visibleuntil, correspond to the option “Visibility in map view” in the box editor: whoever only views the map never sees a hidden box or its hidden content, editors still see both in edit mode. The value 2097152 (“Hide from students in edit mode”) additionally hides the box in edit mode, but only for students.

Flags of a box Meaning
1comments switched on
4box collapsed
8box title in black
16box filled with its color
32box locked for other editors
64box title hidden
128likes switched on (heart)
8192Hide box (in map view)
16384Hide box content (in map view)
32768Display box title in view: until the time in visiblefrom only the box title is visible
65536content preview on a collapsed box
2097152Hide from students in edit mode
16777216white text on a filled box

Files of format version 1 may still carry the old values 2, 256 and 512 for the rating, they are still imported. Older files (version 1) have one field showdate instead of visiblefrom and visibleuntil and are still imported: without the value 1048576 in flags it is taken as visiblefrom, with 1048576 as visibleuntil.

Further values belong to calendars and bookings (4096, 131072, 524288). Only take them over from an export file. All other values, for example for sales, course progress and the full lock, are removed on import.

The value 32768 only works before the time in visiblefrom. After visibleuntil a box is always hidden completely.

Example: the box is visible until Friday, 18 December 2026, 7 a.m., with the note “Visible until …”. After that it disappears completely for viewers. A date without a time means midnight at the start of that day: with "2026-12-31" the box is already gone on 31 December, if it should stay visible throughout 31 December, write "2027-01-01".

"flags": "0",
"visibleuntil": "2026-12-18 07:00:00"

Arrows (arrows)

Arrows can only be added in the Sticker Wall map format (mapformat 2). Their position refers to the whole map, not to a box or column. On the Pinboard, boxes and columns shift dynamically, an arrow would stay in its old place and point at the wrong content. If arrows or labels are in a file with a different mapformat, they are still imported and shown at their position, but none can be added there and they can shift out of place. More on this in the frequently asked questions.

Field Type Required Default on import Meaning
position string no "0~0~50~50" Start point and end point in pixels as "x1~y1~x2~y2", for example "100~200~300~200". The arrowhead points to the end point. "100 200 300 200" and "100,200,300,200" are accepted too.
color string no "#0000ff" Color as a hex string.
flags number as string no "0" 0 arrow, 1 line without a head, 2 double arrow. Other values become 0.

Text fields (labels)

Like arrows, text fields can only be added in the Sticker Wall map format (mapformat 2), their position refers to the whole map.

Field Type Required Default on import Meaning
position string no "0~0~50~50" Anchor point and direction in pixels as "x1~y1~x2~y2". Equal y values give a horizontal text field, for example "100~200~300~200". "100 200 300 200" and "100,200,300,200" are accepted too.
color string no "#ffff9c" Background color as a hex string.
content string no empty Text, at most 1000 characters. Line breaks as \n, links as {link text}{https://...}. HTML is shown as visible text.
width number as string no "0" Width in pixels. Only effective for text fields with an image, a text field without an image takes its width from the text. Allowed are 0 to 10000, other values become 0.
locked number as string no "0" 1 text field locked, 0 unlocked. Other values become 0.

Box content: the Edumaps text format (Markdown-like)

The content of a box is plain text in the Edumaps text format (Markdown-like), a format of its own with its own rules. A blank line separates paragraphs, consecutive lines are joined with a line break.

HTML is not executed. Tags such as <p>, <ul> or <a href=...> appear in the box as visible text. Only the Edumaps tags from the table are kept, as a block like <check> and within the text like <small>, written exactly like this (lowercase) and without attributes.

Syntax Result
# Title, ## Title, ### Titleheading in three sizes (there is no fourth level)
**bold**, *italic*bold, italic
~~struck~~, ==marked==struck through, highlighted
<s>text</s>, <u>text</u>struck through, underlined
<small>text</small>, <big>text</big>, <tiny>text</tiny>smaller, larger, very small text
- itembullet list, one item per line
-- itemnumbered list, one item per line, the numbers are added automatically
1. itemno list, stays plain text (so that dates such as “5. Mai” do not become a list). With a space at the start of the line before the number you get a list with exactly these numbers.
> textquote
>>> ... <<<quote over several lines
?? Textcollapsible solution: the whole paragraph up to the next blank line is hidden and appears after a click, >! Text works the same. With ??? Text it is hidden again after a few seconds (for example for flashcards).
---horizontal line
A --> B (with spaces)arrow →
`code`code within the text
``` alone on a line, the code lines below it, then ``` againcode block, the content is not formatted
|| A | B | Ctable row, one line per row. ||| A | B is a header row.
{link text}{https://...}link with its own text, opens in a new tab by default, unless the map setting says otherwise
{#link text}{https://...}link as a button
link as the first word of a paragraphpreview image, the rest of the text becomes the caption
link to an Edumaps file as the first word of a paragraphImage directly in the box. Video with a preview image, plays in an overlay after a click (on smartphones and tablets in a new tab). PDF with a preview image, opens in a new tab after a click. Audio as a speaker icon, after a click with a player bar in the box.
#topickeyword (tag) in the box text that the boxes of the map can be filtered by, independent of the keywords of the map in tags
// notenote that only editors see
!#name and {link text}{!#name}anchor and link to it
{text}{#F00}colored text, hex color with exactly 3 or 6 digits (unlike the color fields)
$$ a^2+b^2=c^2 $$formula as a block of its own (LaTeX)
\( a^2 \)formula within the text (LaTeX). In the JSON file the backslash is doubled: \\( a^2 \\)
<check> ... </check>checklist to tick off, one entry per line
<check-yesno>
Homework done
</check-yesno>
checklist where each entry is answered with yes or no. The closing tag repeats the opening one.
<poll> ... </poll>poll with multiple choice, one option per line. <poll1> ... </poll1> allows only one choice, with -hide (<poll-hide>) participants do not see the results.
<quiz> ... </quiz>quiz question, one answer per line, the correct answer starts with #. Here the # only marks the correct answer, it is not a tag. <quiz1> works the same.
<audio-de>text</audio>text with a read-aloud button in the language of the code (de, en ...). With !text only the button, with !!text the button and the text as a click-to-reveal solution.
<test1-en> ... </test1> (up to test7)language exercise (hear and click words, translate, match pairs, fill in the gaps), as the AI module for language courses creates it. It is best to copy the structure from an exported language course map.

The blocks <check>, <check-yesno>, <poll>, <quiz> and <test…> start with the opening tag on a line of its own and end with the closing tag on a line of its own. There is one blank line before the opening tag and one after the closing tag, none in between. A box holds at most one <quiz> block and at most one <poll…> or <check…> block, because answers are stored by the position of the options. For several quiz questions, use one box per question. If a box holds more, the import rejects the whole map and names every affected box. Not supported are tables in the form | A | B |, headings with ####, embedded videos from other websites (iframe, a YouTube link becomes a preview image) and your own HTML. Video files uploaded to Edumaps, on the other hand, appear as a preview image in the box and play in an overlay after a click.

Files

Every link to an Edumaps file in the JSON file is copied into the importing account on import, regardless of whether the file comes from the same server or from another Edumaps server and of who owns it. The link then points to the copy, and the copy uses storage of that account. There is no option to keep the original links on import. All other links stay links. If a copy fails, the original link remains.

What is not transferred

  • Passwords of the map, the columns and the boxes, and all access codes. The imported map gets new codes.
  • Publishing, lock and delete protection of the map. The imported map is unpublished and belongs to the importing account.
  • Comments, ratings and likes, calendar entries and bookings, shares and folders, the history of changes.
  • The field extras of the boxes.
  • An export through a read link contains no hidden columns and boxes, no content of protected boxes and no notes with //. Embedded boxes and columns appear in the export as a copy.

Limits on import

  • Maximum size of the JSON import file: 2 MB.
  • At most 5 JSON imports per minute per account.
  • Every import creates a new map and counts toward the map limit of your plan.
  • The storage of the account must not be full.
  • More than 100 columns: the import is refused.
  • At most 500 boxes, 300 arrows and 300 text fields, as in the editor. Anything above is left out, the message after the import names the number.
  • Text lengths: see the tables above.

Creating maps with an AI assistant

  1. Create a small sample map in Edumaps, with columns and boxes the way you picture them.
  2. Export this map as a JSON file.
  3. Give the file to the assistant (for example Claude or ChatGPT) as a template, together with this instruction:
Create an Edumaps map as a valid JSON file. Use the attached export file as the template for structure and settings and follow the fields and rules at https://www.edumaps.de/docs/json. Leave out fields that are not documented there.
Rules:
- The file starts with "formatversion": 2 and "format", followed by "mapdata" and "paths". Use only the documented keys, "arrows" and "labels" only if arrows or text fields are wanted, and only with "mapformat": "2" (Sticker Wall).
- Each column goes into "paths", each box into "boxes" of its column.
- Write numbers and flags as strings, for example "flags": "0". Only "formatversion" is the number 2 without quotes.
- Rating of a box with "ratingmode": "0" off, "1" good / medium / bad, "2" yes / maybe / no, "3" option A / B / C. Width of a column with "widthmode": "0" normal, "1" wide, "2" double width.
- Write out all fields of the template, empty ones as null (the import also accepts missing fields).
- Box content in the Edumaps text format (Markdown-like): **bold**, bullet lists with "- ", a blank line between paragraphs, headings with "# ", "## " or "### ".
- No HTML: HTML tags appear in Edumaps as visible text.
- Numbered lists with "-- " at the start of the line. A line that starts with "1." stays plain text.
- Write links as {link text}{https://...}.
- Separate the keywords in "tags" with spaces, no commas, no space inside a keyword.
- If you can create files, offer a UTF-8 file named edumaps-map.json for download, otherwise output the JSON as text. The JSON must be syntactically valid, without explanations.
Content of the map: (describe here what the map should contain)
  1. Upload the finished file under “Import Edumaps file”.

Further information

You open the JSON import on the page “Import Edumaps file” or in the sidebar via “Create Map” → “Import” → “Import Edumaps file”. The import requires a login and always creates a new map, it never overwrites an existing one. The export file of a map comes from the export menu of the map.

Export files can contain personal data, for example in box titles, box contents or notes. Check the file before you upload it to an external AI service.

Which other interfaces Edumaps offers is explained in the frequently asked questions.