> ## Documentation Index
> Fetch the complete documentation index at: https://docs.magicmealkits.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tiro

> Upload audio and manage Tiro meeting notes — transcripts, summaries, threads, webhooks, and API keys.

The Tiro group powers the **티로 Tiro (Magic Meal Kits)** Make.com app. Upload audio for
AI transcription, then read transcripts and summaries, organize notes into threads,
subscribe to events via webhooks, and manage Tiro API keys. All routes are under
`/api/v1/tiro` and authenticate with the `X-API-KEY` header only (see
[Authentication](/authentication)). Your Tiro token is set once on the connection page in
the Magic Meal Kits app and resolved server-side, so no per-request token header is
needed.

<Note>
  **Every Tiro endpoint requires a Pro license.** A Basic key is rejected with `400`
  `you are not a magic meal kits PRO user`. A missing/invalid Tiro token returns `401`.
</Note>

<Info>
  This documents the **MMK-proxy** Tiro app (it calls your Magic Meal Kits server). A
  separate official-API-direct Tiro app talks to `api.tiro.ooo` directly and is **not**
  covered here.
</Info>

## Endpoints

| Endpoint                                | Tier    | What it does                                              |
| --------------------------------------- | ------- | --------------------------------------------------------- |
| `POST /tiro/upload`                     | **Pro** | Upload an audio file (multipart) for transcription        |
| `POST /tiro/upload-from-url`            | **Pro** | Transcribe audio from an external URL (e.g. Google Drive) |
| `POST /tiro/notes`                      | **Pro** | Create a meeting note                                     |
| `GET /tiro/notes/{note_id}`             | **Pro** | Get note status & metadata                                |
| `PUT /tiro/notes/{note_id}`             | **Pro** | Replace note settings                                     |
| `PATCH /tiro/notes/{note_id}`           | **Pro** | Partially update a note                                   |
| `DELETE /tiro/notes/{note_id}`          | **Pro** | Delete a note                                             |
| `GET /tiro/notes/{note_id}/transcripts` | **Pro** | Raw / refined / translated transcripts                    |
| `GET /tiro/notes/{note_id}/summaries`   | **Pro** | Summaries keyed by template                               |
| `GET /tiro/threads`                     | **Pro** | List threads (folders)                                    |
| `GET /tiro/locales`                     | **Pro** | Supported locales                                         |
| `GET\|POST /tiro/webhooks`              | **Pro** | List / create webhooks                                    |
| `PATCH\|DELETE /tiro/webhooks/{id}`     | **Pro** | Update / delete a webhook                                 |
| `GET /tiro/webhook-event-types`         | **Pro** | Available webhook event types                             |
| `GET\|POST /tiro/api-keys`              | **Pro** | List / create Tiro API keys                               |
| `DELETE /tiro/api-keys/{id}`            | **Pro** | Delete a Tiro API key                                     |

## Notes

* **Auth applies to every route.** All `/api/v1/tiro` routes run the Tiro auth middleware,
  so a Tiro connection must be configured (server-side stored token) — `GET /tiro/locales`
  included, even though its handler doesn't use the token.
* **Numeric IDs.** `note_id` and `webhook_id` are numeric — the handlers parse them as
  integers, so a note GUID won't work; use the numeric `note_id`.
* **Locale codes** use the `xx_YY` form, e.g. `en_US`, `ko_KR`, `ja_JP`.
* **Transcription is async.** After an upload, poll `GET /tiro/notes/{note_id}` until
  `is_transcribed` is true, then fetch transcripts/summaries.
* **Threads = folders.** Assign a note to threads at create time (`thread_ids`) or with
  `add_thread_ids` on `PATCH`. Removing a note from a thread via `remove_thread_ids` is
  not yet implemented (the API returns `501`).
* **Use the MMK "Watch … Events" webhooks — don't mix them with other Tiro webhooks.** Each
  webhook encodes how to read values from its specific event type, so create the webhook with
  the Magic Meal Kits **Watch … Events** trigger and use it on its own. Mixing it with a
  webhook created elsewhere in Tiro won't map the event fields correctly.

Use the interactive playground on each endpoint page to try a request with your own
deployment host, API key, and Tiro API key.
