openapi: 3.1.0 info: title: Sketchfab Data API description: > The Sketchfab Data API v3 provides programmatic read and write access to Sketchfab content. Authenticated callers can upload new 3D models, edit model metadata and settings, manage collections, comments, likes, and bookmarks, search the public model catalog, and administer organizations and projects. Public endpoints (model search, model detail, user profile) are available without authentication. version: v3 contact: name: Sketchfab Developer Support url: https://support.fab.com/s/?ProductOrigin=Sketchfab license: name: Sketchfab Developer Terms of Use url: https://sketchfab.com/developers/terms servers: - url: https://api.sketchfab.com description: Production API security: - OAuth2: [] - ApiTokenAuth: [] tags: - name: Models description: Manage 3D models — upload, list, retrieve, update, delete. - name: Search description: Search public Sketchfab content. - name: Users description: Retrieve user account information. - name: Collections description: Group models into themed collections. - name: Comments description: Comments on a model. - name: Likes description: Likes (favorites) on a model. - name: Bookmarks description: Personal bookmarks. - name: Categories description: Public Sketchfab category taxonomy. - name: Tags description: Tag-based discovery. - name: Orgs description: Organization, project, and member management. paths: /v3/models: get: summary: Search 3D Models description: Search the public catalog of 3D models with full-text query, tags, categories, license, downloadable filter, and sort options. operationId: searchModels tags: - Models - Search parameters: - name: q in: query description: Full-text search query. schema: type: string - name: tags in: query description: Comma-separated list of tag slugs. schema: type: string - name: categories in: query description: Comma-separated list of category slugs. schema: type: string - name: downloadable in: query description: Restrict to downloadable models. schema: type: boolean - name: license in: query description: License filter (e.g. by, by-sa, cc0, ed, st). schema: type: string - name: sort_by in: query description: Sort order (-publishedAt, -likeCount, -viewCount, -processedAt). schema: type: string - name: cursor in: query description: Pagination cursor returned by previous response. schema: type: string responses: '200': description: Paginated list of models. content: application/json: schema: $ref: '#/components/schemas/ModelList' post: summary: Upload A Model description: Create a new model from an uploaded 3D asset. Send multipart/form-data with the model file and metadata fields. Returns a model uid that can be polled until processing completes. operationId: uploadModel tags: - Models requestBody: required: true content: multipart/form-data: schema: type: object required: - modelFile - name properties: modelFile: type: string format: binary description: The 3D model archive (zip) or single supported file. name: type: string description: type: string tags: type: string description: Space- or comma-separated tags. categories: type: string description: Comma-separated category slugs. license: type: string description: License slug (e.g. cc-by, cc-by-sa, cc0, st). private: type: boolean password: type: string isPublished: type: boolean source: type: string description: Source application identifier (e.g. blender-exporter). responses: '201': description: Model created and queued for processing. content: application/json: schema: type: object properties: uid: type: string uri: type: string format: uri '400': $ref: '#/components/responses/Error' '401': $ref: '#/components/responses/Error' /v3/models/{uid}: get: summary: Retrieve A Model description: Get the public detail record for a single model — metadata, viewer URL, embed URL, thumbnails, and download availability. operationId: getModel tags: - Models parameters: - $ref: '#/components/parameters/ModelUid' responses: '200': description: Model detail. content: application/json: schema: $ref: '#/components/schemas/Model' '404': $ref: '#/components/responses/Error' patch: summary: Update A Model description: Update editable fields on a model owned by the authenticated user (name, description, tags, categories, license, private flag, password, publish state). operationId: updateModel tags: - Models parameters: - $ref: '#/components/parameters/ModelUid' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ModelUpdate' responses: '204': description: Model updated. '401': $ref: '#/components/responses/Error' '404': $ref: '#/components/responses/Error' delete: summary: Delete A Model description: Permanently delete a model owned by the authenticated user. operationId: deleteModel tags: - Models parameters: - $ref: '#/components/parameters/ModelUid' responses: '204': description: Model deleted. '401': $ref: '#/components/responses/Error' '404': $ref: '#/components/responses/Error' /v3/models/{uid}/comments: get: summary: List Model Comments description: Retrieve comments posted on a model. operationId: listModelComments tags: - Comments parameters: - $ref: '#/components/parameters/ModelUid' responses: '200': description: Comment list. content: application/json: schema: type: object properties: results: type: array items: $ref: '#/components/schemas/Comment' /v3/models/{uid}/likes: post: summary: Like A Model description: Like the model on behalf of the authenticated user. operationId: likeModel tags: - Likes parameters: - $ref: '#/components/parameters/ModelUid' responses: '201': description: Like created. '401': $ref: '#/components/responses/Error' delete: summary: Unlike A Model description: Remove the authenticated user's like for the model. operationId: unlikeModel tags: - Likes parameters: - $ref: '#/components/parameters/ModelUid' responses: '204': description: Like removed. /v3/me: get: summary: Retrieve The Current User description: Get the authenticated user's profile, plan, and account metadata. operationId: getCurrentUser tags: - Users responses: '200': description: Authenticated user. content: application/json: schema: $ref: '#/components/schemas/User' '401': $ref: '#/components/responses/Error' /v3/users/{username}: get: summary: Retrieve A User description: Public profile for the requested user. operationId: getUser tags: - Users parameters: - name: username in: path required: true schema: type: string responses: '200': description: User profile. content: application/json: schema: $ref: '#/components/schemas/User' /v3/collections: get: summary: List Collections description: List collections for the authenticated user or for the user filter. operationId: listCollections tags: - Collections parameters: - name: user in: query schema: type: string - name: cursor in: query schema: type: string responses: '200': description: Collection list. content: application/json: schema: $ref: '#/components/schemas/CollectionList' post: summary: Create A Collection description: Create a new collection of models. operationId: createCollection tags: - Collections requestBody: required: true content: application/json: schema: type: object required: - name properties: name: type: string description: type: string isPrivate: type: boolean responses: '201': description: Collection created. content: application/json: schema: $ref: '#/components/schemas/Collection' /v3/collections/{uid}/models: post: summary: Add A Model To A Collection description: Add a model to the specified collection. operationId: addModelToCollection tags: - Collections parameters: - name: uid in: path required: true schema: type: string requestBody: required: true content: application/json: schema: type: object required: - models properties: models: type: array items: type: string responses: '201': description: Model(s) added. /v3/search: get: summary: Search Sketchfab description: Unified search across models, collections, and users with a `type` selector. operationId: search tags: - Search parameters: - name: type in: query description: One of `models`, `collections`, or `users`. schema: type: string enum: - models - collections - users - name: q in: query schema: type: string responses: '200': description: Search results. content: application/json: schema: type: object properties: results: type: array items: type: object /v3/categories: get: summary: List Categories description: Public Sketchfab category taxonomy. operationId: listCategories tags: - Categories responses: '200': description: Category list. content: application/json: schema: type: object properties: results: type: array items: $ref: '#/components/schemas/Category' /v3/tags: get: summary: List Tags description: Discover popular and matching tags. operationId: listTags tags: - Tags parameters: - name: q in: query schema: type: string responses: '200': description: Tag list. /v3/me/bookmarks: get: summary: List My Bookmarks description: Retrieve the authenticated user's bookmarked models. operationId: listBookmarks tags: - Bookmarks responses: '200': description: Bookmark list. /v3/orgs/{org}: get: summary: Retrieve An Organization description: Get organization detail, including plan and member count, for organizations the caller belongs to. operationId: getOrg tags: - Orgs parameters: - name: org in: path required: true schema: type: string responses: '200': description: Organization detail. /v3/orgs/{org}/projects: get: summary: List Organization Projects description: List projects (workspaces) within an organization. operationId: listOrgProjects tags: - Orgs parameters: - name: org in: path required: true schema: type: string responses: '200': description: Project list. components: securitySchemes: OAuth2: type: oauth2 description: Sketchfab OAuth 2.0. Access tokens are valid for one month. flows: authorizationCode: authorizationUrl: https://sketchfab.com/oauth2/authorize/ tokenUrl: https://sketchfab.com/oauth2/token/ refreshUrl: https://sketchfab.com/oauth2/token/ scopes: read: Read access to the caller's account, models, and collections. write: Create, update, and delete the caller's models and collections. ApiTokenAuth: type: apiKey in: header name: Authorization description: Personal API token sent as `Authorization: Token `. parameters: ModelUid: name: uid in: path required: true description: Sketchfab model UID (hex string in the URL after /models/). schema: type: string responses: Error: description: Error response. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Model: type: object properties: uid: type: string uri: type: string format: uri name: type: string description: type: string viewerUrl: type: string format: uri embedUrl: type: string format: uri thumbnails: type: object tags: type: array items: type: object properties: slug: type: string name: type: string categories: type: array items: $ref: '#/components/schemas/Category' license: type: object properties: slug: type: string label: type: string uri: type: string user: $ref: '#/components/schemas/User' isDownloadable: type: boolean animationCount: type: integer vertexCount: type: integer faceCount: type: integer viewCount: type: integer likeCount: type: integer commentCount: type: integer publishedAt: type: string format: date-time createdAt: type: string format: date-time ModelUpdate: type: object properties: name: type: string description: type: string tags: type: array items: type: string categories: type: array items: type: string license: type: string private: type: boolean password: type: string isPublished: type: boolean ModelList: type: object properties: cursors: type: object properties: next: type: string nullable: true previous: type: string nullable: true results: type: array items: $ref: '#/components/schemas/Model' User: type: object properties: uid: type: string username: type: string displayName: type: string profileUrl: type: string format: uri account: type: string description: Plan slug (basic, plus, pro, premium, business, enterprise). avatar: type: object Comment: type: object properties: uid: type: string body: type: string user: $ref: '#/components/schemas/User' createdAt: type: string format: date-time Collection: type: object properties: uid: type: string name: type: string description: type: string modelCount: type: integer embedUrl: type: string format: uri user: $ref: '#/components/schemas/User' CollectionList: type: object properties: results: type: array items: $ref: '#/components/schemas/Collection' Category: type: object properties: slug: type: string name: type: string uri: type: string format: uri Error: type: object properties: detail: type: string code: type: string