# Squiggler > Synthetic ECG tracings for education. An HTTP API draws a rhythm strip or a twelve-lead from a JSON description of the heart, and can tell you in JSON what a description will draw before it draws it. Every tracing is generated. Not a medical device, and not for clinical use. The API is at https://squiggler-api.fly.dev, not under www.squiggler.io. Every request needs a key in the `x-api-key` header. Keys are issued by Squiggler: write to inquiry@squiggler.io. If you do not have a key, ask the person you are working for; do not ask them to paste it into the conversation. ## For people - [FAQ](https://www.squiggler.io/faq): What Squiggler is, who it is for, how the tracings may be used, the download formats, plans and the API. - [ECG studio](https://www.squiggler.io/studio): Build any tracing in the browser, free to use. - [ECG examples](https://www.squiggler.io/ecg): Example tracings by finding, each openable in the studio. ## Start here - [Guide for agents](https://squiggler-api.fly.dev/v1/ecg/guide): Markdown. How to write a spec: every field with its unit and range, which leads each ST and T change moves, ready specs for common tracings, and the rules that are easy to get wrong. Needs a key. - [API reference](https://www.squiggler.io/apidocs/): Endpoints, spec and envelope fields, credit lines and logos, errors, rate limits, seeds and versioning. No key needed. ## The loop 1. `GET /v1/ecg/guide` once. 2. Write a spec. Start from the nearest entry in `recipes` in `GET /v1/ecg/vocabulary`. 3. `POST /v1/ecg/check` with the spec. A 400 lists each problem with a hint; fix it and check again. A 200 gives the rhythm's name, the rates and the ST level in every lead: compare them with what you meant. 4. Show it. `POST /v1/ecg/render` with the same body answers a PNG, or SVG with `accept: image/svg+xml`. If you cannot pass an image to the person you are working for, `POST /v1/ecg/link` with the same body answers `{ "url": … }`, a studio link that opens the tracing. All these paths are relative to https://squiggler-api.fly.dev. ## Set up - [Claude skill](https://www.squiggler.io/apidocs/squiggler-ecg-skill.zip): a zip to add as a skill in Claude Code, the Agent SDK or Claude.ai. [Read it](https://www.squiggler.io/apidocs/squiggler-ecg/SKILL.md). - [OpenAPI file](https://www.squiggler.io/apidocs/openapi.json): every route, for a custom GPT's actions or any tool that imports OpenAPI. The key goes in the `x-api-key` header. ## Optional - [Vocabulary](https://squiggler-api.fly.dev/v1/ecg/vocabulary): JSON. Everything the API accepts, including `fields`, `stInjury`, `tInversion` and `recipes`. Needs a key.