openapi: 3.2.0 info: title: Savee Public User API version: 1.0.0 contact: name: Savee url: https://docs.savee.com email: hey@savee.com termsOfService: https://savee.com/terms/ license: name: Proprietary — Savee Terms of Service url: https://savee.com/terms/ description: 'Read-only REST API exposing a Savee user’s own saves, boards, and home feed, plus search over Savee’s public library. Authenticate with either a personal access token (`sv_live_…`) generated in your Savee settings, or an OAuth 2.1 access token (`sv_at_…`) obtained on one of your users’ behalf. OAuth tokens are limited to the scopes the user approved; personal tokens carry all of them. **Image format** — `media.thumbnail` and `media.original` for image saves are AVIF by default. Clients that cannot decode AVIF should send the request header `Avif-Fallback: 1` to receive JPG URLs instead. Video originals are always MP4.' servers: - url: https://api.savee.com tags: - name: User paths: /v1/me: get: summary: Get the authenticated user tags: - User security: - BearerAuth: [] - OAuth2: - profile:read responses: '200': description: Authenticated user. content: application/json: schema: $ref: '#/components/schemas/Me' '400': description: Invalid input. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Missing or invalid Bearer token. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '402': description: Authenticated but the user has no active subscription. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: The Public API is not available on this account. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '429': description: Rate limit exceeded. Retry after the number of seconds in `Retry-After`. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '500': description: Unexpected server error. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' components: schemas: Me: type: object properties: id: type: string description: User identifier. Stable across renames. example: 63e1a4c2d242ec00094007f1 username: type: string description: Current username. May change if the user renames. example: aliceb name: type: string example: Alice Bauer url: type: string format: uri example: https://savee.com/aliceb/ avatar_url: type: string format: uri example: https://dm.savee.com/user-avatar/original/8kQ2mZp.jpg plan: type: object properties: active: type: boolean example: true tiers: type: array items: type: string example: - pro required: - active - tiers description: The caller’s subscription state. `active` must be true to use the API. required: - id - username - name - url - avatar_url - plan ErrorResponse: type: object properties: error: type: object properties: code: type: string message: type: string required: - code - message required: - error securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: sv_live_… description: '**Personal access token** (`sv_live_…`) — represents you and carries every scope, so no scope is required for this call. Best for your own scripts and internal tools. Generate one at https://savee.com/developers/.' OAuth2: type: oauth2 description: '**OAuth access token** (`sv_at_…`) — obtained on one of your users’ behalf and limited to the scopes they approved. Use this when you’re building a product other people sign into with Savee. See https://docs.savee.com/api/oauth. Missing the scope below returns `403` with a `WWW-Authenticate: Bearer error="insufficient_scope"` header naming it.' flows: authorizationCode: authorizationUrl: https://savee.com/oauth/authorize/ tokenUrl: https://savee.com/api/oauth/token/ refreshUrl: https://savee.com/api/oauth/token/ scopes: profile:read: Read the user’s username, name, and avatar saves:read: Read the user’s saves and home feed boards:read: Read the user’s boards and the saves on them search:read: Search Savee’s public library on the user’s behalf