TechArt Utils

API reference · v1

TechArt Utils REST API

Everything the web app does with workspaces, assets and conversions is available over HTTPS. Use it from build scripts, CI, or DCC plugins (Maya, Blender, Unreal, Unity). Base URL:

Base URL
https://techart.tools/api/v1

Machine-readable description: /api/v1/openapi.json (OpenAPI 3.1; import into Postman, Insomnia or a client generator).

Authentication

Send credentials as a bearer token. Two kinds are accepted:

  • Firebase ID token: what the web app uses. Acts as the signed-in user with their role in each workspace. Tokens expire after one hour.
  • Workspace API key (tau_…): created by an admin under Workspace settings → API keys. Scoped to one workspace; read keys act as a viewer, write keys as an editor. Keys can’t manage members, invites or other keys. API key access depends on the workspace’s plan.
Example
curl "https://techart.tools/api/v1/workspaces/$WS/assets" \
  -H "Authorization: Bearer tau_xxxxxxxxxxxx_…"

Errors

Errors use a consistent JSON body. Validation errors list each failing field in `details`.

Error body
{
  "error": {
    "code": "bad_request",
    "message": "Invalid request body.",
    "details": [
      {
        "path": "sizeBytes",
        "message": "Too small"
      }
    ]
  }
}
400bad_requestThe request body, query or path parameters failed validation.
401unauthenticatedNo credentials, or the ID token / API key is invalid or expired.
402quota_exceeded | feature_unavailableA plan limit was reached or the feature is not in the plan. `details` has `plan` plus `resource`, `limit`, `used`, `over` (already above the limit, e.g. after a downgrade) or `feature`.
403forbiddenAuthenticated, but the role or API key scope does not allow this.
404not_foundThe workspace or resource does not exist, or you are not a member.
409conflictThe request conflicts with the current state (e.g. upload already completed).
422invalid_referencesA document references assets that are missing, not ready or in another workspace.
503not_configuredA backing service (storage, worker) is not configured.

Workspaces you are not a member of return 404 rather than 403, so ids can’t be probed.

Pagination

List endpoints that can grow large take limit and cursor. Pass the previous response’s nextCursor to get the next page; it is null on the last page.

Uploading files

Uploads are three steps: start, PUT the bytes directly to object storage using the presigned URL, then complete. Files of 100 MB or more use multipart: request part URLs, upload parts in parallel, and pass every part’s ETag to complete.

bash
# 1. Start the upload
curl -X POST "https://techart.tools/api/v1/workspaces/$WS/uploads" \
  -H "Authorization: Bearer $TAU_TOKEN" -H "Content-Type: application/json" \
  -d '{"filename":"hero.glb","sizeBytes":'$(stat -c%s hero.glb)'}' > init.json

# 2. PUT the bytes straight to storage (mode = "single")
curl -X PUT "$(jq -r .uploadUrl init.json)" \
  -H "content-type: $(jq -r '.headers["content-type"]' init.json)" \
  --data-binary @hero.glb

# 3. Complete
curl -X POST "https://techart.tools/api/v1/workspaces/$WS/uploads/$(jq -r .asset.id init.json)/complete" \
  -H "Authorization: Bearer $TAU_TOKEN" -H "Content-Type: application/json" -d '{}'

Scenes & references

A scene (kind: "scene", a .scene JSON file) is a model plus the shaders, parameters and textures on its materials, saved as references to other assets in the same workspace. Shader graphs (.shadergraph) and sketches (.shadersketch) reference their textures the same way. A reference is { assetId, version, follow }: follow: "latest" uses the newest version, "pinned" always uses version.

  • Saving: upload the document like any file. Completing the upload checks every reference and fails with 422 invalid_references (with details.problems) if one is missing.
  • Opening: GET …/bundle returns the parsed document and a download URL for each dependency at the version it resolves to, in one request.
  • What uses an asset: GET …/used-by.
  • Share links return only the scene file, not its dependencies; open shared scenes from the workspace.
hero.scene
{
  "format": "techart.scene",
  "version": 1,
  "model": {
    "assetId": "a1",
    "version": 3,
    "follow": "latest"
  },
  "materials": [
    {
      "match": {
        "name": "M_Body",
        "index": 0
      },
      "shader": {
        "assetId": "s7",
        "version": 2,
        "follow": "latest"
      },
      "parameters": {
        "tint": [
          1,
          0.5,
          0.2
        ]
      },
      "textures": {
        "albedo": {
          "assetId": "t4",
          "version": 1,
          "follow": "pinned"
        },
        "normal": {
          "source": "model",
          "slot": "normalMap"
        }
      }
    },
    {
      "match": {
        "name": "M_Glass",
        "index": 1
      },
      "shader": null,
      "parameters": {},
      "textures": {
        "map": {
          "assetId": "t9",
          "version": 1,
          "follow": "latest"
        }
      }
    }
  ],
  "view": {
    "environment": "courtyard",
    "envRotation": 0,
    "exposure": 1,
    "camera": {
      "position": [
        3,
        2,
        4
      ],
      "target": [
        0,
        0.5,
        0
      ]
    }
  }
}

