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

# API documentation

> Upload meeting and call recordings from your system and get back a protocol and a transcript.

AiGenda turns a meeting recording into a protocol: what was agreed, who owns what, and who said what. The API does the same thing as the web cabinet, but from your own system: you upload a recording, start processing, and fetch the result.

| | |
| - | - |
| Base URL | `https://api.aigenda.tech` |
| Format | JSON, UTF-8 encoding |
| Authorization | JWT in the `Authorization: Bearer <access>` header |
| Time and duration | Dates in ISO 8601 with a time zone offset (`+03:00`), duration and plan minutes in seconds |

## How a recording flows through the API

<div className="not-prose my-6 rounded-2xl border border-gray-200 bg-white dark:border-white/10 dark:bg-white/5">
  <div className="flex items-start gap-4 px-5 py-4">
    <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white" style={{ background: "linear-gradient(135deg, #9FB6FF, #7C86F0)" }}>1</div>

    <div className="min-w-0 flex-1">
      <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5">
        <div className="text-sm font-semibold text-gray-900 dark:text-gray-100">Token</div>
        <div className="shrink-0 rounded-md bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-primary dark:bg-white/10 dark:text-primary-light">POST /api/token/</div>
      </div>

      <div className="mt-1 text-sm leading-6 text-gray-600 dark:text-gray-400">Sign in with your AiGenda email and password</div>
    </div>
  </div>

  <div className="flex items-start gap-4 px-5 py-4 border-t border-gray-100 dark:border-white/5">
    <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white" style={{ background: "linear-gradient(135deg, #9FB6FF, #7C86F0)" }}>2</div>

    <div className="min-w-0 flex-1">
      <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5">
        <div className="text-sm font-semibold text-gray-900 dark:text-gray-100">Space</div>
        <div className="shrink-0 rounded-md bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-primary dark:bg-white/10 dark:text-primary-light">GET /api/spaces/</div>
      </div>

      <div className="mt-1 text-sm leading-6 text-gray-600 dark:text-gray-400">Pick where recordings live and whose plan pays for the minutes</div>
    </div>
  </div>

  <div className="flex items-start gap-4 px-5 py-4 border-t border-gray-100 dark:border-white/5">
    <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white" style={{ background: "linear-gradient(135deg, #9FB6FF, #7C86F0)" }}>3</div>

    <div className="min-w-0 flex-1">
      <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5">
        <div className="text-sm font-semibold text-gray-900 dark:text-gray-100">Upload</div>
        <div className="shrink-0 rounded-md bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-primary dark:bg-white/10 dark:text-primary-light">POST …/audio/</div>
      </div>

      <div className="mt-1 text-sm leading-6 text-gray-600 dark:text-gray-400">As a file, by URL, from YouTube, or with a meeting bot</div>
    </div>
  </div>

  <div className="flex items-start gap-4 px-5 py-4 border-t border-gray-100 dark:border-white/5">
    <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white" style={{ background: "linear-gradient(135deg, #9FB6FF, #7C86F0)" }}>4</div>

    <div className="min-w-0 flex-1">
      <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5">
        <div className="text-sm font-semibold text-gray-900 dark:text-gray-100">Processing</div>
        <div className="shrink-0 rounded-md bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-primary dark:bg-white/10 dark:text-primary-light">POST /api/audio/classify/</div>
      </div>

      <div className="mt-1 text-sm leading-6 text-gray-600 dark:text-gray-400">Start it and poll the status</div>
    </div>
  </div>

  <div className="flex items-start gap-4 px-5 py-4 border-t border-gray-100 dark:border-white/5">
    <div className="flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white" style={{ background: "linear-gradient(135deg, #9FB6FF, #7C86F0)" }}>5</div>

    <div className="min-w-0 flex-1">
      <div className="flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5">
        <div className="text-sm font-semibold text-gray-900 dark:text-gray-100">Result</div>
        <div className="shrink-0 rounded-md bg-gray-100 px-1.5 py-0.5 font-mono text-xs text-primary dark:bg-white/10 dark:text-primary-light">GET …/result/</div>
      </div>

      <div className="mt-1 text-sm leading-6 text-gray-600 dark:text-gray-400">Markdown protocol, utterance-level transcript, source file</div>
    </div>
  </div>
</div>

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/en/quickstart">
    Your first protocol in six curl requests.
  </Card>

  <Card title="Upload methods" icon="upload" href="/en/upload/overview">
    File, URL, YouTube, or a meeting bot.
  </Card>

  <Card title="Result structure" icon="file-text" href="/en/processing/result">
    What the protocol and transcript contain.
  </Card>

  <Card title="Full example" icon="code" href="/en/reference/full-example">
    A Python script from sign-in to the finished protocol.
  </Card>
</CardGroup>

## What you need

* **An AiGenda account with a password.** If you sign in to the cabinet with Google, set a password on the [password recovery](https://personal.aigenda.tech/ru/recovery-password) page.
* **Minutes on your plan.** Processing charges minutes by recording length. You can see the balance in the cabinet and in the API, see [Spaces and minutes](/en/spaces).

<Tip>
  Create a separate account for the integration and invite it to the space you need. The integration then doesn't depend on one employee's password, and recordings from the API are easy to tell apart in the cabinet.
</Tip>

<Note>
  Building the integration with an AI agent? Give it the [full documentation in one file](https://docs.aigenda.tech/llms-full.txt) and the ready-made prompt from [Integrating with an AI agent](/en/reference/ai-agents).
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.