Kaedim
PlansEnterprise ConnectYouTube
  • Kaedim Documentation
  • Welcome
    • How Kaedim Works
    • Get Started
      • Quick Start
      • Sign-in
      • Showcase
      • Generation Examples
        • Prototype Asset Examples
        • Game-Ready Asset Examples
    • FAQ
  • Creating Assets
    • Overview
    • Input Guidelines
      • Input Image Examples
        • Furniture
        • Vehicles
        • Characters
        • Clothing
        • Accessories
        • Products
        • Structures
        • Stylised Trees
        • Scenes
    • Game-Ready Assets
      • Upload Base Model
      • Block Models
      • Stages of a Game-Ready Asset
    • Prototype Assets
      • Upgrade to Game-Ready
    • Upload a 3D Model
  • Reviewing Assets
    • 3D Viewer
      • Geometry Details
      • Enable Selection
      • Expand View
      • Show Rig
      • Show Dimensions
      • Show Wireframe
      • Show UV/Texture Maps
    • UV Viewer
    • Request Revisions
      • Request Revisions
      • Edit Asset Settings
      • Upgrade Quality
      • Revision Details
      • Upload Version (Game-Ready)
    • Branching
  • Managing Assets
    • Asset Status
    • Exporting Assets
      • Download
      • Share
  • Removing Assets
    • Cancel
    • Delete
  • Folders
  • Filters
  • Notifications
  • Enterprise Features
    • Custom Styles
    • Scene Functionality
    • Priority Level
    • Texel Density Inspector
    • Team Functionality
      • Inviting Team Members
      • Permissions & Roles
      • Setting Up a Studio
    • Custom Integrations
      • APIs
        • Web API
        • Web Hooks
      • Plugins
        • 🌎Omniverse
        • 🔲Unity
        • 🔶Blender
        • 🔷Unreal Engine
  • Admin
    • Settings
      • Billing
        • Invoices
        • Updating Payment Method
      • Notification Settings
      • Account Settings
  • Dev Logs
    • Releases
    • Upcoming Features
Powered by GitBook
On this page
  • Credentials
  • Step 1: Registering a webhook
  • Parameters
  • Step 2: Processing an image
  • Post processing request
  • Parameters
  • Other useful routes
  • Parameters
  • Get All Assets
  • Parameters
  • Get All Projects
  • Refreshing a JWT
  • Post a refresh request in node.js
  • Parameters
  • Error Codes

Was this helpful?

  1. Enterprise Features
  2. Custom Integrations
  3. APIs

Web API

PreviousAPIsNextWeb Hooks

Last updated 2 months ago

Was this helpful?

We wrote an example Python script that illustrates how to interface with our API.

We've also created a simple React app implementation on GitHub to help people with a quicker/easier implementation.

Link here:

Credentials

To use the Kaedim API, you will need a devID, an API-key, and a refresh token. If you are part of a studio, you will also need to provide a studioID with some API requests.

You can find all three of these by logging in to the web app at and navigating to Settings > API Keys. There you should be able to see all the necessary info.

If your keys are not working for any reason, don’t hesitate to contact us at .

API Access is reserved for Enterprise customers.

Please note that clicking Copy on API Key, Kaedim Secret and Refresh Token, generates new values for these fields, making their previous values invalid!

Step 1: Registering a webhook

To register a webhook endpoint you will need your API key and developer ID. Both of these can be found under your user settings page in the Kaedim app.

  • Your API key should always be provided in the X-API-Key Header in your requests.

Parameters

Name
Requirement
Section
Type
Description

X-API-Key

Required

Head

String

User API key used to authenticate requests

devID

Required

Body

String

Your developer ID

destination

Required

Body

String

Your webhook endpoint url

Please note that the following code is Node.js

