{
  "openapi": "3.1.0",
  "info": {
    "title": "Meetingize API",
    "version": "2026-10-01",
    "description": "Public API of Meetingize: send meeting recordings, get diarized transcripts and AI reports, generate documents, receive webhooks.\n\n## Authentication\n`Authorization: Bearer <api key>`. Keys are created in the webapp (Settings > Developers): `mtgz_live_...`. OAuth 2.1 access tokens (MCP connector) are accepted the same way. Each key has scopes: `read:meetings`, `read:transcripts`, `read:documents`, `write:meetings`, `write:documents`, `webhooks`, `read:usage`.\n\n## Typical flow\n1. `POST /v1/meetings` with the audio file (or `audio_url`): you get the meeting (`queued`) and its `job`.\n2. Wait for the `processing.completed` webhook, or poll `GET /v1/jobs/{job_id}` until `completed`.\n3. Read `GET /v1/meetings/{id}/transcript`, `/summary`, `/export`; generate documents with `POST /v1/meetings/{id}/documents`.\n\n## Rate limits and quotas\n- **Requests:** per credential, sliding window of 60 s: Free 30, Standard 60, Pro 120 requests per minute. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time, end of the current window). Above the limit: `429 rate_limited` with `Retry-After` (seconds).\n- **Parallel processing:** same rule as the webapp: a plan allows N simultaneous processings (meetings + documents, webapp and API together). Above it: `429 parallel_processing_limit` with `Retry-After: 30`. Nothing is queued: retry later.\n- **Billing:** API consumption is debited from the monthly API allowance of your plan, then billed on demand if you set a spend cap; otherwise `402`.\n\n## Errors\nRFC 9457 problem details (`application/problem+json`) with a stable `code` and a `request_id` (also in the `X-Request-Id` header). A resource of another account answers `404`.\n\n## Webhooks\nEvents are POSTed as JSON to your endpoints and signed with HMAC-SHA256: `Meetingize-Signature: t=<unix>,v1=<hex>`, where `v1 = HMAC_SHA256(secret, \"<t>.\" + raw_body)`. Reject if `|now - t| > 300 s`, deduplicate on `Meetingize-Event-Id`. Failed deliveries are retried for 24 h; the payloads are described in the `webhooks` section.\n"
  },
  "paths": {
    "/v1/clients": {
      "get": {
        "operationId": "listClients",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "include_archived",
            "schema": {
              "type": "boolean"
            },
            "description": "Include archived clients."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            },
            "description": "Part of the client name (case-insensitive)."
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientList"
                },
                "examples": {
                  "clients": {
                    "summary": "clients",
                    "value": {
                      "data": [
                        {
                          "id": "cli_12",
                          "object": "client",
                          "name": "Durand SA",
                          "email": "contact@durand.fr",
                          "phone": "+33 1 23 45 67 89",
                          "is_archived": false
                        }
                      ]
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientList"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List clients",
        "description": "Client folders of the account (the webapp \"client\" of a meeting), with optional contact email and phone. Use an `id` as `client_id` when creating or updating a meeting, or `?client=` to filter meetings. Archived clients are hidden unless `include_archived=true`. Required scope: `read:meetings`."
      }
    },
    "/v1/documents": {
      "get": {
        "operationId": "listDocuments",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "description": "Only the documents of this meeting."
          }
        ],
        "tags": [
          "Documents"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentPage"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentPage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List generated documents",
        "description": "Documents generated for your meetings, most recent first. Required scope: `read:documents`."
      }
    },
    "/v1/documents/{document_id}": {
      "get": {
        "operationId": "getDocument",
        "parameters": [
          {
            "in": "path",
            "name": "document_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "docx",
                "json",
                "md",
                "pdf"
              ],
              "default": "json"
            },
            "description": "json (default), md, pdf or docx."
          }
        ],
        "tags": [
          "Documents"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document"
                },
                "examples": {
                  "json": {
                    "summary": "json",
                    "value": {
                      "id": "doc_131",
                      "object": "document",
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "title": "Compte rendu client",
                      "template_id": "tpl_42",
                      "language": "fr",
                      "model": "deepseek-ai/DeepSeek-V3.2",
                      "formats": [
                        "md",
                        "pdf",
                        "docx"
                      ],
                      "markdown": "# Compte rendu client\n\n## Décisions\n\n- Budget T4 validé\n",
                      "created_at": "2026-10-14T09:08:30Z",
                      "updated_at": "2026-10-14T09:08:30Z"
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Document"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get a document",
        "description": "`format=json` (default) returns the metadata and the Markdown; `md` the Markdown file; `pdf` and `docx` a rendered file (generated on first request, then cached). Required scope: `read:documents`."
      }
    },
    "/v1/feedback": {
      "post": {
        "operationId": "sendFeedback",
        "description": "Sends a message to the Meetingize team (same inbox as the in-app feedback button): `bug`, `feature_request`, `question` or `feedback`. Optionally linked to one of your meetings. Any valid credential, no scope required. Not a support ticketing system: no reply through the API.",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Feedback"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackRequestRequest"
              },
              "examples": {
                "Feature_request": {
                  "summary": "Feature request",
                  "value": {
                    "type": "feature_request",
                    "message": "Pourriez-vous ajouter un export vers Notion ?"
                  }
                },
                "Bug_on_a_meeting": {
                  "summary": "Bug on a meeting",
                  "value": {
                    "type": "bug",
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "message": "Le locuteur SPEAKER_02 est attribué à la mauvaise personne."
                  }
                }
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Feedback"
                },
                "examples": {
                  "received": {
                    "summary": "received",
                    "value": {
                      "id": "fb_311",
                      "object": "feedback",
                      "type": "feature_request",
                      "meeting_id": null,
                      "message": "Pourriez-vous ajouter un export vers Notion ?",
                      "status": "received"
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Feedback"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Send feedback, a bug report or a question"
      }
    },
    "/v1/jobs": {
      "get": {
        "operationId": "listJobs",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "kind",
            "schema": {
              "type": "string",
              "enum": [
                "document_generation",
                "meeting_processing"
              ]
            },
            "description": "meeting_processing or document_generation."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string",
              "enum": [
                "canceled",
                "completed",
                "failed",
                "processing",
                "queued"
              ]
            },
            "description": "queued, processing, completed, failed or canceled."
          }
        ],
        "tags": [
          "Jobs"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobPage"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/JobPage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List processing jobs",
        "description": "**What jobs are:** every long operation started through the API (processing of a meeting you created, generation of a document) is tracked by a job. A job tells you where the processing is (`status`, `stage`, `progress`), what it produced (`meeting_id`, `document_id`), what went wrong (`error`) and what it cost (`usage`, once metered).\n\n**Lifecycle:** `queued` -> `processing` -> `completed` | `failed` (`canceled` if the meeting was deleted). A `meeting_processing` job goes through stages `downloading` (audio_url only), `transcribing`, `summarizing` (skipped with transcribe_only), `done`; it is `completed` when the AI report is ready. Documents requested at creation get their own `document_generation` jobs, listed in `document_job_ids` (their `parent_job_id` points back).\n\nUse this list to find what is still running (`?status=processing`) or to reconcile after a missed webhook. Jobs of meetings processed in the webapp are not listed. Any valid credential."
      }
    },
    "/v1/jobs/{job_id}": {
      "get": {
        "operationId": "getJob",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "job_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Jobs"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                },
                "examples": {
                  "processing": {
                    "summary": "processing",
                    "value": {
                      "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                      "object": "job",
                      "kind": "meeting_processing",
                      "status": "processing",
                      "stage": "transcribing",
                      "progress": 0.33,
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "document_id": null,
                      "parent_job_id": null,
                      "transcribe_only": false,
                      "document_templates": [
                        "tpl_42"
                      ],
                      "document_job_ids": [],
                      "error": null,
                      "usage": null,
                      "metadata": {
                        "crm_id": "OPP-1234"
                      },
                      "created_at": "2026-10-14T09:00:02Z",
                      "started_at": "2026-10-14T09:00:03Z",
                      "finished_at": null
                    }
                  },
                  "completed": {
                    "summary": "completed",
                    "value": {
                      "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                      "object": "job",
                      "kind": "meeting_processing",
                      "status": "completed",
                      "stage": "done",
                      "progress": 1,
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "document_id": null,
                      "parent_job_id": null,
                      "transcribe_only": false,
                      "document_templates": [
                        "tpl_42"
                      ],
                      "document_job_ids": [
                        "job_8e8d822e2216426fb59037de6b13643b"
                      ],
                      "error": null,
                      "usage": {
                        "cost_eur": "0.0373",
                        "wallet_eur": "0.0373",
                        "on_demand_eur": "0.0000",
                        "ledger_entry_ids": [
                          "led_0c8616464958428083838",
                          "led_da03e5e9b8d34986b1bf6"
                        ]
                      },
                      "metadata": {
                        "crm_id": "OPP-1234"
                      },
                      "created_at": "2026-10-14T09:00:02Z",
                      "started_at": "2026-10-14T09:00:03Z",
                      "finished_at": "2026-10-14T09:06:40Z"
                    }
                  },
                  "failed": {
                    "summary": "failed",
                    "value": {
                      "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                      "object": "job",
                      "kind": "meeting_processing",
                      "status": "failed",
                      "stage": "transcribing",
                      "progress": null,
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "document_id": null,
                      "parent_job_id": null,
                      "transcribe_only": false,
                      "document_templates": [
                        "tpl_42"
                      ],
                      "document_job_ids": [],
                      "error": {
                        "code": "transcription_failed",
                        "message": "Transcription failed. Check that the file is a valid audio/video recording and retry."
                      },
                      "usage": null,
                      "metadata": {
                        "crm_id": "OPP-1234"
                      },
                      "created_at": "2026-10-14T09:00:02Z",
                      "started_at": null,
                      "finished_at": "2026-10-14T09:01:10Z"
                    }
                  },
                  "document_completed": {
                    "summary": "document completed",
                    "value": {
                      "id": "job_8e8d822e2216426fb59037de6b13643b",
                      "object": "job",
                      "kind": "document_generation",
                      "status": "completed",
                      "stage": "done",
                      "progress": 1,
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "document_id": "doc_131",
                      "parent_job_id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                      "transcribe_only": null,
                      "document_templates": null,
                      "document_job_ids": null,
                      "error": null,
                      "usage": {
                        "cost_eur": "0.0023",
                        "wallet_eur": "0.0023",
                        "on_demand_eur": "0.0000",
                        "ledger_entry_ids": [
                          "led_27613475c7eb4438aaaf1"
                        ]
                      },
                      "metadata": null,
                      "created_at": "2026-10-14T09:06:41Z",
                      "started_at": "2026-10-14T09:06:42Z",
                      "finished_at": "2026-10-14T09:08:30Z"
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get a job (poll this)",
        "description": "Current state of a job. Poll every 10 to 30 seconds until `status` is `completed` or `failed` (or use webhooks instead of polling). On `completed`: for a meeting, read `GET /meetings/{meeting_id}` (and its transcript/summary); for a document, `GET /documents/{document_id}`. Any valid credential."
      }
    },
    "/v1/me": {
      "get": {
        "operationId": "getMe",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Account"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Who am I",
        "description": "Useful to check a key. No scope required."
      }
    },
    "/v1/meetings": {
      "get": {
        "operationId": "listMeetings",
        "parameters": [
          {
            "in": "query",
            "name": "client",
            "schema": {
              "type": "string"
            },
            "description": "Client: id (`cli_12`) or exact name."
          },
          {
            "in": "query",
            "name": "created_after",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Meetings created (uploaded) at or after this date (ISO 8601)."
          },
          {
            "in": "query",
            "name": "created_before",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Meetings created (uploaded) before this date (ISO 8601)."
          },
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor: the `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            },
            "description": "Page size, 1 to 100 (default 20)."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            },
            "description": "Text to search in title, AI report and transcript (case-insensitive). Example: `budget T4`."
          },
          {
            "in": "query",
            "name": "recorded_after",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Meetings that took place at or after this date (ISO 8601)."
          },
          {
            "in": "query",
            "name": "recorded_before",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Meetings that took place before this date (ISO 8601)."
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string",
              "enum": [
                "completed",
                "draft",
                "failed",
                "processing",
                "queued"
              ]
            },
            "description": "queued, processing, completed, failed or draft."
          },
          {
            "in": "query",
            "name": "tag",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Tag name; repeat the parameter to require several tags (`?tag=client-x&tag=urgent`)."
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingPage"
                },
                "examples": {
                  "page": {
                    "summary": "page",
                    "value": {
                      "data": [
                        {
                          "id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                          "object": "meeting",
                          "title": "Revue trimestrielle client Durand",
                          "status": "completed",
                          "transcribe_only": false,
                          "recorded_at": "2026-10-14T08:30:00Z",
                          "created_at": "2026-10-14T09:00:02Z",
                          "updated_at": "2026-10-14T09:06:40Z",
                          "duration_seconds": 3412,
                          "language": "fr",
                          "source": "api",
                          "recording_type": "meeting",
                          "tags": [
                            "client-durand",
                            "revue"
                          ],
                          "client": {
                            "id": "cli_12",
                            "object": "client",
                            "name": "Durand SA",
                            "email": "contact@durand.fr",
                            "phone": "+33 1 23 45 67 89",
                            "is_archived": false
                          },
                          "has_transcript": true,
                          "has_summary": true,
                          "web_url": "https://app.meetingize.com/meeting/detail?uuid=5f1ecb29-94a1-4280-85d7-58281ce689e5"
                        }
                      ],
                      "has_more": true,
                      "next_cursor": "cD0yMDI2LTEwLTE0KzA5JTNBMDAlM0EwMi4xMjM0NTY"
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingPage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List and search meetings",
        "description": "Lists the meetings of the account, most recent first, with cursor pagination (`limit`, `cursor`).\n\n`q` is a case-insensitive full-text search on the title, the AI report and the transcript. Filters can be combined (AND). `status` is computed, so filtering on it only scans the 500 most recent meetings.\n\nOnly meetings owned by the account are returned (not those shared with it). Required scope: `read:meetings`."
      },
      "post": {
        "operationId": "createMeeting",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Optional unique key (max 255 characters, a UUID v4 is recommended) that makes the request safe to retry. If a network error leaves you unsure whether the request was received, send it again with the **same key**: if it was already processed, you get the original response again (header `Idempotent-Replayed: true`) and nothing is created twice (no duplicate meeting, no double billing). Keys are kept **24 hours** per account. Same key with a different body: `422 idempotency_key_reused`; same key while the first request is still being processed: `409 idempotency_key_in_use`. Example: `Idempotency-Key: 6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70`.",
            "example": "6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70"
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Meeting management"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/MeetingCreateMultipartRequest"
              },
              "examples": {
                "Upload_a_file": {
                  "summary": "Upload a file",
                  "value": {
                    "file": "(binary) rdv-durand.m4a",
                    "title": "Revue trimestrielle client Durand",
                    "recorded_at": "2026-10-14T08:30:00Z",
                    "language": "fr",
                    "tags": "client-durand,revue",
                    "client_id": "cli_12",
                    "participants": "[{\"name\": \"Alice Martin\", \"email\": \"alice.martin@client.fr\"}]",
                    "document_templates": "tpl_42",
                    "metadata": "{\"crm_id\": \"OPP-1234\"}"
                  }
                }
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MeetingCreateJsonRequest"
              },
              "examples": {
                "From_a_URL_with_a_document": {
                  "summary": "From a URL with a document",
                  "value": {
                    "audio_url": "https://storage.example.com/recordings/rdv-durand.m4a",
                    "title": "Revue trimestrielle client Durand",
                    "recorded_at": "2026-10-14T08:30:00Z",
                    "tags": [
                      "client-durand",
                      "revue"
                    ],
                    "client": {
                      "name": "Durand SA",
                      "email": "contact@durand.fr"
                    },
                    "participants": [
                      {
                        "name": "Alice Martin",
                        "email": "alice.martin@client.fr"
                      }
                    ],
                    "document_templates": [
                      "tpl_42"
                    ],
                    "metadata": {
                      "crm_id": "OPP-1234"
                    }
                  }
                },
                "Transcription_only": {
                  "summary": "Transcription only",
                  "value": {
                    "audio_url": "https://storage.example.com/recordings/dictee.mp3",
                    "recording_type": "solo",
                    "transcribe_only": true
                  }
                }
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingCreated"
                },
                "examples": {
                  "created": {
                    "summary": "created",
                    "value": {
                      "id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "object": "meeting",
                      "title": "Revue trimestrielle client Durand",
                      "status": "queued",
                      "transcribe_only": false,
                      "recorded_at": "2026-10-14T08:30:00Z",
                      "created_at": "2026-10-14T09:00:02Z",
                      "updated_at": "2026-10-14T09:00:02Z",
                      "duration_seconds": null,
                      "language": "fr",
                      "source": "api",
                      "recording_type": "meeting",
                      "tags": [
                        "client-durand",
                        "revue"
                      ],
                      "client": {
                        "id": "cli_12",
                        "object": "client",
                        "name": "Durand SA",
                        "email": "contact@durand.fr",
                        "phone": "+33 1 23 45 67 89",
                        "is_archived": false
                      },
                      "has_transcript": false,
                      "has_summary": false,
                      "web_url": "https://app.meetingize.com/meeting/detail?uuid=5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "summary": null,
                      "documents": [],
                      "participants": [
                        {
                          "id": "par_812",
                          "name": "Alice Martin",
                          "email": "alice.martin@client.fr",
                          "speaker_labels": [],
                          "is_participant": true
                        }
                      ],
                      "job": {
                        "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                        "object": "job",
                        "kind": "meeting_processing",
                        "status": "queued",
                        "stage": "queued",
                        "progress": null,
                        "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                        "document_id": null,
                        "parent_job_id": null,
                        "transcribe_only": false,
                        "document_templates": [
                          "tpl_42"
                        ],
                        "document_job_ids": [],
                        "error": null,
                        "usage": null,
                        "metadata": {
                          "crm_id": "OPP-1234"
                        },
                        "created_at": "2026-10-14T09:00:02Z",
                        "started_at": null,
                        "finished_at": null
                      }
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingCreated"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "402": {
            "description": "Insufficient balance or spend cap reached",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Create a meeting from an audio file or URL",
        "description": "Creates a meeting and starts its processing: transcription with speaker diarization, then the AI meeting report (summary, action items...), then the documents you asked for. This is the only way to send audio to Meetingize.\n\n**Input:** either `multipart/form-data` with `file` (max 2 GB), or `application/json` with `audio_url` (public https URL, downloaded by Meetingize). In multipart, `tags`, `participants`, `document_templates` and `metadata` are JSON strings (tags and templates also accept comma-separated lists).\n\n**Options:** `title`, `recorded_at` (meeting date), `language` (default auto-detect), `recording_type` (`meeting` = several speakers, `solo` = dictation), `participants` (names/emails, optionally with the speaker labels they correspond to; never emailed), `tags`, `document_templates` (up to 5 `tpl_` ids, generated automatically after the report) or `persona` (its templates, max 5), `metadata` (your JSON, echoed in jobs and webhooks).\n\n**Client:** attach the meeting to a client folder (same as the webapp client column) with `client_id` (`cli_...`, see `GET /clients`) or `client: {name, email, phone}` (an existing client with this name is reused, otherwise it is created; email/phone optional). Changeable with PATCH, filterable with `GET /meetings?client=`.\n\n**`transcribe_only: true`:** only the transcript is produced (no AI report, no documents, cheaper). The meeting is `completed` as soon as the transcript is ready.\n\n**Response (202):** the created meeting (`status: queued`) with its `job`. Then either poll `GET /jobs/{job.id}` (or `GET /meetings/{id}`) every 10 to 30 seconds, or wait for the webhooks: `transcription.completed` (transcript readable), then `processing.completed` (report ready, or end of a transcribe_only processing), and `document.generated` for each requested document. On error: `transcription.failed` or `processing.failed`. Typical duration: 2 to 4 minutes per hour of audio.\n\n**Parallel processing quota:** same rule as the webapp. Your plan allows N simultaneous processings (meetings being processed + documents being generated, webapp and API together; Free 1 by default). Above it the request is refused with `429 parallel_processing_limit` and `Retry-After: 30`; nothing is queued on our side, retry later.\n\n**Billing:** consumption (audio minutes, LLM tokens) is measured after completion and debited from the monthly API allowance of your plan, then billed on demand if you enabled it (spend cap). If nothing can pay, the request is refused with `402` (`insufficient_balance` or `spend_cap_reached`).\n\nRequired scope: `write:meetings`. Supports `Idempotency-Key` (strongly recommended: a retried upload must not create two meetings)."
      }
    },
    "/v1/meetings/{meeting_id}": {
      "get": {
        "operationId": "getMeeting",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingDetail"
                },
                "examples": {
                  "completed_meeting": {
                    "summary": "completed meeting",
                    "value": {
                      "id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "object": "meeting",
                      "title": "Revue trimestrielle client Durand",
                      "status": "completed",
                      "transcribe_only": false,
                      "recorded_at": "2026-10-14T08:30:00Z",
                      "created_at": "2026-10-14T09:00:02Z",
                      "updated_at": "2026-10-14T09:06:40Z",
                      "duration_seconds": 3412,
                      "language": "fr",
                      "source": "api",
                      "recording_type": "meeting",
                      "tags": [
                        "client-durand",
                        "revue"
                      ],
                      "client": {
                        "id": "cli_12",
                        "object": "client",
                        "name": "Durand SA",
                        "email": "contact@durand.fr",
                        "phone": "+33 1 23 45 67 89",
                        "is_archived": false
                      },
                      "has_transcript": true,
                      "has_summary": true,
                      "web_url": "https://app.meetingize.com/meeting/detail?uuid=5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "summary": {
                        "object": "summary",
                        "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                        "title": "Revue trimestrielle client Durand",
                        "language": "fr",
                        "markdown": "# Revue trimestrielle client Durand\n\nLe client valide le budget T4...\n\n## Action items\n\n- **SPEAKER_00**: envoyer le devis révisé avant vendredi\n",
                        "structured": {
                          "short_summary": "Le client valide le budget T4...",
                          "action_items": {
                            "SPEAKER_00": [
                              "envoyer le devis révisé avant vendredi"
                            ]
                          }
                        },
                        "model": "deepseek-ai/DeepSeek-V3.2",
                        "created_at": "2026-10-14T09:06:38Z",
                        "updated_at": "2026-10-14T09:06:38Z"
                      },
                      "participants": [
                        {
                          "id": "par_812",
                          "name": "Alice Martin",
                          "email": "alice.martin@client.fr",
                          "speaker_labels": [
                            "SPEAKER_01"
                          ],
                          "is_participant": true
                        },
                        {
                          "id": null,
                          "name": null,
                          "email": null,
                          "speaker_labels": [
                            "SPEAKER_00"
                          ],
                          "is_participant": true
                        }
                      ],
                      "documents": [
                        {
                          "id": "doc_131",
                          "title": "Compte rendu client",
                          "created_at": "2026-10-14T09:08:30Z"
                        }
                      ],
                      "job": {
                        "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                        "object": "job",
                        "kind": "meeting_processing",
                        "status": "completed",
                        "stage": "done",
                        "progress": 1,
                        "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                        "document_id": null,
                        "parent_job_id": null,
                        "transcribe_only": false,
                        "document_templates": [
                          "tpl_42"
                        ],
                        "document_job_ids": [
                          "job_8e8d822e2216426fb59037de6b13643b"
                        ],
                        "error": null,
                        "usage": {
                          "cost_eur": "0.0373",
                          "wallet_eur": "0.0373",
                          "on_demand_eur": "0.0000",
                          "ledger_entry_ids": [
                            "led_0c8616464958428083838",
                            "led_da03e5e9b8d34986b1bf6"
                          ]
                        },
                        "metadata": {
                          "crm_id": "OPP-1234"
                        },
                        "created_at": "2026-10-14T09:00:02Z",
                        "started_at": "2026-10-14T09:00:03Z",
                        "finished_at": "2026-10-14T09:06:40Z"
                      }
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingDetail"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get a meeting",
        "description": "Full view of a meeting: metadata, processing `status`, AI report (`summary`, null until ready), participants (with their `par_` id and speaker labels), generated documents and the latest processing `job` (meetings created via the API). This is a good endpoint to poll after creating a meeting. Required scope: `read:meetings`."
      },
      "patch": {
        "operationId": "updateMeeting",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meeting management"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedMeetingPatchRequest"
              },
              "examples": {
                "Rename_and_attribute_speakers": {
                  "summary": "Rename and attribute speakers",
                  "value": {
                    "title": "Revue T4 Durand",
                    "participants": {
                      "add": [
                        {
                          "name": "Bruno Lefèvre",
                          "speaker_labels": [
                            "SPEAKER_00"
                          ]
                        }
                      ],
                      "update": [
                        {
                          "id": "par_812",
                          "speaker_labels": [
                            "SPEAKER_01"
                          ]
                        }
                      ],
                      "remove": [
                        "par_815"
                      ]
                    }
                  }
                },
                "Replace_tags": {
                  "summary": "Replace tags",
                  "value": {
                    "tags": [
                      "client-durand",
                      "signé"
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingDetail"
                },
                "examples": {
                  "updated_meeting": {
                    "summary": "updated meeting",
                    "value": {
                      "id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "object": "meeting",
                      "title": "Revue trimestrielle client Durand",
                      "status": "completed",
                      "transcribe_only": false,
                      "recorded_at": "2026-10-14T08:30:00Z",
                      "created_at": "2026-10-14T09:00:02Z",
                      "updated_at": "2026-10-14T09:06:40Z",
                      "duration_seconds": 3412,
                      "language": "fr",
                      "source": "api",
                      "recording_type": "meeting",
                      "tags": [
                        "client-durand",
                        "revue"
                      ],
                      "client": {
                        "id": "cli_12",
                        "object": "client",
                        "name": "Durand SA",
                        "email": "contact@durand.fr",
                        "phone": "+33 1 23 45 67 89",
                        "is_archived": false
                      },
                      "has_transcript": true,
                      "has_summary": true,
                      "web_url": "https://app.meetingize.com/meeting/detail?uuid=5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "summary": {
                        "object": "summary",
                        "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                        "title": "Revue trimestrielle client Durand",
                        "language": "fr",
                        "markdown": "# Revue trimestrielle client Durand\n\nLe client valide le budget T4...\n\n## Action items\n\n- **SPEAKER_00**: envoyer le devis révisé avant vendredi\n",
                        "structured": {
                          "short_summary": "Le client valide le budget T4...",
                          "action_items": {
                            "SPEAKER_00": [
                              "envoyer le devis révisé avant vendredi"
                            ]
                          }
                        },
                        "model": "deepseek-ai/DeepSeek-V3.2",
                        "created_at": "2026-10-14T09:06:38Z",
                        "updated_at": "2026-10-14T09:06:38Z"
                      },
                      "participants": [
                        {
                          "id": "par_812",
                          "name": "Alice Martin",
                          "email": "alice.martin@client.fr",
                          "speaker_labels": [
                            "SPEAKER_01"
                          ],
                          "is_participant": true
                        },
                        {
                          "id": null,
                          "name": null,
                          "email": null,
                          "speaker_labels": [
                            "SPEAKER_00"
                          ],
                          "is_participant": true
                        }
                      ],
                      "documents": [
                        {
                          "id": "doc_131",
                          "title": "Compte rendu client",
                          "created_at": "2026-10-14T09:08:30Z"
                        }
                      ],
                      "job": {
                        "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                        "object": "job",
                        "kind": "meeting_processing",
                        "status": "completed",
                        "stage": "done",
                        "progress": 1,
                        "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                        "document_id": null,
                        "parent_job_id": null,
                        "transcribe_only": false,
                        "document_templates": [
                          "tpl_42"
                        ],
                        "document_job_ids": [
                          "job_8e8d822e2216426fb59037de6b13643b"
                        ],
                        "error": null,
                        "usage": {
                          "cost_eur": "0.0373",
                          "wallet_eur": "0.0373",
                          "on_demand_eur": "0.0000",
                          "ledger_entry_ids": [
                            "led_0c8616464958428083838",
                            "led_da03e5e9b8d34986b1bf6"
                          ]
                        },
                        "metadata": {
                          "crm_id": "OPP-1234"
                        },
                        "created_at": "2026-10-14T09:00:02Z",
                        "started_at": "2026-10-14T09:00:03Z",
                        "finished_at": "2026-10-14T09:06:40Z"
                      }
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/MeetingDetail"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Update a meeting (title, date, tags, participants)",
        "description": "Partial update; only the fields sent are changed.\n\n- `title`: replaces the title (it then stays fixed even if the AI report is regenerated).\n- `recorded_at`: meeting date.\n- `tags`: **replaces** the whole tag list (`[]` removes all).\n- `client_id` / `client`: attach to an existing client or find/create one by name; `client: null` detaches the meeting from its client.\n- `participants`: `add` (name/email/speaker_labels), `update` (by `par_` id, only fields present; `speaker_labels` replaces the participant's labels), `remove` (by `par_` id). A speaker label belongs to one participant at most: assigning it moves it. Labels must exist in the transcript (`SPEAKER_00`...). Speaker names then appear in the transcript (`speaker_name`) and exports. Removing a person the meeting is shared with (webapp sharing) only removes them from the participants, their access is kept.\n\nNo email is ever sent by this endpoint. The AI report is **not** regenerated. Required scope: `write:meetings`."
      },
      "delete": {
        "operationId": "deleteMeeting",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meeting management"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Delete a meeting",
        "description": "Deletes the meeting and everything attached (audio, transcript, report, documents), exactly like the webapp. A processing in progress is cancelled. Irreversible. Usage already consumed stays in the ledger and the deleted documents keep counting in the webapp quotas. Required scope: `write:meetings`."
      }
    },
    "/v1/meetings/{meeting_id}/documents": {
      "post": {
        "operationId": "generateDocument",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Optional unique key (max 255 characters, a UUID v4 is recommended) that makes the request safe to retry. If a network error leaves you unsure whether the request was received, send it again with the **same key**: if it was already processed, you get the original response again (header `Idempotent-Replayed: true`) and nothing is created twice (no duplicate meeting, no double billing). Keys are kept **24 hours** per account. Same key with a different body: `422 idempotency_key_reused`; same key while the first request is still being processed: `409 idempotency_key_in_use`. Example: `Idempotency-Key: 6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70`.",
            "example": "6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70"
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Documents"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GenerateDocumentRequestRequest"
              },
              "examples": {
                "From_a_template": {
                  "summary": "From a template",
                  "value": {
                    "template_id": "tpl_42",
                    "instructions": "Insiste sur les prochaines étapes."
                  }
                },
                "From_a_prompt": {
                  "summary": "From a prompt",
                  "value": {
                    "prompt": "Rédige un compte rendu client en 5 points, ton formel.",
                    "title": "CR client"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                },
                "examples": {
                  "queued": {
                    "summary": "queued",
                    "value": {
                      "id": "job_8e8d822e2216426fb59037de6b13643b",
                      "object": "job",
                      "kind": "document_generation",
                      "status": "queued",
                      "stage": "queued",
                      "progress": 0,
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "document_id": null,
                      "parent_job_id": null,
                      "transcribe_only": null,
                      "document_templates": null,
                      "document_job_ids": null,
                      "error": null,
                      "usage": null,
                      "metadata": null,
                      "created_at": "2026-10-14T09:06:41Z",
                      "started_at": null,
                      "finished_at": null
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Job"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "402": {
            "description": "Insufficient balance or spend cap reached",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Generate a document from a meeting",
        "description": "Generates a document (minutes, client report, proposal...) from the meeting AI report and transcript, either from a template (`template_id`, see `GET /templates`) or from your own instructions (`prompt`). Requires a completed meeting with a report (`409 summary_not_ready` otherwise, including transcribe_only meetings).\n\n**Response (202):** a `document_generation` job. Poll `GET /jobs/{id}` until `completed` (then `document_id` is set; read it with `GET /documents/{document_id}`), or wait for the `document.generated` / `document.failed` webhook. Typical duration: 30 s to 2 min.\n\n**Parallel processing quota:** same rule as the webapp. Your plan allows N simultaneous processings (meetings being processed + documents being generated, webapp and API together; Free 1 by default). Above it the request is refused with `429 parallel_processing_limit` and `Retry-After: 30`; nothing is queued on our side, retry later.\n\n**Billing:** consumption (audio minutes, LLM tokens) is measured after completion and debited from the monthly API allowance of your plan, then billed on demand if you enabled it (spend cap). If nothing can pay, the request is refused with `402` (`insufficient_balance` or `spend_cap_reached`).\n\nRequired scope: `write:documents`. Supports `Idempotency-Key`."
      }
    },
    "/v1/meetings/{meeting_id}/export": {
      "get": {
        "operationId": "exportMeetingLlmReady",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "md"
              ],
              "default": "json"
            },
            "description": "json (default) or md."
          },
          {
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string",
              "enum": [
                "en",
                "fr"
              ],
              "default": "fr"
            },
            "description": "Language of the priming prompt: fr (default) or en."
          },
          {
            "in": "query",
            "name": "max_tokens",
            "schema": {
              "type": "integer",
              "default": 24000
            },
            "description": "Max tokens per part (2000 to 200000, default 24000)."
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LlmExport"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/LlmExport"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Export for an LLM (ChatGPT, Claude...)",
        "description": "Ready-to-paste bundle: a priming prompt, metadata, participants, the AI report and the timestamped diarized transcript, split in parts of at most `max_tokens` tokens so that long meetings fit in a chat context. `format=md` returns all parts separated by `--- Part i/n ---`. Scopes required: `read:meetings` and `read:transcripts`."
      }
    },
    "/v1/meetings/{meeting_id}/participants": {
      "get": {
        "operationId": "getMeetingParticipants",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParticipantList"
                },
                "examples": {
                  "participants": {
                    "summary": "participants",
                    "value": {
                      "data": [
                        {
                          "id": "par_812",
                          "name": "Alice Martin",
                          "email": "alice.martin@client.fr",
                          "speaker_labels": [
                            "SPEAKER_01"
                          ],
                          "is_participant": true
                        },
                        {
                          "id": null,
                          "name": null,
                          "email": null,
                          "speaker_labels": [
                            "SPEAKER_00"
                          ],
                          "is_participant": true
                        }
                      ]
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ParticipantList"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List participants",
        "description": "Participants of the meeting with their `par_` id and the speaker labels attributed to them, plus the transcript speakers not attributed to anyone (`id: null`). Modify them with `PATCH /meetings/{id}`. Required scope: `read:meetings`."
      }
    },
    "/v1/meetings/{meeting_id}/summary": {
      "get": {
        "operationId": "getMeetingSummary",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "md"
              ],
              "default": "json"
            },
            "description": "json (default) or md."
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Meetings"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Summary"
                },
                "examples": {
                  "json": {
                    "summary": "json",
                    "value": {
                      "object": "summary",
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "title": "Revue trimestrielle client Durand",
                      "language": "fr",
                      "markdown": "# Revue trimestrielle client Durand\n\nLe client valide le budget T4...\n\n## Action items\n\n- **SPEAKER_00**: envoyer le devis révisé avant vendredi\n",
                      "structured": {
                        "short_summary": "Le client valide le budget T4...",
                        "action_items": {
                          "SPEAKER_00": [
                            "envoyer le devis révisé avant vendredi"
                          ]
                        }
                      },
                      "model": "deepseek-ai/DeepSeek-V3.2",
                      "created_at": "2026-10-14T09:06:38Z",
                      "updated_at": "2026-10-14T09:06:38Z"
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Summary"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get the AI meeting report",
        "description": "The AI report (summary, key takeaways, action items, minutes) as Markdown and, in `structured`, the raw structured result. Available from `processing.completed`; before that, or for a transcribe_only meeting: `409 summary_not_ready`. Required scope: `read:meetings`."
      }
    },
    "/v1/meetings/{meeting_id}/transcript": {
      "get": {
        "operationId": "getTranscript",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "md",
                "srt",
                "txt",
                "vtt"
              ],
              "default": "json"
            },
            "description": "json (default), md, txt, srt or vtt."
          },
          {
            "in": "path",
            "name": "meeting_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Transcripts"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transcript"
                },
                "examples": {
                  "json": {
                    "summary": "json",
                    "value": {
                      "object": "transcript",
                      "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                      "language": "fr",
                      "duration_seconds": 3412,
                      "model": "cloud-deepinfra-openai/whisper-large-v3-turbo",
                      "speakers": [
                        "SPEAKER_00",
                        "SPEAKER_01"
                      ],
                      "segments": [
                        {
                          "start": 1.58,
                          "end": 6.2,
                          "speaker": "SPEAKER_00",
                          "speaker_name": null,
                          "text": "Bonjour Alice, merci de prendre le temps pour cette revue."
                        },
                        {
                          "start": 6.4,
                          "end": 11.9,
                          "speaker": "SPEAKER_01",
                          "speaker_name": "Alice Martin",
                          "text": "Avec plaisir. On a validé le budget du quatrième trimestre."
                        }
                      ]
                    }
                  }
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Transcript"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get the transcript",
        "description": "Diarized, timestamped transcript. `format=json` (default) returns segments (`start`/`end` in seconds, `speaker` label, `speaker_name` once attributed with PATCH). `md`, `txt`, `srt` and `vtt` return text files (subtitles: `srt`/`vtt`). Available from `transcription.completed`; before that: `409 transcript_not_ready`. Required scope: `read:transcripts`."
      }
    },
    "/v1/personas": {
      "get": {
        "operationId": "listPersonas",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Templates"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonaList"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonaList"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List personas",
        "description": "Professional personas (template families). Passing `persona` at meeting creation generates its templates. Scope: `read:meetings` or `write:documents`."
      }
    },
    "/v1/templates": {
      "get": {
        "operationId": "listTemplates",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "persona",
            "schema": {
              "type": "string"
            },
            "description": "Persona id from GET /personas (e.g. `lawyer`)."
          }
        ],
        "tags": [
          "Templates"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateList"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/TemplateList"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List document templates",
        "description": "Document templates you can generate with `POST /meetings/{id}/documents` or request at meeting creation (`document_templates`). Filter by `persona`. Scope: `read:meetings` or `write:documents`."
      }
    },
    "/v1/templates/{template_id}": {
      "get": {
        "operationId": "getTemplate",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "path",
            "name": "template_id",
            "schema": {
              "type": "string"
            },
            "required": true
          }
        ],
        "tags": [
          "Templates"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Template"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get a template",
        "description": "Template detail. Scope: `read:meetings` or `write:documents`."
      }
    },
    "/v1/usage": {
      "get": {
        "operationId": "getUsage",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Usage"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usage"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Usage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Current consumption",
        "description": "Consumption of the current period (UTC calendar month): wallet (allowance included in your plan + credits), on-demand part and spend cap, totals (tokens, audio seconds) and the unit prices applied. Required scope: `read:usage`."
      }
    },
    "/v1/usage/ledger": {
      "get": {
        "operationId": "listLedgerEntries",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "period",
            "schema": {
              "type": "string"
            },
            "description": "Billing period YYYY-MM (UTC). Default: current month."
          }
        ],
        "tags": [
          "Usage"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LedgerPage"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/LedgerPage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Consumption ledger",
        "description": "One immutable line per metered operation (transcription, AI report, document), with tokens, model, cost and how it was paid (wallet / on-demand / written off above the cap). Required scope: `read:usage`."
      }
    },
    "/v1/webhook_endpoints": {
      "get": {
        "operationId": "listWebhookEndpoints",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointList"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointList"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "List webhook endpoints",
        "description": "Your webhook endpoints (secret not included). Required scope: `webhooks`."
      },
      "post": {
        "operationId": "createWebhookEndpoint",
        "parameters": [
          {
            "in": "header",
            "name": "Idempotency-Key",
            "schema": {
              "type": "string",
              "maxLength": 255
            },
            "description": "Optional unique key (max 255 characters, a UUID v4 is recommended) that makes the request safe to retry. If a network error leaves you unsure whether the request was received, send it again with the **same key**: if it was already processed, you get the original response again (header `Idempotent-Replayed: true`) and nothing is created twice (no duplicate meeting, no double billing). Keys are kept **24 hours** per account. Same key with a different body: `422 idempotency_key_reused`; same key while the first request is still being processed: `409 idempotency_key_in_use`. Example: `Idempotency-Key: 6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70`.",
            "example": "6f1c2a3e-9b7d-4c1e-8f2a-0d3b4c5e6f70"
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEndpointInputRequest"
              },
              "examples": {
                "All_events": {
                  "summary": "All events",
                  "value": {
                    "url": "https://crm.example.com/hooks/meetingize",
                    "events": [
                      "*"
                    ]
                  }
                }
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointWithSecret"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointWithSecret"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Register a webhook endpoint",
        "description": "Registers an https URL that will receive the selected events (see the `webhooks` section of this spec for payloads). The signing `secret` is returned **only in this response**: store it to verify the `Meetingize-Signature` header. Required scope: `webhooks`."
      }
    },
    "/v1/webhook_endpoints/{endpoint_id}": {
      "get": {
        "operationId": "getWebhookEndpoint",
        "parameters": [
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Get a webhook endpoint",
        "description": "Required scope: `webhooks`."
      },
      "patch": {
        "operationId": "updateWebhookEndpoint",
        "parameters": [
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchedWebhookEndpointPatchRequest"
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpoint"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Update a webhook endpoint",
        "description": "Change url, events or description; `enabled: true` re-enables an endpoint disabled after repeated failures. Required scope: `webhooks`."
      },
      "delete": {
        "operationId": "deleteWebhookEndpoint",
        "parameters": [
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "204": {
            "description": "No response body",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Delete a webhook endpoint",
        "description": "Required scope: `webhooks`."
      }
    },
    "/v1/webhook_endpoints/{endpoint_id}/deliveries": {
      "get": {
        "operationId": "listWebhookDeliveries",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDeliveryPage"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDeliveryPage"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Delivery log",
        "description": "Deliveries of the endpoint (status, HTTP code, response excerpt, attempts, next retry), kept 30 days. Required scope: `webhooks`."
      }
    },
    "/v1/webhook_endpoints/{endpoint_id}/rotate_secret": {
      "post": {
        "operationId": "rotateWebhookSecret",
        "parameters": [
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointWithSecret"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointWithSecret"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Rotate the signing secret",
        "description": "New secret returned once; the previous one stays valid 24 h (both signatures are sent). Required scope: `webhooks`."
      }
    },
    "/v1/webhook_endpoints/{endpoint_id}/test": {
      "post": {
        "operationId": "sendTestWebhook",
        "parameters": [
          {
            "in": "path",
            "name": "endpoint_id",
            "schema": {
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "problem+json"
              ]
            }
          }
        ],
        "tags": [
          "Webhooks"
        ],
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDelivery"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDelivery"
                }
              }
            },
            "description": "",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "400": {
            "description": "Validation error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "401": {
            "description": "Missing or invalid credential",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "403": {
            "description": "Insufficient scope",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "404": {
            "description": "Not found (also for resources of other accounts)",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              }
            }
          },
          "429": {
            "description": "Rate limit (`rate_limited`) or parallel processing quota (`parallel_processing_limit`) exceeded; see `Retry-After`",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "parallel_processing_limit": {
                    "summary": "parallel_processing_limit",
                    "value": {
                      "type": "https://meetingize.com/docs/api/errors#parallel_processing_limit",
                      "title": "Parallel processing limit reached",
                      "status": 429,
                      "detail": "Your plan allows 1 simultaneous processing(s) (meetings and document generations, webapp and API together); 1 are running. Retry when one finishes (see GET /jobs?status=processing).",
                      "instance": "/api/v1/meetings",
                      "code": "parallel_processing_limit",
                      "request_id": "req_5f0c2a9b8e7d4c1f"
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/X-Request-Id"
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          }
        },
        "summary": "Send a test event",
        "description": "Sends a signed `ping` event to the endpoint now. Required scope: `webhooks`."
      }
    }
  },
  "components": {
    "schemas": {
      "Client": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "cli_<n>"
          },
          "object": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "format": "email"
          },
          "phone": {
            "type": [
              "string",
              "null"
            ]
          },
          "is_archived": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "is_archived",
          "name",
          "object"
        ]
      },
      "ClientInputRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Client name; an existing client with this name is reused, else created"
          },
          "email": {
            "type": "string",
            "format": "email",
            "minLength": 1
          },
          "phone": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "name"
        ]
      },
      "ClientList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Client"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Credential": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/CredentialTypeEnum"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "livemode": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "livemode",
          "name",
          "scopes",
          "type"
        ]
      },
      "CredentialTypeEnum": {
        "enum": [
          "api_key",
          "oauth"
        ],
        "type": "string",
        "description": "* `api_key` - api_key\n* `oauth` - oauth"
      },
      "DeliveryStatusEnum": {
        "enum": [
          "pending",
          "succeeded",
          "retrying",
          "failed"
        ],
        "type": "string",
        "description": "* `pending` - pending\n* `succeeded` - succeeded\n* `retrying` - retrying\n* `failed` - failed"
      },
      "Document": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "meeting_id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string"
          },
          "template_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ]
          },
          "formats": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "markdown": {
            "type": "string",
            "description": "Only in GET /documents/{id}"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "created_at",
          "formats",
          "id",
          "meeting_id",
          "object",
          "title",
          "updated_at"
        ]
      },
      "DocumentPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Document"
            }
          },
          "has_more": {
            "type": "boolean"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data",
          "has_more",
          "next_cursor"
        ]
      },
      "DocumentRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "created_at",
          "id",
          "title"
        ]
      },
      "Feedback": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "meeting_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "meeting_id",
          "message",
          "object",
          "status",
          "type"
        ]
      },
      "FeedbackRequestRequest": {
        "type": "object",
        "properties": {
          "type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FeedbackRequestTypeEnum"
              }
            ],
            "default": "feedback"
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10000
          },
          "meeting_id": {
            "type": "string",
            "format": "uuid",
            "description": "Related meeting, if any (must be yours)"
          }
        },
        "required": [
          "message"
        ]
      },
      "FeedbackRequestTypeEnum": {
        "enum": [
          "bug",
          "feature_request",
          "question",
          "feedback"
        ],
        "type": "string",
        "description": "* `bug` - bug\n* `feature_request` - feature_request\n* `question` - question\n* `feedback` - feedback"
      },
      "GenerateDocumentRequestRequest": {
        "type": "object",
        "properties": {
          "template_id": {
            "type": "string",
            "minLength": 1
          },
          "prompt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "instructions": {
            "type": "string",
            "default": "",
            "maxLength": 5000
          },
          "include_transcript": {
            "type": "boolean",
            "default": true
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {}
          }
        }
      },
      "Job": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "kind": {
            "$ref": "#/components/schemas/KindEnum"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JobStatusEnum"
              }
            ],
            "description": "queued -> processing -> completed | failed (or canceled)\n\n* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed\n* `canceled` - canceled"
          },
          "stage": {
            "description": "Finer progress: meeting_processing = queued, downloading (audio_url), transcribing, summarizing, done; document_generation = queued, generating, done\n\n* `queued` - queued\n* `downloading` - downloading\n* `transcribing` - transcribing\n* `summarizing` - summarizing\n* `generating` - generating\n* `done` - done",
            "oneOf": [
              {
                "$ref": "#/components/schemas/StageEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "progress": {
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "meeting_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "document_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "document_generation: doc_<n> once completed"
          },
          "parent_job_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "document_generation started by a meeting creation (document_templates)"
          },
          "transcribe_only": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "document_templates": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "document_job_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "meeting_processing: document jobs spawned after the AI report"
          },
          "error": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/JobError"
              },
              {
                "type": "null"
              }
            ]
          },
          "usage": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/JobUsage"
              },
              {
                "type": "null"
              }
            ]
          },
          "metadata": {
            "oneOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "finished_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "created_at",
          "id",
          "kind",
          "object",
          "status"
        ]
      },
      "JobError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ]
      },
      "JobPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Job"
            }
          },
          "has_more": {
            "type": "boolean"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data",
          "has_more",
          "next_cursor"
        ]
      },
      "JobStatusEnum": {
        "enum": [
          "queued",
          "processing",
          "completed",
          "failed",
          "canceled"
        ],
        "type": "string",
        "description": "* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed\n* `canceled` - canceled"
      },
      "JobUsage": {
        "type": "object",
        "properties": {
          "cost_eur": {
            "type": "string"
          },
          "wallet_eur": {
            "type": "string"
          },
          "on_demand_eur": {
            "type": "string"
          },
          "ledger_entry_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "cost_eur",
          "ledger_entry_ids",
          "on_demand_eur",
          "wallet_eur"
        ]
      },
      "KindEnum": {
        "enum": [
          "meeting_processing",
          "document_generation"
        ],
        "type": "string",
        "description": "* `meeting_processing` - meeting_processing\n* `document_generation` - document_generation"
      },
      "LedgerEntry": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "period": {
            "type": "string"
          },
          "operation": {
            "$ref": "#/components/schemas/OperationEnum"
          },
          "job_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "meeting_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "provider": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ]
          },
          "input_tokens": {
            "type": "integer"
          },
          "output_tokens": {
            "type": "integer"
          },
          "audio_seconds": {
            "type": "integer"
          },
          "cost_eur": {
            "type": "string"
          },
          "wallet_eur": {
            "type": "string"
          },
          "on_demand_eur": {
            "type": "string"
          },
          "written_off_eur": {
            "type": "string"
          },
          "estimated": {
            "type": "boolean"
          }
        },
        "required": [
          "audio_seconds",
          "cost_eur",
          "created_at",
          "estimated",
          "id",
          "input_tokens",
          "object",
          "on_demand_eur",
          "operation",
          "output_tokens",
          "period",
          "wallet_eur",
          "written_off_eur"
        ]
      },
      "LedgerPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LedgerEntry"
            }
          },
          "has_more": {
            "type": "boolean"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data",
          "has_more",
          "next_cursor"
        ]
      },
      "LlmExport": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string"
          },
          "meeting_id": {
            "type": "string",
            "format": "uuid"
          },
          "priming_prompt": {
            "type": "string"
          },
          "total_tokens": {
            "type": "integer"
          },
          "parts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LlmPart"
            }
          }
        },
        "required": [
          "meeting_id",
          "object",
          "parts",
          "priming_prompt",
          "total_tokens"
        ]
      },
      "LlmPart": {
        "type": "object",
        "properties": {
          "index": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "tokens": {
            "type": "integer"
          },
          "content": {
            "type": "string"
          }
        },
        "required": [
          "content",
          "index",
          "tokens",
          "total"
        ]
      },
      "Me": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/MeUser"
          },
          "plan": {
            "type": "string"
          },
          "credential": {
            "$ref": "#/components/schemas/Credential"
          },
          "rate_limit": {
            "$ref": "#/components/schemas/RateLimit"
          },
          "api_version": {
            "type": "string"
          }
        },
        "required": [
          "api_version",
          "credential",
          "object",
          "plan",
          "rate_limit",
          "user"
        ]
      },
      "MeUser": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "email",
          "id",
          "name"
        ]
      },
      "Meeting": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "object": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MeetingStatusEnum"
              }
            ],
            "description": "draft (no audio yet, webapp only), queued, processing (transcription then AI report), completed (transcript + report ready; transcript only when transcribe_only), failed\n\n* `draft` - draft\n* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed"
          },
          "transcribe_only": {
            "type": "boolean",
            "description": "Created with transcribe_only=true: no AI report, no documents"
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Date of the meeting (recorded_at at creation, else upload date)"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SourceEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "recording_type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RecordingTypeEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "client": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Client"
              },
              {
                "type": "null"
              }
            ],
            "description": "Client folder the meeting belongs to"
          },
          "has_transcript": {
            "type": "boolean"
          },
          "has_summary": {
            "type": "boolean"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "created_at",
          "has_summary",
          "has_transcript",
          "id",
          "object",
          "recorded_at",
          "status",
          "tags",
          "title",
          "transcribe_only",
          "updated_at",
          "web_url"
        ]
      },
      "MeetingCreateJsonRequest": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "Defaults to the AI-generated title, else file name",
            "maxLength": 300
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Meeting date (ISO 8601). Default: now"
          },
          "language": {
            "type": "string",
            "minLength": 1,
            "description": "ISO 639-1 (fr, en, ...) or auto (default)"
          },
          "recording_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingTypeEnum"
              }
            ],
            "description": "meeting (several speakers, diarization, default) or solo (dictation)\n\n* `meeting` - meeting\n* `solo` - solo"
          },
          "transcribe_only": {
            "type": "boolean",
            "default": false,
            "description": "true: transcript only (no AI report, no documents, cheaper)"
          },
          "persona": {
            "type": "string",
            "minLength": 1,
            "description": "Persona id (GET /personas): without document_templates, generates the persona templates (max 5) after the report"
          },
          "metadata": {
            "description": "Your own JSON object (max 4 KB), echoed in jobs and webhooks"
          },
          "client_id": {
            "type": "string",
            "minLength": 1,
            "description": "Existing client (cli_<n>, see GET /clients)"
          },
          "audio_url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "description": "Public https URL of the audio/video file, downloaded by Meetingize"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "participants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParticipantInputRequest"
            }
          },
          "document_templates": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Templates to generate after the AI report (max 5)"
          },
          "client": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ClientInputRequest"
              }
            ],
            "description": "Client found by name or created (alternative to client_id)"
          }
        },
        "required": [
          "audio_url"
        ]
      },
      "MeetingCreateMultipartRequest": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "Defaults to the AI-generated title, else file name",
            "maxLength": 300
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Meeting date (ISO 8601). Default: now"
          },
          "language": {
            "type": "string",
            "minLength": 1,
            "description": "ISO 639-1 (fr, en, ...) or auto (default)"
          },
          "recording_type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingTypeEnum"
              }
            ],
            "description": "meeting (several speakers, diarization, default) or solo (dictation)\n\n* `meeting` - meeting\n* `solo` - solo"
          },
          "transcribe_only": {
            "type": "boolean",
            "default": false,
            "description": "true: transcript only (no AI report, no documents, cheaper)"
          },
          "persona": {
            "type": "string",
            "minLength": 1,
            "description": "Persona id (GET /personas): without document_templates, generates the persona templates (max 5) after the report"
          },
          "metadata": {
            "description": "Your own JSON object (max 4 KB), echoed in jobs and webhooks"
          },
          "client_id": {
            "type": "string",
            "minLength": 1,
            "description": "Existing client (cli_<n>, see GET /clients)"
          },
          "file": {
            "type": "string",
            "format": "binary",
            "description": "Audio or video file (max 2 GB): mp3, m4a, wav, flac, ogg, webm, mp4..."
          },
          "tags": {
            "type": "string",
            "minLength": 1,
            "description": "JSON array or comma-separated list"
          },
          "participants": {
            "type": "string",
            "minLength": 1,
            "description": "JSON array of {name, email, speaker_labels}"
          },
          "document_templates": {
            "type": "string",
            "minLength": 1,
            "description": "JSON array or comma-separated tpl_ ids"
          },
          "client": {
            "type": "string",
            "minLength": 1,
            "description": "JSON object {name, email, phone} or just a client name"
          }
        },
        "required": [
          "file"
        ]
      },
      "MeetingCreated": {
        "type": "object",
        "description": "Response of POST /meetings: the meeting (status queued) and its processing job.",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "object": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MeetingStatusEnum"
              }
            ],
            "description": "draft (no audio yet, webapp only), queued, processing (transcription then AI report), completed (transcript + report ready; transcript only when transcribe_only), failed\n\n* `draft` - draft\n* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed"
          },
          "transcribe_only": {
            "type": "boolean",
            "description": "Created with transcribe_only=true: no AI report, no documents"
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Date of the meeting (recorded_at at creation, else upload date)"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SourceEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "recording_type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RecordingTypeEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "client": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Client"
              },
              {
                "type": "null"
              }
            ],
            "description": "Client folder the meeting belongs to"
          },
          "has_transcript": {
            "type": "boolean"
          },
          "has_summary": {
            "type": "boolean"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          },
          "summary": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Summary"
              },
              {
                "type": "null"
              }
            ]
          },
          "participants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Participant"
            }
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentRef"
            }
          },
          "job": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Job"
              },
              {
                "type": "null"
              }
            ],
            "description": "Latest processing job of the meeting when created via the API (null for webapp meetings): what to poll with GET /jobs/{job_id}"
          }
        },
        "required": [
          "created_at",
          "documents",
          "has_summary",
          "has_transcript",
          "id",
          "object",
          "participants",
          "recorded_at",
          "status",
          "tags",
          "title",
          "transcribe_only",
          "updated_at",
          "web_url"
        ]
      },
      "MeetingDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "object": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MeetingStatusEnum"
              }
            ],
            "description": "draft (no audio yet, webapp only), queued, processing (transcription then AI report), completed (transcript + report ready; transcript only when transcribe_only), failed\n\n* `draft` - draft\n* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed"
          },
          "transcribe_only": {
            "type": "boolean",
            "description": "Created with transcribe_only=true: no AI report, no documents"
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "description": "Date of the meeting (recorded_at at creation, else upload date)"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "source": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SourceEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "recording_type": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RecordingTypeEnum"
              },
              {
                "$ref": "#/components/schemas/NullEnum"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "client": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Client"
              },
              {
                "type": "null"
              }
            ],
            "description": "Client folder the meeting belongs to"
          },
          "has_transcript": {
            "type": "boolean"
          },
          "has_summary": {
            "type": "boolean"
          },
          "web_url": {
            "type": "string",
            "format": "uri"
          },
          "summary": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Summary"
              },
              {
                "type": "null"
              }
            ]
          },
          "participants": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Participant"
            }
          },
          "documents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DocumentRef"
            }
          },
          "job": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Job"
              },
              {
                "type": "null"
              }
            ],
            "description": "Latest processing job of the meeting when created via the API (null for webapp meetings): what to poll with GET /jobs/{job_id}"
          }
        },
        "required": [
          "created_at",
          "documents",
          "has_summary",
          "has_transcript",
          "id",
          "object",
          "participants",
          "recorded_at",
          "status",
          "tags",
          "title",
          "transcribe_only",
          "updated_at",
          "web_url"
        ]
      },
      "MeetingPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Meeting"
            }
          },
          "has_more": {
            "type": "boolean"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data",
          "has_more",
          "next_cursor"
        ]
      },
      "MeetingStatusEnum": {
        "enum": [
          "draft",
          "queued",
          "processing",
          "completed",
          "failed"
        ],
        "type": "string",
        "description": "* `draft` - draft\n* `queued` - queued\n* `processing` - processing\n* `completed` - completed\n* `failed` - failed"
      },
      "NullEnum": {
        "type": "null"
      },
      "OnDemand": {
        "type": "object",
        "properties": {
          "eligible": {
            "type": "boolean"
          },
          "enabled": {
            "type": "boolean"
          },
          "spend_cap_eur": {
            "type": [
              "string",
              "null"
            ]
          },
          "used_eur": {
            "type": "string"
          },
          "remaining_eur": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "eligible",
          "enabled",
          "used_eur"
        ]
      },
      "OperationEnum": {
        "enum": [
          "transcription",
          "meeting_processing",
          "document_generation"
        ],
        "type": "string",
        "description": "* `transcription` - transcription\n* `meeting_processing` - meeting_processing\n* `document_generation` - document_generation"
      },
      "Participant": {
        "type": "object",
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ],
            "description": "par_<n>; null for a transcript speaker not attributed to anyone"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "format": "email"
          },
          "speaker_labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "is_participant": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "speaker_labels"
        ]
      },
      "ParticipantChangesRequest": {
        "type": "object",
        "properties": {
          "add": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParticipantInputRequest"
            }
          },
          "update": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParticipantUpdateRequest"
            },
            "description": "Only the fields present are changed; speaker_labels replaces"
          },
          "remove": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "par_ ids to remove"
          }
        }
      },
      "ParticipantInputRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Display name (name or email required)"
          },
          "email": {
            "type": "string",
            "format": "email",
            "minLength": 1,
            "description": "Never contacted by the API"
          },
          "speaker_labels": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Transcript speakers spoken by this person, e.g. [\"SPEAKER_00\"]"
          }
        }
      },
      "ParticipantList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Participant"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "ParticipantUpdateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Display name (name or email required)"
          },
          "email": {
            "type": "string",
            "format": "email",
            "minLength": 1,
            "description": "Never contacted by the API"
          },
          "speaker_labels": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Transcript speakers spoken by this person, e.g. [\"SPEAKER_00\"]"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "par_<n> from GET /meetings/{id}"
          }
        },
        "required": [
          "id"
        ]
      },
      "PatchedMeetingPatchRequest": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "description": "Replaces all tags"
          },
          "participants": {
            "$ref": "#/components/schemas/ParticipantChangesRequest"
          },
          "client_id": {
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "description": "Attach to an existing client"
          },
          "client": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ClientInputRequest"
              },
              {
                "type": "null"
              }
            ],
            "description": "Find/create by name; null detaches"
          }
        }
      },
      "PatchedWebhookEndpointPatchRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "maxLength": 2000
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 1
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "enabled": {
            "type": "boolean"
          }
        }
      },
      "Persona": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "description",
          "id",
          "label",
          "object"
        ]
      },
      "PersonaList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Persona"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "RateLimit": {
        "type": "object",
        "properties": {
          "limit_per_minute": {
            "type": "integer"
          }
        },
        "required": [
          "limit_per_minute"
        ]
      },
      "RecordingTypeEnum": {
        "enum": [
          "meeting",
          "solo"
        ],
        "type": "string",
        "description": "* `meeting` - meeting\n* `solo` - solo"
      },
      "Segment": {
        "type": "object",
        "properties": {
          "start": {
            "type": "number",
            "format": "double"
          },
          "end": {
            "type": "number",
            "format": "double"
          },
          "speaker": {
            "type": "string"
          },
          "speaker_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "end",
          "speaker",
          "start",
          "text"
        ]
      },
      "SourceEnum": {
        "enum": [
          "upload",
          "live_recording",
          "text",
          "url",
          "api"
        ],
        "type": "string",
        "description": "* `upload` - upload\n* `live_recording` - live_recording\n* `text` - text\n* `url` - url\n* `api` - api"
      },
      "StageEnum": {
        "enum": [
          "queued",
          "downloading",
          "transcribing",
          "summarizing",
          "generating",
          "done"
        ],
        "type": "string",
        "description": "* `queued` - queued\n* `downloading` - downloading\n* `transcribing` - transcribing\n* `summarizing` - summarizing\n* `generating` - generating\n* `done` - done"
      },
      "Summary": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string"
          },
          "meeting_id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string"
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "markdown": {
            "type": "string"
          },
          "structured": {
            "oneOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "created_at",
          "markdown",
          "meeting_id",
          "object",
          "title",
          "updated_at"
        ]
      },
      "Template": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "icon": {
            "type": [
              "string",
              "null"
            ]
          },
          "persona": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "object"
        ]
      },
      "TemplateList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Template"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "Totals": {
        "type": "object",
        "properties": {
          "cost_eur": {
            "type": "string"
          },
          "input_tokens": {
            "type": "integer"
          },
          "output_tokens": {
            "type": "integer"
          },
          "audio_seconds": {
            "type": "integer"
          },
          "operations": {
            "type": "integer"
          }
        },
        "required": [
          "audio_seconds",
          "cost_eur",
          "input_tokens",
          "operations",
          "output_tokens"
        ]
      },
      "Transcript": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string"
          },
          "meeting_id": {
            "type": "string",
            "format": "uuid"
          },
          "language": {
            "type": [
              "string",
              "null"
            ]
          },
          "duration_seconds": {
            "type": [
              "integer",
              "null"
            ]
          },
          "model": {
            "type": [
              "string",
              "null"
            ]
          },
          "speakers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Segment"
            }
          }
        },
        "required": [
          "meeting_id",
          "object",
          "segments",
          "speakers"
        ]
      },
      "Usage": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string"
          },
          "period": {
            "type": "string"
          },
          "period_start": {
            "type": "string",
            "format": "date-time"
          },
          "period_end": {
            "type": "string",
            "format": "date-time"
          },
          "currency": {
            "type": "string"
          },
          "wallet": {
            "$ref": "#/components/schemas/Wallet"
          },
          "on_demand": {
            "$ref": "#/components/schemas/OnDemand"
          },
          "totals": {
            "$ref": "#/components/schemas/Totals"
          },
          "alert_thresholds_percent": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "rates": {}
        },
        "required": [
          "alert_thresholds_percent",
          "currency",
          "object",
          "on_demand",
          "period",
          "period_end",
          "period_start",
          "rates",
          "totals",
          "wallet"
        ]
      },
      "Wallet": {
        "type": "object",
        "properties": {
          "included_eur": {
            "type": "string"
          },
          "credits_eur": {
            "type": "string"
          },
          "used_eur": {
            "type": "string"
          },
          "remaining_eur": {
            "type": "string"
          }
        },
        "required": [
          "credits_eur",
          "included_eur",
          "remaining_eur",
          "used_eur"
        ]
      },
      "WebhookDelivery": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "endpoint_id": {
            "type": "string"
          },
          "event_id": {
            "type": "string"
          },
          "event_type": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/DeliveryStatusEnum"
          },
          "attempts": {
            "type": "integer"
          },
          "response_status": {
            "type": [
              "integer",
              "null"
            ]
          },
          "response_body_excerpt": {
            "type": [
              "string",
              "null"
            ]
          },
          "duration_ms": {
            "type": [
              "integer",
              "null"
            ]
          },
          "error": {
            "type": [
              "string",
              "null"
            ]
          },
          "next_retry_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "last_attempt_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "attempts",
          "created_at",
          "endpoint_id",
          "event_id",
          "event_type",
          "id",
          "object",
          "status"
        ]
      },
      "WebhookDeliveryPage": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookDelivery"
            }
          },
          "has_more": {
            "type": "boolean"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data",
          "has_more",
          "next_cursor"
        ]
      },
      "WebhookEndpoint": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "disabled_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "consecutive_failures": {
            "type": "integer"
          },
          "secret_hint": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "consecutive_failures",
          "created_at",
          "enabled",
          "events",
          "id",
          "object",
          "secret_hint",
          "url"
        ]
      },
      "WebhookEndpointInputRequest": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "minLength": 1,
            "maxLength": 2000
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 1
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          }
        },
        "required": [
          "events",
          "url"
        ]
      },
      "WebhookEndpointList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WebhookEndpoint"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "WebhookEndpointWithSecret": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "events": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "disabled_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "consecutive_failures": {
            "type": "integer"
          },
          "secret_hint": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "secret": {
            "type": "string"
          }
        },
        "required": [
          "consecutive_failures",
          "created_at",
          "enabled",
          "events",
          "id",
          "object",
          "secret",
          "secret_hint",
          "url"
        ]
      },
      "Problem": {
        "type": "object",
        "required": [
          "type",
          "title",
          "status",
          "code"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable code (see README of the API)"
          },
          "request_id": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "WebhookEvent": {
        "type": "object",
        "required": [
          "id",
          "object",
          "type",
          "created",
          "api_version",
          "livemode",
          "data"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "evt_..., deduplicate on it"
          },
          "object": {
            "type": "string",
            "const": "event"
          },
          "type": {
            "type": "string",
            "enum": [
              "transcription.completed",
              "transcription.failed",
              "processing.completed",
              "processing.failed",
              "document.generated",
              "document.failed",
              "usage.threshold_reached",
              "ping"
            ]
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "api_version": {
            "type": "string"
          },
          "livemode": {
            "type": "boolean"
          },
          "data": {
            "type": "object",
            "properties": {
              "object": {
                "description": "A Job (with `meeting` or `document` embedded on success) for transcription.*, processing.* and document.*; a usage alert for usage.threshold_reached",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/Job"
                  },
                  {
                    "type": "object"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key (`mtgz_live_...`) or OAuth 2.1 access token."
      }
    },
    "headers": {
      "X-RateLimit-Limit": {
        "description": "Requests allowed per minute for this credential",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Remaining": {
        "description": "Requests left in the current window",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Reset": {
        "description": "Unix time when the window resets",
        "schema": {
          "type": "integer"
        }
      },
      "X-Request-Id": {
        "description": "Request identifier (quote it when reporting a problem)",
        "schema": {
          "type": "string"
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://app.meetingize.com/api",
      "description": "Meetingize API"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Check your credential."
    },
    {
      "name": "Meetings",
      "description": "Read meetings: list/search, detail, AI report, participants, LLM export (GET only)."
    },
    {
      "name": "Meeting management",
      "description": "Create a meeting from audio (this starts its processing), update it (title, date, tags, participants), delete it."
    },
    {
      "name": "Transcripts",
      "description": "Diarized, timestamped transcripts in json, md, txt, srt, vtt."
    },
    {
      "name": "Templates",
      "description": "Document templates and personas."
    },
    {
      "name": "Documents",
      "description": "Generate documents from a meeting and read them (md, pdf, docx)."
    },
    {
      "name": "Jobs",
      "description": "Track long operations (meeting processing, document generation): status queued -> processing -> completed | failed. Poll here or use webhooks."
    },
    {
      "name": "Webhooks",
      "description": "Manage webhook endpoints. Event payloads are documented in `webhooks`."
    },
    {
      "name": "Usage",
      "description": "Consumption, wallet, on-demand billing, ledger."
    },
    {
      "name": "Feedback",
      "description": "Send a bug report, a feature request or a question to the team."
    }
  ],
  "webhooks": {
    "transcription.completed": {
      "post": {
        "summary": "Transcript ready",
        "description": "The diarized transcript is available (GET /meetings/{id}/transcript). The AI report is still being produced (unless transcribe_only). Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_transcription_completed",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "transcription.completed",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "object": "job",
                    "kind": "meeting_processing",
                    "status": "processing",
                    "stage": "summarizing",
                    "progress": 0.67,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": null,
                    "parent_job_id": null,
                    "transcribe_only": false,
                    "document_templates": [
                      "tpl_42"
                    ],
                    "document_job_ids": [],
                    "error": null,
                    "usage": null,
                    "metadata": {
                      "crm_id": "OPP-1234"
                    },
                    "created_at": "2026-10-14T09:00:02Z",
                    "started_at": "2026-10-14T09:00:03Z",
                    "finished_at": null
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "transcription.failed": {
      "post": {
        "summary": "Transcription failed",
        "description": "The audio could not be transcribed (unreadable file, unreachable audio_url...). The meeting is `failed`. Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_transcription_failed",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "transcription.failed",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "object": "job",
                    "kind": "meeting_processing",
                    "status": "failed",
                    "stage": "transcribing",
                    "progress": null,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": null,
                    "parent_job_id": null,
                    "transcribe_only": false,
                    "document_templates": [
                      "tpl_42"
                    ],
                    "document_job_ids": [],
                    "error": {
                      "code": "transcription_failed",
                      "message": "Transcription failed. Check that the file is a valid audio/video recording and retry."
                    },
                    "usage": null,
                    "metadata": {
                      "crm_id": "OPP-1234"
                    },
                    "created_at": "2026-10-14T09:00:02Z",
                    "started_at": null,
                    "finished_at": "2026-10-14T09:01:10Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "processing.completed": {
      "post": {
        "summary": "Meeting processing completed",
        "description": "End of the meeting processing: AI report ready (or transcript only for transcribe_only). Requested documents are now being generated (`document_job_ids`). Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_processing_completed",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "processing.completed",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "object": "job",
                    "kind": "meeting_processing",
                    "status": "completed",
                    "stage": "done",
                    "progress": 1,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": null,
                    "parent_job_id": null,
                    "transcribe_only": false,
                    "document_templates": [
                      "tpl_42"
                    ],
                    "document_job_ids": [
                      "job_8e8d822e2216426fb59037de6b13643b"
                    ],
                    "error": null,
                    "usage": {
                      "cost_eur": "0.0373",
                      "wallet_eur": "0.0373",
                      "on_demand_eur": "0.0000",
                      "ledger_entry_ids": [
                        "led_0c8616464958428083838",
                        "led_da03e5e9b8d34986b1bf6"
                      ]
                    },
                    "metadata": {
                      "crm_id": "OPP-1234"
                    },
                    "created_at": "2026-10-14T09:00:02Z",
                    "started_at": "2026-10-14T09:00:03Z",
                    "finished_at": "2026-10-14T09:06:40Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "processing.failed": {
      "post": {
        "summary": "AI report failed",
        "description": "The transcript is available but the AI report failed. Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_processing_failed",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "processing.failed",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "object": "job",
                    "kind": "meeting_processing",
                    "status": "failed",
                    "stage": "summarizing",
                    "progress": null,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": null,
                    "parent_job_id": null,
                    "transcribe_only": false,
                    "document_templates": [
                      "tpl_42"
                    ],
                    "document_job_ids": [],
                    "error": {
                      "code": "processing_failed",
                      "message": "The AI meeting report failed. The transcript remains available."
                    },
                    "usage": null,
                    "metadata": {
                      "crm_id": "OPP-1234"
                    },
                    "created_at": "2026-10-14T09:00:02Z",
                    "started_at": null,
                    "finished_at": "2026-10-14T09:01:10Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "document.generated": {
      "post": {
        "summary": "Document generated",
        "description": "A document is ready (GET /documents/{document_id}). Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_document_generated",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "document.generated",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_8e8d822e2216426fb59037de6b13643b",
                    "object": "job",
                    "kind": "document_generation",
                    "status": "completed",
                    "stage": "done",
                    "progress": 1,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": "doc_131",
                    "parent_job_id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "transcribe_only": null,
                    "document_templates": null,
                    "document_job_ids": null,
                    "error": null,
                    "usage": {
                      "cost_eur": "0.0023",
                      "wallet_eur": "0.0023",
                      "on_demand_eur": "0.0000",
                      "ledger_entry_ids": [
                        "led_27613475c7eb4438aaaf1"
                      ]
                    },
                    "metadata": null,
                    "created_at": "2026-10-14T09:06:41Z",
                    "started_at": "2026-10-14T09:06:42Z",
                    "finished_at": "2026-10-14T09:08:30Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "document.failed": {
      "post": {
        "summary": "Document generation failed",
        "description": "A document could not be generated (or not started, e.g. wallet exhausted for a document requested at creation). Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_document_failed",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "document.failed",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "id": "job_8e8d822e2216426fb59037de6b13643b",
                    "object": "job",
                    "kind": "document_generation",
                    "status": "failed",
                    "stage": "done",
                    "progress": 1,
                    "meeting_id": "5f1ecb29-94a1-4280-85d7-58281ce689e5",
                    "document_id": null,
                    "parent_job_id": "job_c2f98d5b967d43fa8c6f8c845ff875bf",
                    "transcribe_only": null,
                    "document_templates": null,
                    "document_job_ids": null,
                    "error": {
                      "code": "generation_failed",
                      "message": "Document generation failed. Retry later."
                    },
                    "usage": null,
                    "metadata": null,
                    "created_at": "2026-10-14T09:06:41Z",
                    "started_at": "2026-10-14T09:06:42Z",
                    "finished_at": "2026-10-14T09:08:30Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "usage.threshold_reached": {
      "post": {
        "summary": "Usage threshold reached",
        "description": "Consumption reached 50/80/100 % of the monthly allowance (kind wallet) or 80/100 % of the on-demand spend cap (kind on_demand). Sent once per threshold and month. Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_usage_threshold_reached",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "usage.threshold_reached",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "object": "usage_alert",
                    "period": "2026-10",
                    "kind": "wallet",
                    "threshold_percent": 80,
                    "used_eur": "4.0100",
                    "limit_eur": "5.0000"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    },
    "ping": {
      "post": {
        "summary": "Test event",
        "description": "Sent by the \"send test\" action only. Headers: `Meetingize-Signature`, `Meetingize-Event-Id`, `Meetingize-Event-Type`, `Meetingize-Delivery-Id`. Answer 2xx within 10 s.",
        "operationId": "webhook_ping",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookEvent"
              },
              "example": {
                "id": "evt_7d1f0c9a2b3e4f5a6b7c8d9e",
                "object": "event",
                "type": "ping",
                "created": "2026-10-14T09:06:41Z",
                "api_version": "2026-10-01",
                "livemode": true,
                "data": {
                  "object": {
                    "object": "ping",
                    "message": "Test event from Meetingize",
                    "endpoint_id": "we_3b1f0a"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Any 2xx acknowledges the event; anything else is retried."
          }
        }
      }
    }
  }
}