generated: '2026-09-25' method: searched source: - https://framethrower.ai/api/v1 - openapi/framethrower-openapi.yml - https://framethrower.ai/llms.txt authentication: Bearer personal access token (ft_ prefix) on REST; OAuth 2.1 on MCP. See authentication/framethrower-authentication.yml. idempotency: coverage: na note: No write surface. Every operation is a read or a search (the POST endpoints carry search criteria in the body and change no state), so replay protection does not apply. reversibility: status: na note: Read-only API; no operation creates, modifies or deletes a resource. pagination: style: page params: [page, per_page] operations: [listFilms, listFilmFrames] note: /search also accepts offset and limit in the request body. versioning: scheme: URL path current: v1 note: Base https://framethrower.ai/api/v1; OpenAPI info.version 1.0.0. error_envelope: shape: '{ "error": "message" }' statuses_documented: [400, 401, 402, 403, 404, 500] source: https://framethrower.ai/api/v1 note: 402 carries code insufficient_credits with cost, balance and buy_credits. See errors/framethrower-problem-types.yml. metadata: response_shape: '{ data, meta }' rate_limit_signaling: headers: [X-Credits-Cost, X-Credits-Remaining] exhaustion_status: 402 note: The provider states there are no rate limits; metering is by credits, signalled per response.