Plans & limits

Storage, maximum file size, members and API keys depend on the workspace’s plan. Limits are returned by GET /workspaces/{workspaceId} and GET /plans. Exceeding one returns 402 quota_exceeded.

Meta

Service health and the machine-readable API description.

GET/healthPublic

Health check

Response · 200

okrequired
true
versionrequired
string
timerequired
string
storagerequired
boolean

Errors

    curl
    curl -X GET "https://techart.tools/api/v1/health"
    GET/openapi.jsonPublic

    OpenAPI document

    The OpenAPI 3.1 description of this API. Import it into Postman, Insomnia or a client generator.

    Response · 200

    map

    Errors

      curl
      curl -X GET "https://techart.tools/api/v1/openapi.json"

      Account

      The signed-in user and available plans.

      GET/meID token only

      Get the current user

      Returns the signed-in user and every workspace they belong to. On first call this also creates the user record and their personal workspace.

      Response · 200

      userrequired
      object
      uidrequired
      string
      emailrequired
      string | null
      displayNamerequired
      string | null
      photoURLrequired
      string | null
      workspacesrequired
      object[]
      idrequired
      string

      pattern ^[A-Za-z0-9_-]{1,128}$

      namerequired
      string

      min length 1 · max length 80

      typerequired
      enum

      One of: "personal""team"

      planrequired
      enum

      One of: "free""pro""studio"

      iconrequired
      string | null

      Workspace icon as an image data URL, or null for the default letter tile

      max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

      rolerequired
      enum

      One of: "viewer""editor""admin""owner"

      lastWorkspaceIdrequired
      string | null
      storageEnabledrequired
      boolean

      False when the server has no object storage configured; uploads and downloads are unavailable

      emailEnabledrequired
      boolean

      True when the server emails invites; otherwise invite links must be shared manually

      Errors

      curl
      curl -X GET "https://techart.tools/api/v1/me" \
        -H "Authorization: Bearer $TAU_TOKEN"
      GET/plansPublic

      List plans and their limits

      Response · 200

      Array of objects:

      idrequired
      string
      labelrequired
      string
      limitsrequired
      map
      featuresrequired
      map

      Errors

        curl
        curl -X GET "https://techart.tools/api/v1/plans"
        PATCH/meID token only

        Update the current user

        Request body

        displayName
        string

        min length 1 · max length 80

        lastWorkspaceId
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        Response · 204

        No content.

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/me" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"displayName":"string","lastWorkspaceId":"abc123"}'

        Workspaces

        Workspaces own all saved data. Every user has a personal workspace and can create team workspaces.

        POST/workspacesID token only

        Create a team workspace

        Creates a new team workspace with the caller as owner. Workspaces start on the Free plan; each person may create 1 free team workspace (besides their personal one), so another needs an existing one upgraded or deleted first (402 quota_exceeded).

        Request body

        namerequired
        string

        min length 1 · max length 80

        engineProfile
        enum

        One of: "unity""unreal""godot""threejs"

        Default: "unity"

        Response · 201

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        typerequired
        enum

        One of: "personal""team"

        ownerUidrequired
        string
        planrequired
        enum

        One of: "free""pro""studio"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        storageBucketrequired
        string

        R2 bucket that stores this workspace's objects

        storageBytesUsedrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        iconrequired
        string | null

        Workspace icon as an image data URL, or null for the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        createdAtrequired
        string

        ISO-8601 timestamp

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        memberCountrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        limitsrequired
        object
        storageBytesrequired
        number
        maxFileBytesrequired
        number
        workerMinutesPerMonthrequired
        number
        membersrequired
        number
        apiKeysrequired
        number
        featuresrequired
        map
        workerMinutesUsedrequired
        number

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"name":"Hero character","engineProfile":"unity"}'
        DELETE/workspaces/{workspaceId}ID token onlyRole: owner

        Delete a workspace

        Permanently deletes a team workspace, all of its metadata and every stored object. Personal workspaces cannot be deleted. Owner only.

        Parameters

        workspaceIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}ID token or API keyRole: viewer

        Get a workspace

        Includes plan limits, features and current usage.

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        typerequired
        enum

        One of: "personal""team"

        ownerUidrequired
        string
        planrequired
        enum

        One of: "free""pro""studio"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        storageBucketrequired
        string

        R2 bucket that stores this workspace's objects

        storageBytesUsedrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        iconrequired
        string | null

        Workspace icon as an image data URL, or null for the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        createdAtrequired
        string

        ISO-8601 timestamp

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        memberCountrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        limitsrequired
        object
        storageBytesrequired
        number
        maxFileBytesrequired
        number
        workerMinutesPerMonthrequired
        number
        membersrequired
        number
        apiKeysrequired
        number
        featuresrequired
        map
        workerMinutesUsedrequired
        number

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspacesID token only

        List your workspaces

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        typerequired
        enum

        One of: "personal""team"

        planrequired
        enum

        One of: "free""pro""studio"

        iconrequired
        string | null

        Workspace icon as an image data URL, or null for the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces" \
          -H "Authorization: Bearer $TAU_TOKEN"
        PATCH/workspaces/{workspaceId}ID token onlyRole: admin

        Update workspace settings

        Parameters

        workspaceIdpathrequired

        string

        Request body

        name
        string

        min length 1 · max length 80

        engineProfile
        enum

        One of: "unity""unreal""godot""threejs"

        icon
        string | null

        Image data URL, or null to reset to the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        typerequired
        enum

        One of: "personal""team"

        ownerUidrequired
        string
        planrequired
        enum

        One of: "free""pro""studio"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        storageBucketrequired
        string

        R2 bucket that stores this workspace's objects

        storageBytesUsedrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        iconrequired
        string | null

        Workspace icon as an image data URL, or null for the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        createdAtrequired
        string

        ISO-8601 timestamp

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        memberCountrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        limitsrequired
        object
        storageBytesrequired
        number
        maxFileBytesrequired
        number
        workerMinutesPerMonthrequired
        number
        membersrequired
        number
        apiKeysrequired
        number
        featuresrequired
        map
        workerMinutesUsedrequired
        number

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/workspaces/<workspaceId>" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"name":"Hero character","engineProfile":"unity","icon":"string"}'

        Members

        Membership, roles and email invites. Roles: viewer < editor < admin < owner.

        GET/workspaces/{workspaceId}/membersID token or API keyRole: viewer

        List workspace members

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        Array of objects:

        uidrequired
        string
        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        emailrequired
        string | null
        displayNamerequired
        string | null
        joinedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/members" \
          -H "Authorization: Bearer $TAU_TOKEN"
        DELETE/workspaces/{workspaceId}/members/{uid}ID token onlyRole: viewer

        Remove a member (or leave)

        Admins can remove editors and viewers; owners can remove anyone except the workspace creator. Any member can remove themselves (leave).

        Parameters

        workspaceIdpathrequired

        string

        uidpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/members/<uid>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        PATCH/workspaces/{workspaceId}/members/{uid}ID token onlyRole: admin

        Change a member’s role

        Admins can change roles between viewer and editor. Only owners can grant or revoke admin/owner. Granting owner does not remove the existing owner.

        Parameters

        workspaceIdpathrequired

        string

        uidpathrequired

        string

        Request body

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        Response · 200

        uidrequired
        string
        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        emailrequired
        string | null
        displayNamerequired
        string | null
        joinedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/workspaces/<workspaceId>/members/<uid>" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"role":"viewer"}'
        POST/invites/acceptID token only

        Accept an invite

        Joins the workspace referenced by the invite token. The signed-in email must match the invited email.

        Request body

        tokenrequired
        string

        min length 10 · max length 400

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        typerequired
        enum

        One of: "personal""team"

        planrequired
        enum

        One of: "free""pro""studio"

        iconrequired
        string | null

        Workspace icon as an image data URL, or null for the default letter tile

        max length 200000 · pattern ^data:image\/(png|jpeg|webp|gif);base64,[A-Za-z0-9+/=]+$

        rolerequired
        enum

        One of: "viewer""editor""admin""owner"

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/invites/accept" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"token":"string"}'
        POST/workspaces/{workspaceId}/invitesID token onlyRole: admin

        Invite someone by email

        Creates an invite valid for 7 days and returns an accept link. When the server has email configured (Resend), the link is also emailed to the invitee and emailSent is true; otherwise share the link yourself. The invitee must sign in with the invited email address. Only owners can invite admins.

        Parameters

        workspaceIdpathrequired

        string

        Request body

        emailrequired
        string (email)

        pattern ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$

        role
        enum

        One of: "viewer""editor""admin"

        Default: "editor"

        Response · 201

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        emailrequired
        string (email)

        pattern ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$

        rolerequired
        enum

        One of: "viewer""editor""admin"

        expiresAtrequired
        string

        ISO-8601 timestamp

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        acceptUrlrequired
        string

        Single-use link; shown only once

        emailSentrequired
        boolean

        True when the invite was emailed to the invitee

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/invites" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"email":"artist@example.com","role":"editor"}'
        GET/workspaces/{workspaceId}/invitesID token onlyRole: admin

        List pending invites

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        emailrequired
        string (email)

        pattern ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$

        rolerequired
        enum

        One of: "viewer""editor""admin"

        expiresAtrequired
        string

        ISO-8601 timestamp

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/invites" \
          -H "Authorization: Bearer $TAU_TOKEN"
        DELETE/workspaces/{workspaceId}/invites/{inviteId}ID token onlyRole: admin

        Revoke an invite

        Parameters

        workspaceIdpathrequired

        string

        inviteIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/invites/<inviteId>" \
          -H "Authorization: Bearer $TAU_TOKEN"

        Folders

        Organize assets into a folder tree.

        POST/workspaces/{workspaceId}/foldersID token or API keyRole: editor

        Create a folder

        Parameters

        workspaceIdpathrequired

        string

        Request body

        namerequired
        string

        min length 1 · max length 80

        parentId
        string | null

        Default: null

        pattern ^[A-Za-z0-9_-]{1,128}$

        Response · 201

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        parentIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        createdAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/folders" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"name":"Hero character","parentId":"abc123"}'
        DELETE/workspaces/{workspaceId}/folders/{folderId}ID token or API keyRole: editor

        Delete an empty folder

        Parameters

        workspaceIdpathrequired

        string

        folderIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/folders/<folderId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/foldersID token or API keyRole: viewer

        List folders

        Returns every folder in the workspace as a flat list; build the tree from parentId.

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        parentIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        createdAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/folders" \
          -H "Authorization: Bearer $TAU_TOKEN"
        PATCH/workspaces/{workspaceId}/folders/{folderId}ID token or API keyRole: editor

        Rename or move a folder

        Parameters

        workspaceIdpathrequired

        string

        folderIdpathrequired

        string

        Request body

        name
        string

        min length 1 · max length 80

        parentId
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        parentIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        createdAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/workspaces/<workspaceId>/folders/<folderId>" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"name":"Hero character","parentId":"abc123"}'

        Assets

        Files saved in a workspace (models, textures, shaders…) and their versions.

        POST/workspaces/{workspaceId}/assets/{assetId}/thumbnailID token or API keyRole: editor

        Get a thumbnail upload URL

        Returns a presigned PUT URL for the current version’s thumbnail (max 2 MB). After uploading, PATCH the asset with hasThumbnail: true.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        contentType
        enum

        One of: "image/webp""image/png""image/jpeg"

        Default: "image/webp"

        sizeBytesrequired
        integer

        > 0 · ≤ 2097152

        Response · 200

        uploadUrlrequired
        string
        headersrequired
        map

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/thumbnail" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"contentType":"image/webp","sizeBytes":1048576}'
        DELETE/workspaces/{workspaceId}/assets/{assetId}ID token or API keyRole: editor

        Delete an asset

        Deletes the asset, all of its versions and derived files. Storage usage is released immediately.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}ID token or API keyRole: viewer

        Get an asset

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}/bundleID token or API keyRole: viewer

        Open a document with its dependencies

        For a scene, shader graph or sketch: the parsed document, plus a presigned URL for every asset it references, at the right version (the newest for follow: "latest", the given one for follow: "pinned"). For a scene that is the model and each material binding’s shader and library textures, so the Model Viewer opens a scene with this one request.
        References to deleted assets or versions come back with missing: true. URLs are valid for 10 minutes. Other assets return no dependencies. version opens an older version of the document.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        versionquery

        integer

        Response · 200

        assetrequired
        object
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        versionrequired
        integer

        The document version returned

        > 0 · ≤ 9007199254740991

        documentUrlrequired
        string
        documentrequired
        any

        The parsed JSON document (null for assets without references)

        dependenciesrequired
        object[]
        refrequired
        object
        assetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        followrequired
        enum

        One of: "latest""pinned"

        asset
        object
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        filenamerequired
        string
        versionrequired
        integer

        The version `url` serves

        > 0 · ≤ 9007199254740991

        url
        string

        Presigned download URL for that version

        missing
        true

        The asset or the pinned version no longer exists

        expiresAtrequired
        string

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/bundle" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}/downloadID token or API keyRole: viewer

        Get a download URL

        Returns a presigned URL valid for 10 minutes. Pass redirect=true to receive a 302 redirect instead (handy for curl -L). variant=thumbnail returns the 256px WebP thumbnail.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        variantquery

        enum

        versionquery

        integer

        redirectquery

        enum

        Response · 200

        urlrequired
        string
        expiresAtrequired
        string

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/download" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}/used-byID token or API keyRole: viewer

        List what uses an asset

        Scenes, shader graphs and sketches whose latest version references this asset, most recently updated first (up to 50). Deleting the asset is still allowed; those documents then show it as missing.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Response · 200

        assetsrequired
        object[]
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        filenamerequired
        string

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/used-by" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}/versionsID token or API keyRole: viewer

        List asset versions

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Response · 200

        Array of objects:

        versionrequired
        number
        filenamerequired
        string
        sizeBytesrequired
        number
        contentHashrequired
        string | null
        createdByrequired
        string
        createdAtrequired
        string

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/versions" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assetsID token or API keyRole: viewer

        List assets

        Lists ready assets, newest first. Filter by kind and folderId (root for the top level). q does a case-insensitive name prefix search across all folders. Paginate with cursor (the nextCursor from the previous page).

        Parameters

        workspaceIdpathrequired

        string

        kindquery

        enum

        folderIdquery

        string | "root"

        qquery

        string

        limitquery

        integer

        cursorquery

        string

        Response · 200

        assetsrequired
        object[]
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        nextCursorrequired
        string | null

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets" \
          -H "Authorization: Bearer $TAU_TOKEN"
        PATCH/workspaces/{workspaceId}/assets/{assetId}ID token or API keyRole: editor

        Update asset metadata

        Rename, retag, move to a folder, or update tool-computed metadata (e.g. triangle counts).

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        name
        string

        min length 1 · max length 200

        tags
        string[]

        max 32 items

        folderId
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        meta
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        hasThumbnail
        boolean

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{}'

        Uploads

        Direct-to-storage uploads using presigned URLs, including multipart for large files.

        POST/workspaces/{workspaceId}/uploads/{assetId}/abortID token or API keyRole: editor

        Abort an upload

        Cancels the in-progress upload. A brand-new asset is deleted; an existing asset keeps its current version.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        uploadId
        string

        Response · 204

        No content.

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/uploads/<assetId>/abort" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"uploadId":"abc123"}'
        POST/workspaces/{workspaceId}/uploads/{assetId}/completeID token or API keyRole: editor

        Complete an upload

        Verifies the uploaded object (size must match the declared sizeBytes), marks the asset ready and counts it against storage. For multipart uploads pass uploadId and every part’s ETag.

        Documents that reference other assets (.scene, .shadergraph, .shadersketch) are read and checked: every referenced asset must be ready in this workspace, and pinned versions must exist. If not, the response is 422 with details.problems and the upload is cancelled (a new asset is removed; an existing one keeps its current version). On success the asset’s refIds lists the referenced assets.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        uploadId
        string
        parts
        object[]
        partNumberrequired
        integer

        ≥ 1 · ≤ 9007199254740991

        etagrequired
        string

        min length 1

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/uploads/<assetId>/complete" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"uploadId":"abc123","parts":[{"partNumber":1,"etag":"string"}]}'
        POST/workspaces/{workspaceId}/uploadsID token or API keyRole: editor

        Start an upload

        Creates a pending asset (or a new version of assetId) and returns where to upload the bytes. Files go directly to object storage; they never pass through this API.

        • Files under 100 MB use mode: "single": PUT the file to uploadUrl with the returned headers.
        • Larger files use mode: "multipart": request part URLs from /parts, PUT each 64 MB part, keep each response's ETag.

        Then call /complete. Pending uploads that are never completed are deleted after 24 hours.

        Parameters

        workspaceIdpathrequired

        string

        Request body

        filenamerequired
        string

        min length 1 · max length 255

        name
        string

        min length 1 · max length 200

        sizeBytesrequired
        integer

        > 0 · ≤ 9007199254740991

        contentType
        string

        max length 120

        contentHash
        string | null

        Hex SHA-256 of the file

        pattern ^[a-f0-9]{64}$

        kind
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        folderId
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tags
        string[]

        max 32 items

        meta
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        assetId
        string

        Upload a new version of this asset instead of creating one

        pattern ^[A-Za-z0-9_-]{1,128}$

        Response · 201

        Variant 1 · mode = "single"

        moderequired
        "single"
        assetrequired
        object
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        uploadUrlrequired
        string

        Presigned PUT URL

        headersrequired
        map

        Headers that must be sent with the PUT

        Variant 2 · mode = "multipart"

        moderequired
        "multipart"
        assetrequired
        object
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        contentTyperequired
        string
        folderIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        tagsrequired
        string[]

        max 32 items

        statusrequired
        enum

        One of: "pending""ready""failed"

        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        contentHashrequired
        string | null
        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        hasThumbnailrequired
        boolean
        commentCountrequired
        integer

        Unresolved comments

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        refIds
        string[]

        Assets this document references (scenes, shader graphs, sketches); set by the server on upload

        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        uploadIdrequired
        string
        partSizerequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        partCountrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/uploads" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"filename":"hero.glb","sizeBytes":1048576}'
        POST/workspaces/{workspaceId}/uploads/{assetId}/partsID token or API keyRole: editor

        Get multipart part URLs

        Returns presigned PUT URLs for the requested part numbers (1-based). Request in batches of up to 1000.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        uploadIdrequired
        string

        min length 1

        partNumbersrequired
        integer[]

        min 1 items · max 1000 items

        Response · 200

        urlsrequired
        object[]
        partNumberrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        urlrequired
        string

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/uploads/<assetId>/parts" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"uploadId":"abc123","partNumbers":[1]}'

        Comments

        Discussion on assets, optionally pinned to a point on a model or image.

        POST/workspaces/{workspaceId}/assets/{assetId}/commentsID token onlyRole: viewer

        Comment on an asset

        Any member can comment, including viewers.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Request body

        bodyrequired
        string

        min length 1 · max length 4000

        anchor
        object | object | null

        Default: null

        Variant 1

        kindrequired
        "3d"
        positionrequired
        any[]

        min 3 items · max 3 items

        normalrequired
        any[] | null

        min 3 items · max 3 items

        camerarequired
        object | null
        positionrequired
        any[]

        min 3 items · max 3 items

        targetrequired
        any[]

        min 3 items · max 3 items

        Variant 2

        kindrequired
        "2d"
        xrequired
        number

        ≥ 0 · ≤ 1

        yrequired
        number

        ≥ 0 · ≤ 1

        Response · 201

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        assetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        bodyrequired
        string

        min length 1 · max length 4000

        anchorrequired
        object | object | null

        Variant 1

        kindrequired
        "3d"
        positionrequired
        any[]

        min 3 items · max 3 items

        normalrequired
        any[] | null

        min 3 items · max 3 items

        camerarequired
        object | null
        positionrequired
        any[]

        min 3 items · max 3 items

        targetrequired
        any[]

        min 3 items · max 3 items

        Variant 2

        kindrequired
        "2d"
        xrequired
        number

        ≥ 0 · ≤ 1

        yrequired
        number

        ≥ 0 · ≤ 1

        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        resolvedrequired
        boolean
        authorIdrequired
        string
        authorNamerequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        editedAtrequired
        string | null

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/comments" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"body":"string","anchor":{"kind":"3d","position":[],"normal":[],"camera":{"position":[],"target":[]}}}'
        DELETE/workspaces/{workspaceId}/assets/{assetId}/comments/{commentId}ID token onlyRole: viewer

        Delete a comment

        The author or a workspace admin can delete a comment.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        commentIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/comments/<commentId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/assets/{assetId}/commentsID token or API keyRole: viewer

        List comments on an asset

        Oldest first. Comments can be pinned to a point on a model (anchor.kind = "3d") or an image ("2d").

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        assetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        bodyrequired
        string

        min length 1 · max length 4000

        anchorrequired
        object | object | null

        Variant 1

        kindrequired
        "3d"
        positionrequired
        any[]

        min 3 items · max 3 items

        normalrequired
        any[] | null

        min 3 items · max 3 items

        camerarequired
        object | null
        positionrequired
        any[]

        min 3 items · max 3 items

        targetrequired
        any[]

        min 3 items · max 3 items

        Variant 2

        kindrequired
        "2d"
        xrequired
        number

        ≥ 0 · ≤ 1

        yrequired
        number

        ≥ 0 · ≤ 1

        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        resolvedrequired
        boolean
        authorIdrequired
        string
        authorNamerequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        editedAtrequired
        string | null

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/comments" \
          -H "Authorization: Bearer $TAU_TOKEN"
        PATCH/workspaces/{workspaceId}/assets/{assetId}/comments/{commentId}ID token onlyRole: viewer

        Edit or resolve a comment

        Only the author can change the text. The author or any editor can resolve and reopen.

        Parameters

        workspaceIdpathrequired

        string

        assetIdpathrequired

        string

        commentIdpathrequired

        string

        Request body

        body
        string

        min length 1 · max length 4000

        resolved
        boolean

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        assetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        bodyrequired
        string

        min length 1 · max length 4000

        anchorrequired
        object | object | null

        Variant 1

        kindrequired
        "3d"
        positionrequired
        any[]

        min 3 items · max 3 items

        normalrequired
        any[] | null

        min 3 items · max 3 items

        camerarequired
        object | null
        positionrequired
        any[]

        min 3 items · max 3 items

        targetrequired
        any[]

        min 3 items · max 3 items

        Variant 2

        kindrequired
        "2d"
        xrequired
        number

        ≥ 0 · ≤ 1

        yrequired
        number

        ≥ 0 · ≤ 1

        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        resolvedrequired
        boolean
        authorIdrequired
        string
        authorNamerequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        editedAtrequired
        string | null

        Errors

        curl
        curl -X PATCH "https://techart.tools/api/v1/workspaces/<workspaceId>/assets/<assetId>/comments/<commentId>" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"body":"string","resolved":true}'

        Sharing

        Read-only links that open an asset without an account.

        GET/share/{token}Public

        Open a share link

        Public: no authentication. Returns the shared asset’s details and a short-lived download URL.

        Parameters

        tokenpathrequired

        string

        Response · 200

        workspaceNamerequired
        string
        assetrequired
        object
        namerequired
        string

        min length 1 · max length 200

        filenamerequired
        string
        kindrequired
        enum

        One of: "model""texture""animation""shader""hdri""scene""other"

        formatrequired
        string
        sizeBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        metarequired
        object
        triCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        vertCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        meshCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        materialCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        boneCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        clipCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        width
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        height
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        channels
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        bitDepth
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        colorSpace
        string
        modelName
        string

        max length 200

        shaderCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        mode
        enum

        One of: "pbr""unlit"

        parameterCount
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        textureSlots
        string[]

        max 64 items

        versionrequired
        integer

        > 0 · ≤ 9007199254740991

        downloadUrlrequired
        string

        Presigned URL, valid for a few minutes

        embeddablerequired
        boolean

        Whether the workspace's plan allows embedding this link on other websites

        thumbnailUrlrequired
        string | null
        expiresAtrequired
        string | null

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/share/<token>"

        Activity

        The workspace audit log.

        GET/workspaces/{workspaceId}/activityID token or API keyRole: viewer

        Workspace activity

        The audit log: uploads, deletes, member and sharing changes, newest first. Page with before (the last entry’s createdAt). Entries are kept for a year.

        Parameters

        workspaceIdpathrequired

        string

        limitquery

        integer

        beforequery

        string (date-time)

        typequery

        enum

        Response · 200

        entriesrequired
        object[]
        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        typerequired
        enum

        One of: "asset.created""asset.version""asset.renamed""asset.moved""asset.deleted""folder.created""folder.renamed""folder.deleted""member.invited""member.joined""member.role""member.removed""invite.revoked""workspace.updated""apikey.created""apikey.revoked""share.created""share.revoked""comment.created""plan.changed"

        actorIdrequired
        string

        User uid, `apikey:<id>`, or `system`

        actorNamerequired
        string
        targetrequired
        object
        kindrequired
        enum

        One of: "asset""folder""member""invite""workspace""apikey""share""comment"

        idrequired
        string
        namerequired
        string
        detailsrequired
        map
        createdAtrequired
        string

        ISO-8601 timestamp

        nextrequired
        string | null

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/activity" \
          -H "Authorization: Bearer $TAU_TOKEN"

        API keys

        Workspace-scoped keys for scripts, CI and DCC plugins.

        POST/workspaces/{workspaceId}/api-keysID token onlyRole: admin

        Create an API key

        Creates a workspace-scoped key for scripts and pipelines. The full key is returned only once; store it securely. read keys act as a viewer; write keys act as an editor. Keys cannot manage members, invites or other keys.

        Parameters

        workspaceIdpathrequired

        string

        Request body

        namerequired
        string

        min length 1 · max length 80

        scopes
        enum[]

        Default: ["read"]

        min 1 items

        Response · 201

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        prefixrequired
        string

        First characters of the key, for identification

        scopesrequired
        enum[]
        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        lastUsedAtrequired
        string | null
        keyrequired
        string

        The secret key, shown once

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/api-keys" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"name":"Hero character","scopes":["read"]}'
        GET/workspaces/{workspaceId}/api-keysID token onlyRole: admin

        List API keys

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        namerequired
        string

        min length 1 · max length 80

        prefixrequired
        string

        First characters of the key, for identification

        scopesrequired
        enum[]
        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        lastUsedAtrequired
        string | null

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/api-keys" \
          -H "Authorization: Bearer $TAU_TOKEN"
        DELETE/workspaces/{workspaceId}/api-keys/{keyId}ID token onlyRole: admin

        Revoke an API key

        Parameters

        workspaceIdpathrequired

        string

        keyIdpathrequired

        string

        Response · 204

        No content.

        Errors

        curl
        curl -X DELETE "https://techart.tools/api/v1/workspaces/<workspaceId>/api-keys/<keyId>" \
          -H "Authorization: Bearer $TAU_TOKEN"

        Jobs

        Server-side conversions such as FBX export. Currently unavailable.

        POST/workspaces/{workspaceId}/jobsID token or API keyRole: editor

        Queue a server-side conversion

        Currently unavailable (returns 503) while server-side conversion is switched off.

        Queues a conversion that cannot run in the browser, such as FBX export. The input must be a ready model asset in the workspace.
        The result is saved as a new asset; poll GET /jobs/{jobId} until status is succeeded (then read outputAssetId) or failed.

        Engine profiles set axis and unit conventions: unity (Y-up, meters), unreal (Z-up, centimeters), godot (Y-up, meters).
        Worker time counts against the plan’s monthly worker minutes.

        Parameters

        workspaceIdpathrequired

        string

        Request body

        typerequired
        "convert-model"
        inputAssetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        paramsrequired
        object
        targetFormatrequired
        enum

        One of: "fbx""glb""gltf""obj"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        scale
        number

        Default: 1

        > 0

        stripAnimations
        boolean

        Default: false

        Response · 202

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        typerequired
        enum

        One of: "convert-model"

        statusrequired
        enum

        One of: "queued""running""succeeded""failed"

        inputAssetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        paramsrequired
        object
        targetFormatrequired
        enum

        One of: "fbx""glb""gltf""obj"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        scalerequired
        number

        Default: 1

        > 0

        stripAnimationsrequired
        boolean

        Default: false

        outputAssetIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        errorrequired
        string | null
        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/jobs" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"type":"convert-model","inputAssetId":"abc123","params":{"targetFormat":"fbx","engineProfile":"unity"}}'
        GET/workspaces/{workspaceId}/jobs/{jobId}ID token or API keyRole: viewer

        Get a job

        Parameters

        workspaceIdpathrequired

        string

        jobIdpathrequired

        string

        Response · 200

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        typerequired
        enum

        One of: "convert-model"

        statusrequired
        enum

        One of: "queued""running""succeeded""failed"

        inputAssetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        paramsrequired
        object
        targetFormatrequired
        enum

        One of: "fbx""glb""gltf""obj"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        scalerequired
        number

        Default: 1

        > 0

        stripAnimationsrequired
        boolean

        Default: false

        outputAssetIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        errorrequired
        string | null
        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/jobs/<jobId>" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/workspaces/{workspaceId}/jobsID token or API keyRole: viewer

        List recent jobs

        Parameters

        workspaceIdpathrequired

        string

        limitquery

        integer

        Response · 200

        Array of objects:

        idrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        typerequired
        enum

        One of: "convert-model"

        statusrequired
        enum

        One of: "queued""running""succeeded""failed"

        inputAssetIdrequired
        string

        pattern ^[A-Za-z0-9_-]{1,128}$

        paramsrequired
        object
        targetFormatrequired
        enum

        One of: "fbx""glb""gltf""obj"

        engineProfilerequired
        enum

        One of: "unity""unreal""godot""threejs"

        scalerequired
        number

        Default: 1

        > 0

        stripAnimationsrequired
        boolean

        Default: false

        outputAssetIdrequired
        string | null

        pattern ^[A-Za-z0-9_-]{1,128}$

        errorrequired
        string | null
        createdByrequired
        string
        createdAtrequired
        string

        ISO-8601 timestamp

        updatedAtrequired
        string

        ISO-8601 timestamp

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/jobs" \
          -H "Authorization: Bearer $TAU_TOKEN"

        Billing

        Plans and subscriptions (Stripe). Only owners can change the plan.

        POST/workspaces/{workspaceId}/billing/portalID token onlyRole: owner

        Manage billing

        Returns a Stripe Billing Portal URL to change plan, update the card, see invoices or cancel.

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        urlrequired
        string

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/billing/portal" \
          -H "Authorization: Bearer $TAU_TOKEN"
        POST/workspaces/{workspaceId}/billing/checkoutID token onlyRole: owner

        Start an upgrade

        Returns a Stripe Checkout URL for the plan. The plan changes when Stripe confirms the payment (via the webhook).

        Parameters

        workspaceIdpathrequired

        string

        Request body

        planrequired
        enum

        One of: "pro""studio"

        Response · 200

        urlrequired
        string

        Errors

        curl
        curl -X POST "https://techart.tools/api/v1/workspaces/<workspaceId>/billing/checkout" \
          -H "Authorization: Bearer $TAU_TOKEN" \
          -H "Content-Type: application/json" \
          -d '{"plan":"pro"}'
        GET/workspaces/{workspaceId}/billingID token onlyRole: admin

        Plan, subscription and usage

        Parameters

        workspaceIdpathrequired

        string

        Response · 200

        configuredrequired
        boolean
        planrequired
        enum

        One of: "free""pro""studio"

        statusrequired
        enum

        One of: "none""active""trialing""past_due""canceled""incomplete""unpaid"

        currentPeriodEndrequired
        string | null
        cancelAtPeriodEndrequired
        boolean
        usagerequired
        object
        storageBytesrequired
        number
        workerMinutesrequired
        number
        membersrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        apiKeysrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        Errors

        curl
        curl -X GET "https://techart.tools/api/v1/workspaces/<workspaceId>/billing" \
          -H "Authorization: Bearer $TAU_TOKEN"
        GET/billing/plansPublic

        Plans and prices

        Every plan with its limits, features and monthly price (from Stripe, cached for 10 minutes). Prices are null when billing is off or Stripe could not be reached.

        Response · 200

        configuredrequired
        boolean
        plansrequired
        object[]
        idrequired
        enum

        One of: "free""pro""studio"

        labelrequired
        string
        limitsrequired
        object
        storageBytesrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        maxFileBytesrequired
        integer

        > 0 · ≤ 9007199254740991

        workerMinutesPerMonthrequired
        number

        ≥ 0

        membersrequired
        integer

        > 0 · ≤ 9007199254740991

        apiKeysrequired
        integer

        ≥ 0 · ≤ 9007199254740991

        featuresrequired
        object
        apiAccessrequired
        boolean
        serverConversionrequired
        boolean
        batchPipelinesrequired
        boolean
        shareLinksrequired
        boolean
        embedsrequired
        boolean
        pricerequired
        object | null

        Null for Free, or when the price could not be loaded

        amountrequired
        integer

        Minor units, e.g. cents

        ≥ -9007199254740991 · ≤ 9007199254740991

        currencyrequired
        string
        intervalrequired
        enum

        One of: "day""week""month""year"

        intervalCountrequired
        integer

        ≥ -9007199254740991 · ≤ 9007199254740991

        Errors

          curl
          curl -X GET "https://techart.tools/api/v1/billing/plans"
          POST/billing/webhookPublic

          Stripe webhook

          Receives Stripe events (signed with STRIPE_WEBHOOK_SECRET). Subscribe to checkout.session.completed and customer.subscription.*. Events only identify the subscription: its current state is always refetched from Stripe, so out-of-order and duplicate deliveries are harmless.

          Response · 200

          receivedrequired
          boolean

          Errors

          curl
          curl -X POST "https://techart.tools/api/v1/billing/webhook"