# API Contracts

Base path: `/api`.

## Health/Auth

- `GET /api/health`
- `GET /api/me`
- `POST /api/auth/login`
- `POST /api/auth/logout`

## Videos

- `GET /api/videos`
- `POST /api/videos/upload` multipart upload
- `GET /api/videos/{id}`
- `PATCH /api/videos/{id}`
- `POST /api/videos/{id}/archive`
- `GET /api/videos/{id}/media`

## Drafts

- `GET /api/post-drafts`
- `POST /api/post-drafts`
- `GET /api/post-drafts/{id}`
- `PATCH /api/post-drafts/{id}` creates a metadata version diff.
- `POST /api/post-drafts/{id}/approve`
- `POST /api/post-drafts/{id}/schedule`

## Accounts

- `GET /api/accounts`
- `POST /api/accounts/{provider}/connect/start`
- `GET /api/accounts/{provider}/connect/callback`
- `POST /api/accounts/{id}/disconnect`
- `PATCH /api/accounts/{id}/default`

## Publishing

- `POST /api/publish/tiktok/upload-draft/{post_draft_id}` requires `{ "consent_confirmed": true }`.
- `POST /api/publish/youtube/upload/{post_draft_id}` queues a private-upload job.
- `GET /api/publish/jobs/{job_id}`
- `GET /api/publish/logs`

## Topics and ideas

- `GET /api/topics`
- `POST /api/topics`
- `GET /api/topics/{id}`
- `PATCH /api/topics/{id}`
- `POST /api/topics/{id}/action`
- `GET /api/topics/ideas/list`
- `POST /api/topics/ideas`
- `PATCH /api/topics/ideas/{id}`
- `POST /api/topics/ideas/{id}/source-link`

## Imports

- `POST /api/imports/scan`
- `POST /api/imports/packages`
- `GET /api/imports/logs`

A legacy internal import alias may remain for compatibility, but product-facing clients should use `/api/imports/packages`.

## Dashboard summary

- `GET /api/dashboard/summary`

Returns counts for ready approval, needs metadata, scheduled private uploads, private/draft uploads, failed actions, ideas waiting, next topic, recent packages and current content pipeline.

## Analytics

- `POST /api/analytics/import-csv`

All API call logs must use redacted request/response payloads.
