---
title: "Save an owned native document at an expected content hash"
method: PUT
path: "/diagrams/{id}"
---

# Save an owned native document at an expected content hash

`PUT /diagrams/{id}`

## Request

- Base URL: `https://flowchartai.org/api/v1`
- URL: `https://flowchartai.org/api/v1/diagrams/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `title` string, required
  - `document` NativeDocument, required
    - `editorKind` 'drawio', required
    - `formatVersion` unknown, required
    - `documentId` string, required
    - `revision` integer, required
    - `diagramType` string, required
    - `pageId` string
    - `xml` string, required: Valid uncompressed mxGraphModel/mxfile XML. Maximum 2 MB / 2,000 objects. No external entities.
  - `expected_version` string, required

## Response `200`

Successful response

- Task
  - `id` string, uuid, required
  - `state` 'running' | 'prepared' | 'succeeded' | 'failed', required
  - `operation` 'generate' | 'edit' | 'save', required
  - `diagram_id` string, required
  - `budget_credits` integer, required: Accepted task estimate, retained after settlement.
  - `reserved_credits` integer, required
  - `charged_credits` integer, required
  - `diagram` Diagram
    - `id` string, required
    - `title` string, required
    - `version` string, required: Digest of the saved title and content, including website changes.
    - `format` 'drawio' | 'legacy'
    - `document` object: Included on reads; native document or original legacy JSON.
    - `open_url` string, uri, required
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `error` object
    - `code` string
    - `message` string
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `401`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `402`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `403`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `404`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `409`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `413`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `422`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `429`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `502`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.
- `503`: Invalid request, credentials, ownership, allowance, conflict, budget, or unavailable upstream. A 429 response includes Retry-After.

---

[API](https://skmtc.dev/flowchartai/apis/flowchartai-developer-api.md) · [All operations](https://skmtc.dev/flowchartai/apis/flowchartai-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flowchartai/apis/flowchartai-developer-api/revisions/914d81b5d394?raw)
