Sketchfab Data API

REST API for reading and writing Sketchfab data. Upload, list, update, and delete 3D models; manage collections, comments, likes, and bookmarks; search the public model catalog; and manage user, organization, and project resources. Supports OAuth 2.0 and personal API token authentication. Base URL is https://api.sketchfab.com with version 3 endpoints under /v3/.

Sketchfab Data API is one of 5 APIs that Sketchfab publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 4 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include 3D, Models, Marketplace, and Content. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, a JSON-LD context, 4 Naftiko capability specs, and 1 JSON Schema.

OpenAPI Specification

sketchfab-data-api-openapi.yml Raw ↑
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 <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