import fetch from "node-fetch"
const url = "https://api.kaedim3d.com/api/v1/registerHook"
const headers = {
    "Content-Type": "application/json",
    "X-API-Key": "your_api_key"
}
const body = {
    "devID": "your_dev_id",
    "destination": "your_endpoint_url"
}
try {
    fetch(url, {
      method: "POST",
      headers,
      body: JSON.stringify(body),
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

201 Response

{
    "status": "success",
    "message": "Webhook already registered"
    "jwt" : "eyJhbGciOiJIUzI1…"
}

404 Response

{
    "status": "error",
    "message": "User does not exist"
}

Upon successful authentication you will receive a JWT, which needs to be added as a Bearer Token header on all processing requests. You will also receive a refreshToken to be used to generate a new JWT. Your JWT will expire after 12 hours. See below on how to refresh your token.

Step 2: Processing an image

All processing requests must include the JWT in the Bearer Authorization header, alongside your API-key, and your devID inside the request body.

Post processing request

Parameters

Name
Requirement
Section
Type
Description

X-API-Key

Required

Head

String

User API key used to authenticate requests

Authorization

Required

Head

String

devID

Required

Body

String

imageUrls/images

Required

Body

Array

LoQ

Required

Body

String

test

optional

Body

Boolean

polycount

optional

Body

Number

height

optional

Body

Number

width

optional

Body

Number

Desired width in cm

depth

optional

Body

Number

Desired depth in cm

projectID

optional

Body

String

The ID of the style you want this asset to have, if none it can be left null

studioID

optional

Body

String

Your team's studioID

Please note that the following code is Node.js

const url = "https://api.kaedim3d.com/api/v1/process"
const headers = {
  "Content-Type": "application/json",
  "X-API-Key": "your_api_key",
  "Authorization":  "your_JWT"
}

const data = {
  "devID": "your_dev_id",
  "LoQ": "standard",
  "imageUrls": ["https://example.com/image1.png","https://example.com/image2.png"],
  "polycount": 20000,
  "height": 250,
  "test": true // Turn this to false to pass a normal request
}

const json = JSON.stringify(data);

try {
  fetch(url, {
      method: "POST",
      headers,
      body:json,
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

Please note that the following responses are in JSON

201 Response

{
"status": "success",
"devID": "ad39dg02-dief-as9i-ade0-g159g298ck6s",
"requestID": "1248947ds7an-ad98q3yhans92S-2Asda9212",
"message" : "request sent successfully, please check webhook in 10-15 mins"
}

400 Response

{
"status": "error",
"message" : "Request failed due to {reason}, please check your payload and headers and try again"
}

406 Response

{
"status": "error",
"message" : "Invalid level of quality inputed"
}

Please note that there is a 5MB limit per image file.

Once the asset has been successfully generated, a download URL will be sent to the registered webhook endpoint.

  • Please note that you will need to perform a GET request on the URLs to get the file containing the completed asset

Each completed asset is available in 4 supported formats: obj, fbx, glb, and gltf all of which have separate download links in the post request.

  • Download links expire after an hour

  • We provide the functionality to fetch all requests

We also provide the option for test requests using a boolean test body parameter. If set to true, a plain empty cube will be returned in the response. We recommend using this to get an idea of the structure of the response once an asset is completed.

Upon successful generation, you will receive a response similar to the following:

201 Response

{
    "status": "success",
    "userID" : KaedimUser,
    "requestID": "1248947ds7an-ad98q3yhans92S-2Asda9212",
    "results" : {
        "obj": "https://....."
        "fbx": "https://....."
        "glb": "https://....."
        "gltf": "https://....."
    }
}

400 Response

{
    "status": "error",
    "requestID": "1248947ds7an-ad98q3yhans92S-2Asda9212",
    "message" : "Asset creation failed"
    "cause" : "The request was too complex, we aim to deal with…"
}

Asset creation may fail due to various reasons some of which include: complexity, visibility of the object, multiple objects in the scene, inappropriate content, etc. Please see our guidelines for more information: Input Guidelines

Other useful routes

Check the progress and results of your generation

We provide functionality to check the progress of your generation based on the requestID

Parameters

Name
Requirement
Section
Type
Description

X-API-Key

Required

Head

String

User API key used to authenticate requests

Authorization

Required

Head

String

Your valid JWT

devID

Required

GET Param

String

Your developer ID

requestID

Required

GET Param

String

The requestID of the asset you'd like to fetch

studioID

Optional

GET Param

String

Your team's studioID

Please note that the following code is Node.js

const url = `https://api.kaedim3d.com/api/v1/fetchRequest?devID=${devID}&requestID=${requestID}`

const headers = {
  "Content-Type": "application/json",
  "X-API-Key": "your_api_key",
  "Authorization":  "your_JWT"
}

try {
   fetch(url, {
      method: "GET",
      headers,
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

Please note that the following responses are in JSON

200 Response

{
    "requestID": "81...236",
    "createdAt": "202...",
    "image": [
        "https://s...",
    ],
    "image_tags": [],
    "iterations": [
        {
            "createdAt": "2023-0...",
            "iterationID": "0",
            "results": {
                "obj": "https://s...",
                "fbx": "https://s...",
                "glb": "https://s...",
                "gltf": "https://s...",
                "mtl": "https://s...",
            },
            "status": "completed",
            "userID": "b6e...",
            "email": "mar...",
            "loq": "standard",
            "dismissedReason": null,
            "editDescription": null,
            "texturingMethod": null
        }
    , ...]
}

Get All Assets

We provide functionality to retrieve all asset requests (even if they’re pending) based on date ranges (if provided).

Parameters

Name
Requirements
Section
Type
Description

X-API-Key

Required

Head

String

Authorization

Required

Head

String

devID

Required

GET Param

String

start,end

Optional

GET Param

String

Date range provided in MM-DD-YYYY. If left blank all assets associated to the devID will be returned

studioID

Optional

GET Param

String

Your team's studioID

Please note that the following code is Node.js

const devID = "your-devID";
const start = "2022-02-01"; // yyyy-mm-dd
const end = "2022-02-14";
const url = `https://api.kaedim3d.com/api/v1/fetchAll?devID=${devID}&start=${start}&end=${end}`
const headers = {
  "X-API-Key": "your_api_key",
  "Authorization":  "your_JWT"
}
try {
   fetch(url, {
      method: "GET",
      headers,
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

Please note that the following responses are in JSON

200 Response

{
    "assets": [
        {
            "requestID": "81...236",
            "createdAt": "202...",
            "image": [
                "https://s...",
            ],
            "image_tags": [],
            "polycount": "20000",
            "iterations": [
                {
                    "createdAt": "2023-0...",
                    "iterationID": "0",
                    "results": {
                        "obj": "https://s...",
                        "fbx": "https://s...",
                        "glb": "https://s...",
                        "gltf": "https://s...",
                        "mtl": "https://s...",
                    },
                    "status": "completed",
                    "userID": "b6e...",
                    "email": "mar...",
                    "loq": "standard",
                    "dismissedReason": null,
                    "editDescription": null,
                    "texturingMethod": null
                }
            ]
        },...
    ]
}

400 Response

{
    "status": "error",
    "message" : "DevID is required, please make sure you are sending as a query parameter"
}

Get All Projects

We provide functionality to retrieve all asset projects names and IDs

Please note that the following code is Node.js

const devID = "your-devID";
const url = `https://api.kaedim3d.com/api/v1/fetchProjects?devID=${devID}`
const headers = {
  "X-API-Key": "your_api_key",
  "Authorization":  "your_JWT"
}
try {
   fetch(url, {
      method: "GET",
      headers,
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

Please note that the following responses are in JSON

200 Response

{
		"status":"success",
    "message": [
        {
            "projectID": "81...236",
            "name": "Sandbox",
            "studioID": "ad29cegh-adks-344j-htk4-aajs-6117d0jeddn5"
        },...
    ]
}

Refreshing a JWT

Your web token will expire after 12 hours from its creation. You can only have one JWT valid at a time, therefore creating a new JWT will automatically invalidate the old token. To get a new JWT you must use the refresh token generated at webhook registration. You can find the refresh token in user settings in the Kaedim platform below the API-key.

Post a refresh request in node.js

If successful, you will receive a new JWT that will allow you to make API requests that require authentication (such as /process etc.)

Parameters

Name
Requirments
Section
Type
Description

X-API-Key

Required

Head

String

User API key used to authenticate requests

refresh-token

Required

Head

String

Token used to generate more JWT’s

devID

Required

Body

String

Your developer ID

Please note that the following code is Node.js

const url = "https://api.kaedim3d.com/api/v1/refreshJWT"
const headers = {
  "Content-Type": "application/json",
  "X-API-Key": "your_api_key",
  "refresh-token": "your-refresh-token"
}
const body = {
  "devID": "your_dev_id",
}
try {
   fetch(url, {
      method: "POST",
      headers,
      body: JSON.stringify(body),
    }).then((res) => {
      res.json().then((data) => {
        console.log(data);
      });
    });
} catch (e) {
}

Please note that the following responses are in JSON

200 Response

{
    "status": "success",
    "message": "JWT refreshed successfully. Please use the new JWT and devID to authenticate your future requests",
    "jwt": "eyJhaU.....",
    "devID": "609d43109ff0b252cce4bc6e"
}

400 Response

{
    "status": "error",
    "requestID": "1248947ds7an-ad98q3yhans92S-2Asda9212",
    "message" : "Request failed, please check your api-key and refresh-token and try again"
    "cause": "...."
}

Error Codes

We use normal HTTP codes to indicate the success or failure of your API requests. If your request fails, Kaedim will return an appropriate error message.

Field Name
Type
Description

Status

String

Short string describing the status of the request. Generally "success" or "error".

Message

String

Short human-readable string giving more context on the reason the error occurred.

Your valid JWT

Your developer ID

An array with up to 6 image urls to be processed. Alternatively you can upload the files themselves in which case the parameter is called "images" and requires you to pass the files as blobs.

Level of quality: “standard”/”high”/”ultra”

Used to process request as a test

Upper polycount limit

Desired height in cm (default 200)

User API key used to authenticate requests

Your valid JWT

Your developer ID

https://api.kaedim3d.com/api/v1/process
https://api.kaedim.com/api/v1/fetchRequest
https://api.kaedim3d.com/api/v1/fetchAll
https://api.kaedim3d.com/api/v1/fetchProjects
https://api.kaedim3d.com/api/v1/refreshJWT
here
https://github.com/Kaedim/API_Implementation
https://app.kaedim3d.com
support@kaedim3d.com