API Reference

Authentication

All API endpoints require session authentication. You must be logged in via the web interface, or send the session cookie with your requests.

For programmatic access, authenticate first:

# Login and save cookies
curl -c cookies.txt -X POST https://your-yando-instance/accounts/login/ \
  -d "[email protected]&password=yourpassword" \
  -H "Referer: https://your-yando-instance/"

Then include -b cookies.txt in subsequent requests.

Rate Limiting

API endpoints are rate-limited per user. If you exceed the rate limit, you'll receive a 429 response.


POST /api/boards/import/

Create a new board from exported JSON data.

Request

Accepts two content types:

JSON body (application/json):

curl -b cookies.txt -X POST https://your-yando-instance/api/boards/import/ \
  -H "Content-Type: application/json" \
  -H "X-CSRFToken: <token>" \
  -d @board-export.json

File upload (multipart/form-data):

curl -b cookies.txt -X POST https://your-yando-instance/api/boards/import/ \
  -H "X-CSRFToken: <token>" \
  -F "[email protected]"

Query Parameters

Parameter Type Description
template string Template name or UUID to override the JSON template
title string Override the board title from the JSON
description string Override the board description

Response (201 Created)

{
  "id": "a1b2c3d4-...",
  "title": "My Board",
  "description": "Board description",
  "template": "Business Model Canvas",
  "object_count": 15,
  "url": "/boards/a1b2c3d4-.../"
}

Errors

Status Description
400 Invalid JSON, validation error, or missing required fields
403 Authentication required

POST /api/boards/{board_id}/resize/

Resize a board's canvas dimensions.

Request

curl -b cookies.txt -X POST \
  https://your-yando-instance/api/boards/{board_id}/resize/ \
  -H "Content-Type: application/json" \
  -H "X-CSRFToken: <token>" \
  -d '{"width": 4000, "height": 2400}'

Response (200 OK)

{
  "id": "a1b2c3d4-...",
  "canvas_width": 4000,
  "canvas_height": 2400
}

GET /api/boards/{board_id}/snapshots/

List all snapshots for a board, ordered by creation date (newest first).

Request

curl -b cookies.txt \
  https://your-yando-instance/api/boards/{board_id}/snapshots/

Response (200 OK)

[
  {
    "id": "s1n2a3p4-...",
    "created_at": "2026-02-21T08:00:00Z",
    "object_count": 24,
    "board_version": 15,
    "change_summary": {
      "added": {"sticky_note": 2},
      "edited": {"text_box": 1},
      "deleted": {}
    }
  }
]

GET /api/boards/{board_id}/snapshots/{snapshot_id}/

Retrieve a single snapshot's full data.

Request

curl -b cookies.txt \
  https://your-yando-instance/api/boards/{board_id}/snapshots/{snapshot_id}/

Response (200 OK)

Returns the full snapshot including snapshot_data containing the complete board state at that point in time.


POST /api/projects/{project_id}/pages/import/

Import markdown files as project pages.

Request

Upload one or more .md or .markdown files:

curl -b cookies.txt -X POST \
  https://your-yando-instance/api/projects/{project_id}/pages/import/ \
  -H "X-CSRFToken: <token>" \
  -F "[email protected]" \
  -F "[email protected]"

Response (201 Created)

{
  "pages_created": 2,
  "pages": [
    {
      "id": "p1a2g3e4-...",
      "title": "Notes",
      "url": "/projects/.../pages/p1a2g3e4-.../"
    }
  ],
  "errors": []
}

Status Codes

Status Description
201 All files imported successfully
207 Partial success - some files imported, some had errors
400 No files provided or all files failed
403 Not an owner or editor of the project
404 Project not found

JSON Export Schema Reference

When exporting a board to JSON, the structure is:

{
  "board": {
    "title": "Board Title",
    "description": "Optional description",
    "template": "Template Name or null",
    "canvas_width": 3200,
    "canvas_height": 1800
  },
  "zones": {
    "Zone Name": [
      {
        "type": "sticky_note",
        "x": 100,
        "y": 200,
        "width": 200,
        "height": 150,
        "rotation": 0,
        "data": {
          "text": "Content here",
          "color": "#FFEB3B"
        }
      }
    ]
  },
  "unzoned_objects": [
    {
      "type": "text_box",
      "x": 500,
      "y": 100,
      "width": 300,
      "height": 50,
      "data": {
        "text": "Unzoned text"
      }
    }
  ]
}

Object Types

Type Data Fields
sticky_note text, color
text_box text, fontSize, fontWeight
shape shapeType (rectangle, circle, triangle, line), fill, stroke