Introduction
Here is a quick intro guide to the main paths of our REST API. You can use your bearer token to run API calls through the interface here. Visit API Tokens page to create your API token. Before that, make sure your plan is eligible for API tokens.
Introduction
There are a few main concepts our endpoints are organized around and explaining them here would help your understanding.
- Base Asset: These are sometimes referred to as raw models or source models in tutorials or elsewhere in the docs. Base asset is a user uploaded model. All future processing is applied to these assets only.
- Rapid Model: These are sometimes referred to as optimized models. They are created by processing the base assets through 3D Processor (making a POST call to Optimize endpoint of Base Asset).
- Presets: These are saved 3D Processor Settings for you to organize your assets better. Rapid Models carry on the preset information through which they are created, this way you can understand which Rapid Model was created through which preset.
- Embeds: These are embeddable 3D viewers created from Rapid Models. It is not possible to create them from Base Assets.
- Tags: These are user defined or system generated tags for assets. You can use them to filter your assets.
- User: Provides endpoints to check your available limits or login with credentials to receive a token.
- Webhooks: We have some amazing webhooks for you to create better applications without spamming us to fetch status of upload or optimization jobs.
Authenticating requests
To authenticate requests, include an Authorization
header with the value "Bearer {YOUR_AUTH_KEY}"
.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
You can create your API token here.
Our REST API, excluding upload related endpoints, is subject to rate limits (2000 requests per minute per User or IP)
API Tokens
Endpoints to manage tokens of the user account.
Get Tokens
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/user/tokens" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/tokens"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/tokens'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
[
{
"id": 222,
"name": "name of api token",
"last_used_at": "2021-09-01T11:21:22.000000Z",
"created_at": "2021-09-01T10:26:57.000000Z",
"optimization_count": 42,
}
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Token
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/user/tokens/create" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"name of new api token\"
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/tokens/create"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "name of new api token"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/tokens/create'
payload = {
"name": "name of new api token"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
234|y5NGBTJk5OX5Zva5RfxTz0GkXEL9axN79vTfsJOH
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Token
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/user/tokens/42" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/tokens/42"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/tokens/42'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-frame-options: ALLOWALL
vary: Origin
{
"message": "Invalid token",
"error": "Token format is invalid"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Token
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/user/tokens/42" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/tokens/42"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/tokens/42'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"id": 1,
"tokenable_type": "App\\Models\\User",
"tokenable_id": 45,
"name": "name of api token",
"abilities": [
"*"
],
"last_used_at": null,
"created_at": "2021-10-26T10:38:07.000000Z",
"updated_at": "2021-10-26T10:38:07.000000Z",
"plain_text": ""
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Base Asset
Base Assets are sometimes referred to as raw models or source models in tutorials or elsewhere in the docs. Base asset is a user uploaded model. All future processing is applied to these assets only.
This is where you find endpoints some critical endpoints:
- Uploading a model
- Optimizing a model
- Read 3D Metadata of the uploaded model
- Get running jobs (we suggest you to check webhooks though)
- Find all optimized versions of a base asset
What happens to uploaded files?
Each base asset upload will trigger some analysis process to generate 3D metadata and render images for using that file in an easier way in downstream processes. You are going to find this data when you call Get Base Asset endpoint and look at .json or image files inside the data -> downloads.
Automatically exported models
If the uploaded model is a CAD file, we will also automatically output a .glb and .usd version of it. If the uploaded model is a 3ds Max file, we will automatically output a .glb, .gltf, .fbx, and .usdz version of it while translating all V-ray materials to PBR materials. Read reference documentation of DCC Importer for more information on this topic.
Base Asset Endpoints
Here are all the base asset endpoints:
Optimize
requires authentication
There are two ways to optimize a base asset:
In the first way send a config as a json object that complies with the 3D Processor Schema, or send the id of one of your presets or of a factoryPreset
You can use our "optimization_finished" webhook to get notified when your model has been optimized. It also includes downloadlinks to your optimized model
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rawmodel/optimize/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"config\": {
\"import\": {
\"general\": {
\"rotateZUp\": false,
\"fixAnimationData\": false,
\"normalmapYFlip\": false
},
\"USD\": {
\"profile\": \"arkit\",
\"purpose\": \"render\"
},
\"CAD\": {
\"tessellationResolution\": \"fine\"
},
\"discard\": {
\"cameras\": false,
\"lights\": false,
\"animations\": false,
\"morphTargets\": false,
\"unusedUVs\": false
}
},
\"export\": [
{
\"fileName\": \"\",
\"textureMapFilePrefix\": \"\",
\"discard\": [],
\"format\": {
\"gltf\": {
\"pbrMaterial\": []
}
}
}
]
},
\"tags\": [
\"Low-Poly\",
\"MyTag\"
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/optimize/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"config": {
"import": {
"general": {
"rotateZUp": false,
"fixAnimationData": false,
"normalmapYFlip": false
},
"USD": {
"profile": "arkit",
"purpose": "render"
},
"CAD": {
"tessellationResolution": "fine"
},
"discard": {
"cameras": false,
"lights": false,
"animations": false,
"morphTargets": false,
"unusedUVs": false
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": [],
"format": {
"gltf": {
"pbrMaterial": []
}
}
}
]
},
"tags": [
"Low-Poly",
"MyTag"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/optimize/281'
payload = {
"config": {
"import": {
"general": {
"rotateZUp": false,
"fixAnimationData": false,
"normalmapYFlip": false
},
"USD": {
"profile": "arkit",
"purpose": "render"
},
"CAD": {
"tessellationResolution": "fine"
},
"discard": {
"cameras": false,
"lights": false,
"animations": false,
"morphTargets": false,
"unusedUVs": false
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": [],
"format": {
"gltf": {
"pbrMaterial": []
}
}
}
]
},
"tags": [
"Low-Poly",
"MyTag"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
{
"id": 281,
"name": "teapot.obj",
"optimization_status": "sent_to_queue",
"job_status": {
"id": 518,
"job_id": null,
"type": "App\\Jobs\\ProcessRawModel",
"queue": null,
"attempts": 0,
"progress_now": 0,
"progress_max": 0,
"status": "queued",
"input": null,
"output": null,
"created_at": "2021-02-15T13:34:52.000000Z",
"updated_at": "2021-02-15T13:34:52.000000Z",
"started_at": null,
"finished_at": null,
"key": "rapid_model:624"
},
"progress": 0,
"processing_step": "Scheduled for processing",
"external": null,
"rawmodel": {
"id": 282,
"name": "teapot.obj",
"processing": true
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Multi Optimize
requires authentication
Optimizes multiple models with one request
Use the same format as in the optimization endpoint but pass it in an array which contains the request as config (preset_id or config as json object) and the model_id of the base assets you want to process
Look at the example request for the data structure
You can use our "optimization_finished" webhook to get notified when your model has been optimized. It also includes download links to your optimized model
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rawmodel/optimize" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"optimizations\": [
{
\"model_id\": 89,
\"config\": {
\"preset_id\": 2004,
\"tags\": [
\"Lens Studio 3D\",
\"Medium Resolution\",
\"Low-Poly\"
],
\"exportName\": \"calibrationTarget.glb\"
}
},
{
\"model_id\": 77,
\"config\": {
\"preset_id\": 2004,
\"tags\": [
\"Lens Studio 3D\",
\"Medium Resolution\",
\"Mid-Poly\"
],
\"exportName\": \"DamagedHelmet.glb\"
}
}
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/optimize"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"optimizations": [
{
"model_id": 89,
"config": {
"preset_id": 2004,
"tags": [
"Lens Studio 3D",
"Medium Resolution",
"Low-Poly"
],
"exportName": "calibrationTarget.glb"
}
},
{
"model_id": 77,
"config": {
"preset_id": 2004,
"tags": [
"Lens Studio 3D",
"Medium Resolution",
"Mid-Poly"
],
"exportName": "DamagedHelmet.glb"
}
}
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/optimize'
payload = {
"optimizations": [
{
"model_id": 89,
"config": {
"preset_id": 2004,
"tags": [
"Lens Studio 3D",
"Medium Resolution",
"Low-Poly"
],
"exportName": "calibrationTarget.glb"
}
},
{
"model_id": 77,
"config": {
"preset_id": 2004,
"tags": [
"Lens Studio 3D",
"Medium Resolution",
"Mid-Poly"
],
"exportName": "DamagedHelmet.glb"
}
}
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (204, success):
Empty response
Example response (400, error):
Could not process request: Missing required parameter
Example response (500, error):
An error occurred while processing your request: ...
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Running Jobs
requires authentication
Returns rapidmodels (until 1 week) that are still being processed or were not successfully optimized
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/jobs" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/jobs"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/jobs'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"data": [
{
"id": 5812,
"name": "TVBench",
"optimization_status": "failed",
"job_status": {
"id": 3601,
"job_id": "edab51b2-1c47-4a0f-b807-58e913dbabc9",
"type": "App\\Jobs\\ProcessRawModel",
"queue": "default",
"attempts": 1,
"progress_now": 100,
"progress_max": 100,
"status": "finished",
"input": null,
"output": "{\"exit_code\":1}",
"created_at": "2021-10-11 20:08:52",
"updated_at": "2021-10-11 20:08:53",
"started_at": "2021-10-11 20:08:52",
"finished_at": "2021-10-11 20:08:53",
"key": "rapid_model:5812"
},
"progress": 100,
"processing_step": "Done",
"external": false,
"rawmodel": {
"id": 2257,
"name": "TVBench"
}
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Base Asset
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 281,
"name": "teapot",
"processing": false,
"external": false,
"upload_status": "complete",
"size": 438680,
"created_at": "2021-02-08T16:59:52+01:00",
"rapid_models": [
635,
617
],
"scale_factor": "10",
"tags": [
{
"id": 241,
"name": "Mid-Poly",
"created_at": "2022-12-12 13:12:37+00",
"updated_at": "2022-12-12 13:12:37+00",
"raw_id": 281
}
],
"downloads": {
"error.log": "signed url for the error.log",
"info.log": "signed url for info.log",
"metrics.json": "signed url for the metrics.json",
"rpd_info.json": "signed url for the rpd_info.json",
"teapot.obj": "signed url for the teapot.obj",
"thumb.jpg": "signed url for the thumb.jpg"
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Base Asset
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/rawmodel/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Download URLs
requires authentication
Returns a list of urls to download the individual base asset files
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"RezColorChecker.mtl": "signed s3 url",
"RezColorChecker.obj": "signed s3 url",
"RezColorChecker.png": "signed s3 url"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get imported DCC files
requires authentication
Returns a list of urls to download the individual converted DCC material and quality control files
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/pbr" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/pbr"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/pbr'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"materials" : {
"ao.png":"signed s3 url",
"diffuse.png":"signed s3 url",
},
"qc": {
"render_0.png":"signed s3 url",
"render_1.png":"signed s3 url",
"diff_0.png":"signed s3 url",
"diff_1.png":"signed s3 url",
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Download zip
requires authentication
Downloads all model files as zip.
A stream is returned which contains the model data.
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/zip" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/zip"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/downloads/zip'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
Streamed response
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Returns hash signed links for the quality control images generated after importing the Rawmodel.
requires authentication
The keys of the images are built with the following reasoning:
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281/renders" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/renders"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/renders'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
Example response (404, error):
Only available for Rawmodels that were imported after 2024-07
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Tag of a Base Asset
requires authentication
Get Base Assets
requires authentication
Paginated response of your base assets. Search for base assets by name or tag
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel?q=yourSearchString" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel"
);
const params = {
"q": "yourSearchString",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel'
params = {
'q': 'yourSearchString',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200, success):
{
"data": [
{
"id": 1,
"name": "teapot",
"external": false,
"upload_status": "complete",
"size": 315088,
"created_at": "2022-05-24T15:05:47+02:00",
"scale_factor": "1",
"has_errors": true,
"format": "fbx",
"tags": [
{
"id": 1,
"name": "Low-Poly",
"created_at": "2022-05-24 15:06:03",
"updated_at": "2022-05-24 15:06:03",
"raw_id": 1
}
],
"downloads": {
"error.log": "signed url for the error.log",
"info.log": "signed url for info.log",
"metrics.json": "signed url for the metrics.json",
"rpd_info.json": "signed url for the rpd_info.json",
"teapot.fbx": "signed url for the teapot.obj",
"thumb.jpg": "signed url for the thumb.jpg",
"warning.log": "signed url for the warning.log"
}
}
],
"links": {
"first": "https://url/api/v2/rawmodel?page=1",
"last": "https://url/api/v2/rawmodel?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://url/api/v2/rawmodel?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://url/api/v2/rawmodel",
"per_page": 10,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update Base Asset - Add Tags, Set scale factor
requires authentication
A tag can have 255 utf-8 characters including whitespaces
Example request:
curl --request PUT \
"https://api.rapidpipeline.com/api/v2/rawmodel/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tags\": [
\"low poly\",
\"mb target\"
],
\"scale_factor\": 0.5
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tags": [
"low poly",
"mb target"
],
"scale_factor": 0.5
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281'
payload = {
"tags": [
"low poly",
"mb target"
],
"scale_factor": 0.5
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-frame-options: ALLOWALL
vary: Origin
{
"message": "Invalid token",
"error": "Token format is invalid"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Multiple Base Assets
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rawmodel/delete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"ids\": [
726,
324
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/delete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ids": [
726,
324
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/delete'
payload = {
"ids": [
726,
324
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-frame-options: ALLOWALL
vary: Origin
{
"message": "Invalid token",
"error": "Token format is invalid"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Base Asset - Get Upload Link
requires authentication
Calling this endpoint will return an id for the new base asset and presigned URLs which need to be used to upload the files directly to our storage. The URLs are unique for every file. The "complete_upload" field will contain a link to the "Create Base Asset - Complete Upload" endpoint that needs to be called when the upload is done
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rawmodel/api-upload/start" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"model_name\": \"teapot\",
\"filenames\": [
\"mymodel.glb\",
\"material.mat\"
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/api-upload/start"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"model_name": "teapot",
"filenames": [
"mymodel.glb",
"material.mat"
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/api-upload/start'
payload = {
"model_name": "teapot",
"filenames": [
"mymodel.glb",
"material.mat"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
{
"id": 1,
"links": {
"s3_upload_urls": {
"mymodel.glb": "signed url for mymodel.glb",
"material.mat": "signed url for material.mat"
},
"complete_upload": "https://api.rapidpipeline.com/api/rawmodels/1/api-upload/complete"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Base Asset - Complete Upload
requires authentication
Call this endpoint with the received base asset id from the "Create Base Asset - Get Upload Link" endpoint after uploading the base asset files
You can use our "analysis_finished" webhook to get notified when your model is ready to be optimized
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/complete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/complete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/complete'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 281,
"name": "teapot",
"processing": false,
"upload_status": "complete",
"size": 438680,
"created_at": "2021-02-08T16:59:52+01:00",
"rapid_models": [
635,
617
],
"scale_factor": "10",
"downloads": {
"error.log": "signed url for the error.log",
"info.log": "signed url for the info.log",
"metrics.json": "signed url for the metrics.json",
"rpd_info.json": "signed url for the rpd_info.json",
"teapot.obj": "signed url for the uploaded file",
"thumb.jpg": "signed url for the thumb.jpg"
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Retries a failed import
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/retry" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/retry"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/281/api-upload/retry'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-frame-options: ALLOWALL
vary: Origin
{
"message": "Invalid token",
"error": "Token format is invalid"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Associated Rapid Models
requires authentication
Get all rapid models which were optimized from this base asset
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rawmodel/1/rapidmodels" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rawmodel/1/rapidmodels"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rawmodel/1/rapidmodels'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": 1,
"name": "teapot",
"optimization_status": "done",
"rawmodel": {...},
"job_status": {...},
"created_at": "2021-02-16T16:50:41+01:00",
"updated_at": "2021-02-16T16:50:53+01:00",
"progress": 100,
"processing_step": "Done",
"external": false,
"rapid_compact_core_version": "6.1.1",
"tags": [
{
"id": 377,
"name": "Preserve UVs",
"created_at": "2024-02-15 18:05:36+00",
"updated_at": "2024-02-15 18:05:36+00",
"rapid_id": 635
}
],
"export_name": "export name",
"uuid": "d8316d1f-3c7d-4777-b72e-c760064f9d08",
"accepted": false,
"meta": {
"size": 573420,
"exportSize": 1029548
},
"thumbnail": {},
"rpd_info": "signed url for the rpd_info.json",
"rpd_warnings": "signed url for the warning.log",
"rpd_error": "signed url for the error.log",
"downloads": {
"glb": "signed url for the .glb"
}
}
]
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Embeds
Endpoints for managing embeddable 3D viewers created from Rapid Models. Embeds can only be created from optimized Rapid Models, not directly from Base Assets.
Here are all the embed related endpoints:
Get Embeds
requires authentication
Returns the embeds of the user
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/embeds?page=20&q=qui&rapidId=14" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/embeds"
);
const params = {
"page": "20",
"q": "qui",
"rapidId": "14",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/embeds'
params = {
'page': '20',
'q': 'qui',
'rapidId': '14',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200):
{
data: [
{
"id":53,
"identifier":"fRoL5P9iyb",
"name":"RezColorChecker Embed",
"user_id":45,
"model_id":70,
"view_count":13,
"created_at":"2022-05-04T12:10:52.000000Z",
"updated_at":"2022-06-14T13:13:00.000000Z",
"rapidModelId": 73,
"rapidModelName":"RezColorChecker",
"thumbnail":"https://2vv7ezymi86va.cloudfront.net/rapid/ba12f8a6-....",
"url":"https://api.rapidpipeline.com/viewer?id=123456"
},
...
],
links: {
first: "http://...",
last: "http://...",
prev: null,
next: "http://..."
},
meta: {
"current_page":1,
"from":1,
"last_page":2,
"per_page":10,
"to":10,
"total":15,
links: [
{
"url":null,
"label":"Previous",
"active":false
},
...
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Embed
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/embeds/42" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/embeds/42"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/embeds/42'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"data": {
"id": 42,
"identifier": "ZmR8oTVEiR",
"name": "teapot Embed",
"user_id": 1,
"model_id": 1,
"view_count": 100,
"created_at": "2022-06-27T13:30:30.000000Z",
"updated_at": "2022-06-27T14:20:17.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Embed
requires authentication
Create an embed from a rapid model. The webhooks will be called with the 'embed_creation' event to notify the user as soon as the embed is created.
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/embeds/create" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"model_id\": 281,
\"name\": \"\\\"my embeds name\\\"\",
\"save_user_theme\": false,
\"config\": \"{\\n \\\"renderCanvasCSS\\\" : \\\"background:;\\\",\\n \\\"environmentURL\\\" : \\\"images\\/environment.dds\\\",\\n \\\"companyLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\\\",\\n \\\"companyLogoToggle\\\" : \\\"true\\\",\\n \\\"companyLink\\\" : \\\"https:\\/\\/dgg3d.com\\\",\\n \\\"companyLogoCSS\\\" : \\\"width:120px;height:71.3004px;background:;\\\",\\n \\\"productLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\\\",\\n \\\"productLogoToggle\\\" : \\\"true\\\",\\n \\\"productLink\\\" : \\\"https:\\/\\/rapidpipeline.com\\\",\\n \\\"productLogoCSS\\\" : \\\"width:120px;height:21.4819px;background:;\\\",\\n \\\"threeDLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\\\",\\n \\\"threeDLogoToggle\\\" : \\\"true\\\",\\n \\\"threeDLogoCSS\\\" : \\\"width:24px;height:24px;background:;\\\",\\n \\\"interactiveToolsCSS\\\" : \\\"background:;\\\",\\n \\\"skyBoxEnabled\\\" : \\\"false\\\",\\n \\\"skyBoxBlur\\\" : \\\"0\\\",\\n \\\"shadowToggle\\\" : \\\"false\\\",\\n \\\"shadowOpacity\\\" : \\\"0.5\\\",\\n \\\"shadowBlur\\\" : \\\"0\\\",\\n \\\"shadowLightIntensity\\\" : \\\"0.3\\\",\\n \\\"cameraMinVerticalAngle\\\" : \\\"-90\\\",\\n \\\"cameraMaxVerticalAngle\\\" : \\\"90\\\",\\n \\\"cameraMinZoom\\\" : \\\"1\\\",\\n \\\"cameraMaxZoom\\\" : \\\"6\\\",\\n \\\"cameraPanning\\\" : \\\"0.5\\\",\\n \\\"cameraBloom\\\" : \\\"0\\\",\\n \\\"cameraContrast\\\" : \\\"1\\\",\\n \\\"cameraExposure\\\" : \\\"1\\\",\\n \\\"fxaaOn\\\" : \\\"true\\\",\\n \\\"enableSimpleMeasurement\\\" : \\\"false\\\",\\n \\\"enableCoordinateDisplay\\\" : \\\"false\\\",\\n \\\"baseUnit\\\" : \\\"m\\\",\\n \\\"displayUnit\\\" : \\\"m\\\",\\n \\\"enableARBtn\\\" : \\\"false\\\",\\n \\\"enableAnimationControl\\\" : \\\"false\\\",\\n \\\"animationSpeed\\\" : \\\"1\\\",\\n \\\"animationIdleTime\\\" : \\\"5\\\",\\n \\\"backgroundIsGradient\\\" : \\\"false\\\",\\n \\\"backgroundIsColor\\\" : \\\"false\\\",\\n \\\"gradientBackgroundColor1\\\" : \\\"#ffffff\\\",\\n \\\"gradientBackgroundColor2\\\" : \\\"#aaaaaa\\\",\\n \\\"plainBackgroundColor\\\" : \\\"#ffffff\\\",\\n \\\"environmentName\\\" : \\\"studio_small\\\",\\n \\\"baseUnits\\\" : \\\"m,cm,mm,yd,ft,in\\\",\\n \\\"displayUnits\\\" : \\\"m,cm,mm,yd,ft,in\\\"\\n}\"
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/embeds/create"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"model_id": 281,
"name": "\"my embeds name\"",
"save_user_theme": false,
"config": "{\n \"renderCanvasCSS\" : \"background:;\",\n \"environmentURL\" : \"images\/environment.dds\",\n \"companyLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\",\n \"companyLogoToggle\" : \"true\",\n \"companyLink\" : \"https:\/\/dgg3d.com\",\n \"companyLogoCSS\" : \"width:120px;height:71.3004px;background:;\",\n \"productLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\",\n \"productLogoToggle\" : \"true\",\n \"productLink\" : \"https:\/\/rapidpipeline.com\",\n \"productLogoCSS\" : \"width:120px;height:21.4819px;background:;\",\n \"threeDLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\",\n \"threeDLogoToggle\" : \"true\",\n \"threeDLogoCSS\" : \"width:24px;height:24px;background:;\",\n \"interactiveToolsCSS\" : \"background:;\",\n \"skyBoxEnabled\" : \"false\",\n \"skyBoxBlur\" : \"0\",\n \"shadowToggle\" : \"false\",\n \"shadowOpacity\" : \"0.5\",\n \"shadowBlur\" : \"0\",\n \"shadowLightIntensity\" : \"0.3\",\n \"cameraMinVerticalAngle\" : \"-90\",\n \"cameraMaxVerticalAngle\" : \"90\",\n \"cameraMinZoom\" : \"1\",\n \"cameraMaxZoom\" : \"6\",\n \"cameraPanning\" : \"0.5\",\n \"cameraBloom\" : \"0\",\n \"cameraContrast\" : \"1\",\n \"cameraExposure\" : \"1\",\n \"fxaaOn\" : \"true\",\n \"enableSimpleMeasurement\" : \"false\",\n \"enableCoordinateDisplay\" : \"false\",\n \"baseUnit\" : \"m\",\n \"displayUnit\" : \"m\",\n \"enableARBtn\" : \"false\",\n \"enableAnimationControl\" : \"false\",\n \"animationSpeed\" : \"1\",\n \"animationIdleTime\" : \"5\",\n \"backgroundIsGradient\" : \"false\",\n \"backgroundIsColor\" : \"false\",\n \"gradientBackgroundColor1\" : \"#ffffff\",\n \"gradientBackgroundColor2\" : \"#aaaaaa\",\n \"plainBackgroundColor\" : \"#ffffff\",\n \"environmentName\" : \"studio_small\",\n \"baseUnits\" : \"m,cm,mm,yd,ft,in\",\n \"displayUnits\" : \"m,cm,mm,yd,ft,in\"\n}"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/embeds/create'
payload = {
"model_id": 281,
"name": "\"my embeds name\"",
"save_user_theme": false,
"config": "{\n \"renderCanvasCSS\" : \"background:;\",\n \"environmentURL\" : \"images\/environment.dds\",\n \"companyLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\",\n \"companyLogoToggle\" : \"true\",\n \"companyLink\" : \"https:\/\/dgg3d.com\",\n \"companyLogoCSS\" : \"width:120px;height:71.3004px;background:;\",\n \"productLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\",\n \"productLogoToggle\" : \"true\",\n \"productLink\" : \"https:\/\/rapidpipeline.com\",\n \"productLogoCSS\" : \"width:120px;height:21.4819px;background:;\",\n \"threeDLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\",\n \"threeDLogoToggle\" : \"true\",\n \"threeDLogoCSS\" : \"width:24px;height:24px;background:;\",\n \"interactiveToolsCSS\" : \"background:;\",\n \"skyBoxEnabled\" : \"false\",\n \"skyBoxBlur\" : \"0\",\n \"shadowToggle\" : \"false\",\n \"shadowOpacity\" : \"0.5\",\n \"shadowBlur\" : \"0\",\n \"shadowLightIntensity\" : \"0.3\",\n \"cameraMinVerticalAngle\" : \"-90\",\n \"cameraMaxVerticalAngle\" : \"90\",\n \"cameraMinZoom\" : \"1\",\n \"cameraMaxZoom\" : \"6\",\n \"cameraPanning\" : \"0.5\",\n \"cameraBloom\" : \"0\",\n \"cameraContrast\" : \"1\",\n \"cameraExposure\" : \"1\",\n \"fxaaOn\" : \"true\",\n \"enableSimpleMeasurement\" : \"false\",\n \"enableCoordinateDisplay\" : \"false\",\n \"baseUnit\" : \"m\",\n \"displayUnit\" : \"m\",\n \"enableARBtn\" : \"false\",\n \"enableAnimationControl\" : \"false\",\n \"animationSpeed\" : \"1\",\n \"animationIdleTime\" : \"5\",\n \"backgroundIsGradient\" : \"false\",\n \"backgroundIsColor\" : \"false\",\n \"gradientBackgroundColor1\" : \"#ffffff\",\n \"gradientBackgroundColor2\" : \"#aaaaaa\",\n \"plainBackgroundColor\" : \"#ffffff\",\n \"environmentName\" : \"studio_small\",\n \"baseUnits\" : \"m,cm,mm,yd,ft,in\",\n \"displayUnits\" : \"m,cm,mm,yd,ft,in\"\n}"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (201, success):
{
'status': 'Successful',
'message': 'Embed created successfully.',
'rapidmodel_id': 31,
'embed_id': 513,
'embed_url': 'http://api.rapidpipeline.com/viewer?id=iKlCoxprxK',
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Embed
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/embeds/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/embeds/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/embeds/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (204, success):
Empty response
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Embed from Base Asset
requires authentication
Create an embed from a base asset. The base asset must be in the .glb file format. The webhooks will be called with the 'embed_from_raw_creation' event to notify the user as soon as the embed is created
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/embeds/raw" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"raw_model_id\": 281,
\"name\": \"\\\"my embeds name\\\"\",
\"save_user_theme\": false,
\"config\": \"{\\n \\\"renderCanvasCSS\\\" : \\\"background:;\\\",\\n \\\"environmentURL\\\" : \\\"images\\/environment.dds\\\",\\n \\\"companyLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\\\",\\n \\\"companyLogoToggle\\\" : \\\"true\\\",\\n \\\"companyLink\\\" : \\\"https:\\/\\/dgg3d.com\\\",\\n \\\"companyLogoCSS\\\" : \\\"width:120px;height:71.3004px;background:;\\\",\\n \\\"productLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\\\",\\n \\\"productLogoToggle\\\" : \\\"true\\\",\\n \\\"productLink\\\" : \\\"https:\\/\\/rapidpipeline.com\\\",\\n \\\"productLogoCSS\\\" : \\\"width:120px;height:21.4819px;background:;\\\",\\n \\\"threeDLogo\\\" : \\\"data:image\\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\\\",\\n \\\"threeDLogoToggle\\\" : \\\"true\\\",\\n \\\"threeDLogoCSS\\\" : \\\"width:24px;height:24px;background:;\\\",\\n \\\"interactiveToolsCSS\\\" : \\\"background:;\\\",\\n \\\"skyBoxEnabled\\\" : \\\"false\\\",\\n \\\"skyBoxBlur\\\" : \\\"0\\\",\\n \\\"shadowToggle\\\" : \\\"false\\\",\\n \\\"shadowOpacity\\\" : \\\"0.5\\\",\\n \\\"shadowBlur\\\" : \\\"0\\\",\\n \\\"shadowLightIntensity\\\" : \\\"0.3\\\",\\n \\\"cameraMinVerticalAngle\\\" : \\\"-90\\\",\\n \\\"cameraMaxVerticalAngle\\\" : \\\"90\\\",\\n \\\"cameraMinZoom\\\" : \\\"1\\\",\\n \\\"cameraMaxZoom\\\" : \\\"6\\\",\\n \\\"cameraPanning\\\" : \\\"0.5\\\",\\n \\\"cameraBloom\\\" : \\\"0\\\",\\n \\\"cameraContrast\\\" : \\\"1\\\",\\n \\\"cameraExposure\\\" : \\\"1\\\",\\n \\\"fxaaOn\\\" : \\\"true\\\",\\n \\\"enableSimpleMeasurement\\\" : \\\"false\\\",\\n \\\"enableCoordinateDisplay\\\" : \\\"false\\\",\\n \\\"baseUnit\\\" : \\\"m\\\",\\n \\\"displayUnit\\\" : \\\"m\\\",\\n \\\"enableARBtn\\\" : \\\"false\\\",\\n \\\"enableAnimationControl\\\" : \\\"false\\\",\\n \\\"animationSpeed\\\" : \\\"1\\\",\\n \\\"animationIdleTime\\\" : \\\"5\\\",\\n \\\"backgroundIsGradient\\\" : \\\"false\\\",\\n \\\"backgroundIsColor\\\" : \\\"false\\\",\\n \\\"gradientBackgroundColor1\\\" : \\\"#ffffff\\\",\\n \\\"gradientBackgroundColor2\\\" : \\\"#aaaaaa\\\",\\n \\\"plainBackgroundColor\\\" : \\\"#ffffff\\\",\\n \\\"environmentName\\\" : \\\"studio_small\\\",\\n \\\"baseUnits\\\" : \\\"m,cm,mm,yd,ft,in\\\",\\n \\\"displayUnits\\\" : \\\"m,cm,mm,yd,ft,in\\\"\\n}\"
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/embeds/raw"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"raw_model_id": 281,
"name": "\"my embeds name\"",
"save_user_theme": false,
"config": "{\n \"renderCanvasCSS\" : \"background:;\",\n \"environmentURL\" : \"images\/environment.dds\",\n \"companyLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\",\n \"companyLogoToggle\" : \"true\",\n \"companyLink\" : \"https:\/\/dgg3d.com\",\n \"companyLogoCSS\" : \"width:120px;height:71.3004px;background:;\",\n \"productLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\",\n \"productLogoToggle\" : \"true\",\n \"productLink\" : \"https:\/\/rapidpipeline.com\",\n \"productLogoCSS\" : \"width:120px;height:21.4819px;background:;\",\n \"threeDLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\",\n \"threeDLogoToggle\" : \"true\",\n \"threeDLogoCSS\" : \"width:24px;height:24px;background:;\",\n \"interactiveToolsCSS\" : \"background:;\",\n \"skyBoxEnabled\" : \"false\",\n \"skyBoxBlur\" : \"0\",\n \"shadowToggle\" : \"false\",\n \"shadowOpacity\" : \"0.5\",\n \"shadowBlur\" : \"0\",\n \"shadowLightIntensity\" : \"0.3\",\n \"cameraMinVerticalAngle\" : \"-90\",\n \"cameraMaxVerticalAngle\" : \"90\",\n \"cameraMinZoom\" : \"1\",\n \"cameraMaxZoom\" : \"6\",\n \"cameraPanning\" : \"0.5\",\n \"cameraBloom\" : \"0\",\n \"cameraContrast\" : \"1\",\n \"cameraExposure\" : \"1\",\n \"fxaaOn\" : \"true\",\n \"enableSimpleMeasurement\" : \"false\",\n \"enableCoordinateDisplay\" : \"false\",\n \"baseUnit\" : \"m\",\n \"displayUnit\" : \"m\",\n \"enableARBtn\" : \"false\",\n \"enableAnimationControl\" : \"false\",\n \"animationSpeed\" : \"1\",\n \"animationIdleTime\" : \"5\",\n \"backgroundIsGradient\" : \"false\",\n \"backgroundIsColor\" : \"false\",\n \"gradientBackgroundColor1\" : \"#ffffff\",\n \"gradientBackgroundColor2\" : \"#aaaaaa\",\n \"plainBackgroundColor\" : \"#ffffff\",\n \"environmentName\" : \"studio_small\",\n \"baseUnits\" : \"m,cm,mm,yd,ft,in\",\n \"displayUnits\" : \"m,cm,mm,yd,ft,in\"\n}"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/embeds/raw'
payload = {
"raw_model_id": 281,
"name": "\"my embeds name\"",
"save_user_theme": false,
"config": "{\n \"renderCanvasCSS\" : \"background:;\",\n \"environmentURL\" : \"images\/environment.dds\",\n \"companyLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...kSuQmCC\",\n \"companyLogoToggle\" : \"true\",\n \"companyLink\" : \"https:\/\/dgg3d.com\",\n \"companyLogoCSS\" : \"width:120px;height:71.3004px;background:;\",\n \"productLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUh...ASUVORK5CYII=\",\n \"productLogoToggle\" : \"true\",\n \"productLink\" : \"https:\/\/rapidpipeline.com\",\n \"productLogoCSS\" : \"width:120px;height:21.4819px;background:;\",\n \"threeDLogo\" : \"data:image\/png;base64,iVBORw0KGgoAAAANSUhEU...OAAAAAElFTkSuQmCC\",\n \"threeDLogoToggle\" : \"true\",\n \"threeDLogoCSS\" : \"width:24px;height:24px;background:;\",\n \"interactiveToolsCSS\" : \"background:;\",\n \"skyBoxEnabled\" : \"false\",\n \"skyBoxBlur\" : \"0\",\n \"shadowToggle\" : \"false\",\n \"shadowOpacity\" : \"0.5\",\n \"shadowBlur\" : \"0\",\n \"shadowLightIntensity\" : \"0.3\",\n \"cameraMinVerticalAngle\" : \"-90\",\n \"cameraMaxVerticalAngle\" : \"90\",\n \"cameraMinZoom\" : \"1\",\n \"cameraMaxZoom\" : \"6\",\n \"cameraPanning\" : \"0.5\",\n \"cameraBloom\" : \"0\",\n \"cameraContrast\" : \"1\",\n \"cameraExposure\" : \"1\",\n \"fxaaOn\" : \"true\",\n \"enableSimpleMeasurement\" : \"false\",\n \"enableCoordinateDisplay\" : \"false\",\n \"baseUnit\" : \"m\",\n \"displayUnit\" : \"m\",\n \"enableARBtn\" : \"false\",\n \"enableAnimationControl\" : \"false\",\n \"animationSpeed\" : \"1\",\n \"animationIdleTime\" : \"5\",\n \"backgroundIsGradient\" : \"false\",\n \"backgroundIsColor\" : \"false\",\n \"gradientBackgroundColor1\" : \"#ffffff\",\n \"gradientBackgroundColor2\" : \"#aaaaaa\",\n \"plainBackgroundColor\" : \"#ffffff\",\n \"environmentName\" : \"studio_small\",\n \"baseUnits\" : \"m,cm,mm,yd,ft,in\",\n \"displayUnits\" : \"m,cm,mm,yd,ft,in\"\n}"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
{
"message" : "Embed creation pending, wait for the webhook call",
"embed_id": 513,
"embed_url": 'http://api.rapidpipeline.com/viewer?id=iKlCoxprxK',
}
Example response (422, no glb format):
{
"message": "Raw model is not in the glb file format"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Presets
These are saved 3D Processor Settings for you to organize your assets better. Rapid Models carry on the preset information through which they are created, this way you can understand which Rapid Model was created through which preset.
In order to create a preset, the preset has to comply to the rules of the 3D processing schema. Please find related reference docs here.
In most cases, it is probably best if you create your preset using our UI and then refer to its preset ID in relevant API calls when necessary.
Here are all preset related endpoints:
Create Preset
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/preset/create" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"name of the new preset\",
\"description\": \"Optimizes for 20k faces and drops textures\",
\"rapidCompactCoreVersion\": \"6.1.1\",
\"config\": {
\"schema\": \"2.5\",
\"limits\": {
\"faces\": {
\"count\": 30000
},
\"textures\": {
\"baseColor\": 2048,
\"emissive\": 2048,
\"normal\": 2048,
\"orm\": 2048
}
},
\"assetSimplification\": {
\"meshDecimation\": {
\"method\": \"rebake\"
},
\"topologySettings\": {
\"vertexMergingDistance\": 0.005,
\"meshDensityEqualization\": 0,
\"boundaryPreservationFactor\": 0.5
},
\"uvAndAtlasSettings\": {
\"uvStretchTolerance\": 0
},
\"materialAndTextureBaking\": {
\"bakingQuality\": \"medium\",
\"bakeNormalMap\": true,
\"bakeAOMap\": false
}
},
\"compressionAndExport\": {
\"fileExports\": [
{
\"fileType\": \"glb\",
\"meshCompressionMethod\": \"none\",
\"customScaling\": 1,
\"textureFormat\": {
\"baseColor\": \"auto\",
\"emissive\": \"auto\",
\"normal\": \"png\",
\"orm\": \"auto\"
}
}
]
}
}
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/create"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "name of the new preset",
"description": "Optimizes for 20k faces and drops textures",
"rapidCompactCoreVersion": "6.1.1",
"config": {
"schema": "2.5",
"limits": {
"faces": {
"count": 30000
},
"textures": {
"baseColor": 2048,
"emissive": 2048,
"normal": 2048,
"orm": 2048
}
},
"assetSimplification": {
"meshDecimation": {
"method": "rebake"
},
"topologySettings": {
"vertexMergingDistance": 0.005,
"meshDensityEqualization": 0,
"boundaryPreservationFactor": 0.5
},
"uvAndAtlasSettings": {
"uvStretchTolerance": 0
},
"materialAndTextureBaking": {
"bakingQuality": "medium",
"bakeNormalMap": true,
"bakeAOMap": false
}
},
"compressionAndExport": {
"fileExports": [
{
"fileType": "glb",
"meshCompressionMethod": "none",
"customScaling": 1,
"textureFormat": {
"baseColor": "auto",
"emissive": "auto",
"normal": "png",
"orm": "auto"
}
}
]
}
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/create'
payload = {
"name": "name of the new preset",
"description": "Optimizes for 20k faces and drops textures",
"rapidCompactCoreVersion": "6.1.1",
"config": {
"schema": "2.5",
"limits": {
"faces": {
"count": 30000
},
"textures": {
"baseColor": 2048,
"emissive": 2048,
"normal": 2048,
"orm": 2048
}
},
"assetSimplification": {
"meshDecimation": {
"method": "rebake"
},
"topologySettings": {
"vertexMergingDistance": 0.005,
"meshDensityEqualization": 0,
"boundaryPreservationFactor": 0.5
},
"uvAndAtlasSettings": {
"uvStretchTolerance": 0
},
"materialAndTextureBaking": {
"bakingQuality": "medium",
"bakeNormalMap": true,
"bakeAOMap": false
}
},
"compressionAndExport": {
"fileExports": [
{
"fileType": "glb",
"meshCompressionMethod": "none",
"customScaling": 1,
"textureFormat": {
"baseColor": "auto",
"emissive": "auto",
"normal": "png",
"orm": "auto"
}
}
]
}
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Update Preset
requires authentication
Example request:
curl --request PATCH \
"https://api.rapidpipeline.com/api/v2/preset/update" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"id\": 42,
\"name\": \"name of the new preset\",
\"config\": {
\"import\": {
\"general\": {
\"rotateZUp\": false,
\"fixAnimationData\": false,
\"normalmapYFlip\": false
},
\"USD\": {
\"profile\": \"arkit\",
\"purpose\": \"render\"
},
\"CAD\": {
\"tessellationResolution\": \"fine\"
},
\"discard\": {
\"cameras\": false,
\"lights\": false,
\"animations\": false,
\"morphTargets\": false,
\"unusedUVs\": false
}
},
\"export\": [
{
\"fileName\": \"\",
\"textureMapFilePrefix\": \"\",
\"discard\": [],
\"format\": {
\"gltf\": {
\"pbrMaterial\": []
}
}
}
]
}
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/update"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"id": 42,
"name": "name of the new preset",
"config": {
"import": {
"general": {
"rotateZUp": false,
"fixAnimationData": false,
"normalmapYFlip": false
},
"USD": {
"profile": "arkit",
"purpose": "render"
},
"CAD": {
"tessellationResolution": "fine"
},
"discard": {
"cameras": false,
"lights": false,
"animations": false,
"morphTargets": false,
"unusedUVs": false
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": [],
"format": {
"gltf": {
"pbrMaterial": []
}
}
}
]
}
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/update'
payload = {
"id": 42,
"name": "name of the new preset",
"config": {
"import": {
"general": {
"rotateZUp": false,
"fixAnimationData": false,
"normalmapYFlip": false
},
"USD": {
"profile": "arkit",
"purpose": "render"
},
"CAD": {
"tessellationResolution": "fine"
},
"discard": {
"cameras": false,
"lights": false,
"animations": false,
"morphTargets": false,
"unusedUVs": false
}
},
"export": [
{
"fileName": "",
"textureMapFilePrefix": "",
"discard": [],
"format": {
"gltf": {
"pbrMaterial": []
}
}
}
]
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get all Factory Presets
requires authentication
Factory Presets are provided by RapidCompact
A factory presets describes a optimization setting for different applications e.g. Lens Studio, Game Engines (Unreal, Unity) and devices (e.g. Hololens). You can use the returned id when using the Optimize endpoint
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/preset/factory" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/factory"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/factory'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
[
{
"id": 1,
"name": "Spark AR Low Res",
"config": "{\"workflowSettings\":{\"targetMeshResolution\":{\"faceCount\":15000},\"targetTextureResolution\":{\"baseColor\":1024,\"emissive\":1024,\"normal\":1024,\"orm\":1024}},\"assetSimplification\":{\"meshDecimation\":{\"method\":\"rebake\"},\"topologySettings\":{\"vertexMergingDistance\":0.005,\"meshDensityEqualization\":0,\"boundaryPreservationFactor\":0.5},\"uvAndAtlasSettings\":{\"uvStretchTolerance\":0},\"materialAndTextureBaking\":{\"bakingQuality\":\"low\",\"bakeNormalMap\":true,\"bakeAOMap\":false}},\"compressionAndExport\":{\"fileExports\":[{\"fileType\":\"glb\",\"meshCompressionMethod\":\"none\",\"customScaling\":1,\"textureFormat\":{\"baseColor\":\"jpg\",\"emissive\":\"jpg\",\"normal\":\"jpg\",\"orm\":\"jpg\"}}]}}"
},
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Convert Preset
requires authentication
Convert a preset in API format to CLI format and CLI commands. The endpoint will return a zip file containing the requested files.
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/preset/rpdx" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"config\": {
\"schema\": \"2.5\",
\"limits\": {
\"faces\": {
\"count\": 30000
},
\"textures\": {
\"baseColor\": 2048,
\"emissive\": 2048,
\"normal\": 2048,
\"orm\": 2048
}
},
\"assetSimplification\": {
\"meshDecimation\": {
\"method\": \"rebake\"
},
\"topologySettings\": {
\"vertexMergingDistance\": 0.005,
\"meshDensityEqualization\": 0,
\"boundaryPreservationFactor\": 0.5
},
\"uvAndAtlasSettings\": {
\"uvStretchTolerance\": 0
},
\"materialAndTextureBaking\": {
\"bakingQuality\": \"medium\",
\"bakeNormalMap\": true,
\"bakeAOMap\": false
}
},
\"compressionAndExport\": {
\"fileExports\": [
{
\"fileType\": \"glb\",
\"meshCompressionMethod\": \"none\",
\"customScaling\": 1,
\"textureFormat\": {
\"baseColor\": \"auto\",
\"emissive\": \"auto\",
\"normal\": \"png\",
\"orm\": \"auto\"
}
}
]
}
}
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/rpdx"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"config": {
"schema": "2.5",
"limits": {
"faces": {
"count": 30000
},
"textures": {
"baseColor": 2048,
"emissive": 2048,
"normal": 2048,
"orm": 2048
}
},
"assetSimplification": {
"meshDecimation": {
"method": "rebake"
},
"topologySettings": {
"vertexMergingDistance": 0.005,
"meshDensityEqualization": 0,
"boundaryPreservationFactor": 0.5
},
"uvAndAtlasSettings": {
"uvStretchTolerance": 0
},
"materialAndTextureBaking": {
"bakingQuality": "medium",
"bakeNormalMap": true,
"bakeAOMap": false
}
},
"compressionAndExport": {
"fileExports": [
{
"fileType": "glb",
"meshCompressionMethod": "none",
"customScaling": 1,
"textureFormat": {
"baseColor": "auto",
"emissive": "auto",
"normal": "png",
"orm": "auto"
}
}
]
}
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/rpdx'
payload = {
"config": {
"schema": "2.5",
"limits": {
"faces": {
"count": 30000
},
"textures": {
"baseColor": 2048,
"emissive": 2048,
"normal": 2048,
"orm": 2048
}
},
"assetSimplification": {
"meshDecimation": {
"method": "rebake"
},
"topologySettings": {
"vertexMergingDistance": 0.005,
"meshDensityEqualization": 0,
"boundaryPreservationFactor": 0.5
},
"uvAndAtlasSettings": {
"uvStretchTolerance": 0
},
"materialAndTextureBaking": {
"bakingQuality": "medium",
"bakeNormalMap": true,
"bakeAOMap": false
}
},
"compressionAndExport": {
"fileExports": [
{
"fileType": "glb",
"meshCompressionMethod": "none",
"customScaling": 1,
"textureFormat": {
"baseColor": "auto",
"emissive": "auto",
"normal": "png",
"orm": "auto"
}
}
]
}
}
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
<Zip File> Streamed Response
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Preset in CLI Format
requires authentication
The endpoint will return a zip file containing the requested files
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/preset/rpdx/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/rpdx/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/rpdx/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
<Zip File> Streamed Response
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Download Preset
requires authentication
Downloads a preset as zip file which contains both API and CLI formats.
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/preset/281/download" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/281/download"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/281/download'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
<Zip File> Streamed Response
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Preset
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/preset/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"id": 11,
"name": "preset 2",
"config": {
"schema": "2.5",
"limits": {
"faces": {
"count": 30000
},
"textures": {
"baseColor": 2048,
"emissive": 2048,
"normal": 2048,
"orm": 2048
}
},
"assetSimplification": {
"meshDecimation": {
"method": "rebake"
},
"topologySettings": {
"vertexMergingDistance": 0.005,
"meshDensityEqualization": 0,
"boundaryPreservationFactor": 0.5
},
"uvAndAtlasSettings": {
"uvStretchTolerance": 0
},
"materialAndTextureBaking": {
"bakingQuality": "medium",
"bakeNormalMap": true,
"bakeAOMap": false
}
},
"compressionAndExport": {
"fileExports": [
{
"fileType": "glb",
"meshCompressionMethod": "none",
"customScaling": 1,
"textureFormat": {
"baseColor": "auto",
"emissive": "auto",
"normal": "png",
"orm": "auto"
}
}
]
}
},
"rpdx_version": "6.1.1",
"user_id": 328,
"created_at": "2021-04-22T09:11:30.000000Z",
"updated_at": "2021-04-22T09:11:30.000000Z"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Preset
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/preset/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset/281'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get all Presets
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/preset" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/preset"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/preset'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
[
{
"id": 11,
"name": "preset 2",
"config": "{\"sceneManipulation\":{\"rotateZUp\":false,\"centerModel\":false,\"removeInvisibleGeometry\":false,\"discardAnimations\":false,\"removeSmallFeatures\":{\"removalPercentage\":0}},\"assetSimplification\":{\"meshDecimation\":{\"method\":\"rebake\"},\"topologySettings\":{\"vertexMergingDistance\":0.005,\"meshDensityEqualization\":0,\"boundaryPreservationFactor\":0.5,\"preserveTopology\":false},\"uvAndAtlasSettings\":{\"uvStretchTolerance\":0},\"materialAndTextureBaking\":{\"bakingQuality\":\"medium\",\"bakeNormalMap\":true,\"bakeAOMap\":true}},\"compressionAndExport\":{\"fileExports\":[{\"fileType\":\"glb\",\"meshCompressionMethod\":\"none\",\"customScaling\":1,\"textureFormat\":{\"baseColor\":\"auto\",\"emissive\":\"auto\",\"normal\":\"auto\",\"orm\":\"auto\"}},{\"fileType\":\"usdz\",\"meshCompressionMethod\":\"none\",\"customScaling\":1,\"textureFormat\":{\"baseColor\":\"auto\",\"emissive\":\"auto\",\"normal\":\"auto\",\"orm\":\"auto\"}},{\"fileType\":\"obj\",\"meshCompressionMethod\":\"none\",\"customScaling\":1,\"textureFormat\":{\"baseColor\":\"auto\",\"emissive\":\"auto\",\"normal\":\"auto\",\"orm\":\"auto\"}}]},\"schema\":\"2.5\",\"limits\":{\"faces\":{\"percentage\":50},\"textures\":{\"baseColor\":2048,\"emissive\":2048,\"normal\":2048,\"orm\":2048}}}",
"rpdx_version": "6.1.1",
"user_id": 328,
"created_at": "2023-01-22T09:11:30.000000Z",
"updated_at": "2023-01-22T09:11:30.000000Z",
"description": "",
"meta": "{\"filename\": {\"useId\": false, \"useSuffix\": null, \"usePresetName\": false}}"
}
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Rapid Model
These are sometimes referred to as optimized models. They are created by processing the base assets through 3D Processor (making a POST call to Optimize endpoint of Base Asset).
Here are all rapid model related endpoints:
Get Rapid Models
requires authentication
Paginated response of your rapid models. Search for rapid models by name or tag
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel?q=yourSearchString" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel"
);
const params = {
"q": "yourSearchString",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel'
params = {
'q': 'yourSearchString',
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()
Example response (200, success):
{
"data": [
{
"id": 1,
"name": "teapot ",
"optimization_status": "done",
"created_at": "2022-05-24T16:28:56+02:00",
"updated_at": "2022-05-24T16:29:11+02:00",
"processing_step": "Done",
"external": false,
"rapid_compact_core_version": "6.1.1",
"tags": [
{
"id": 1,
"name": "Low-Poly",
"created_at": "2022-05-24 15:06:03",
"updated_at": "2022-05-24 15:06:03",
"rapid_id": 1
},
],
"export_name": "teapot_1",
"uuid": "f26cf299-c8df-4d4d-9eef-3f8e87d882b7",
"accepted": false,
"meta": {
"size": 665168,
"exportSize": 1495763
},
"origin": "",
"optimization_formats": "[...]",
"thumbnail": {
"first": "signed url",
"turntable": "signed url"
},
"model": {
"rootUrl": "rootURL",
"fileName": "fileName"
},
"rpd_info": "signed url",
"rpd_warnings": "signed url",
"downloads": {
"usdz": "signed url",
"glb": "signed url",
"all": {
"rapid.glb": "signed url",
"rapid.usdz": "signed url"
}
}
}
],
"links": {
"first": "https://url/api/v2/rapidmodel?page=1",
"last": "https://url/api/v2/rapidmodel?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://url/api/v2/rapidmodel?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://url/api/v2/rapidmodel",
"per_page": 12,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Rapid Model
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel/635" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/635"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/635'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 635,
"name": "teapot ",
"optimization_status": "done",
"created_at": "2021-02-16T16:50:41+01:00",
"updated_at": "2021-02-16T16:50:53+01:00",
"processing_step": "Done",
"external": false,
"rapid_compact_core_version": "6.1.1",
"tags": [
{
"id": 377,
"name": "Preserve UVs",
"created_at": "2024-02-15 18:05:36+00",
"updated_at": "2024-02-15 18:05:36+00",
"rapid_id": 635
}
],
"export_name": null,
"uuid": "d8316d1f-3c7d-4777-b72e-c760064f9d08",
"accepted": false,
"meta": {
"size": 573420,
"qc": [
{
"fbx": {
"maxScore": 75.12036636343548,
"avgScore": 53.22535526345469
}
},
{
"glb": {
"maxScore": 75.12185336255156,
"avgScore": 53.24014762786459
}
},
{
"usdz": {
"maxScore": 75.12063337875662,
"avgScore": 53.22537017442912
}
}
],
"exportSize": 1029548
},
"origin": "",
"optimization_formats": "[...]",
"thumbnail": {
"first": "signed url for the thumbnail",
"turntable": {
"rapid.glb": "signed url for theturntable"
}
},
"model": {
"rootUrl": "s3 link",
"fileName": "rapid.glb?signed"
},
"rpd_info": "signed url for rpd_info.json",
"rpd_warnings": "signed url for the warning.log",
"metrics": "signed url for the metrics.json",
"downloads": {
"glb": "signed url for the .glb",
"all": {
"rapid.glb": "signed url for the .glb"
}
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Rapid Model
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/rapidmodel/635" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/635"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/635'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Export Infos
requires authentication
Calling this endpoint return a list of links to download the exports and their respective infos
Please note that the export infos are generated only for glb and gltf formats
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel/695/exports" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/695/exports"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/695/exports'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"rapid.glb": {
"download": "signed s3 link to rapid.glb",
"info": {
"images": [
{
"channels": 3,
"compressedByteSize": 310996,
"height": 2048,
"mimetype": "image/jpeg",
"slot": "normal",
"width": 2048
}
]
}
},
"rapid.usdz": {
"download": "link to rapid.usdz",
"info": null
}
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Tag of a Rapid Model
requires authentication
Add Tags to a Rapid Model
requires authentication
Example request:
curl --request PUT \
"https://api.rapidpipeline.com/api/v2/rapidmodel/281" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"tags\": [
\"chair\",
\"brown\"
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/281"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"tags": [
"chair",
"brown"
]
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/281'
payload = {
"tags": [
"chair",
"brown"
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Download used Preset from Rapid Model
requires authentication
Downloads a preset as zip file which contains API and CLI formats
Only available for Rapidmodels that were optimized after 2023-03
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel/281/download/preset" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/281/download/preset"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/281/download/preset'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
<Zip File> Streamed Response
Example response (404, error):
Only available for Rapidmodels that were optimized after 2023-03
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Returns hash signed links for the quality control images generated after optimization.
requires authentication
The keys of the images are built with the following reasoning:
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel/281/renders" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/281/renders"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/281/renders'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
Example response (404, error):
Only available for Rapidmodels that were optimized after 2024-07
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Downloads the Quality Control report for the optimization output of a given format.
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/rapidmodel/281/usdz/downloadQc" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/281/usdz/downloadQc"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/281/usdz/downloadQc'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
Example response (404, error):
Only available for Rapidmodels that were optimized after 2024-07
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Multiple Rapid Models
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/rapidmodel/delete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"ids\": [
726,
324
]
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/rapidmodel/delete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"ids": [
726,
324
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/rapidmodel/delete'
payload = {
"ids": [
726,
324
]
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tags
API for listing all of base asset and rapid model tags.
Get all Base Asset Tags
requires authentication
Get all Rapid Model Tags
requires authentication
User
APIs for managing user profile.
Login
Returns a token that can be used for calling other endpoints
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"yourname@example.com\",
\"password\": \"your password\"
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "yourname@example.com",
"password": "your password"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/login'
payload = {
"email": "yourname@example.com",
"password": "your password"
}
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (422):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 2000
x-ratelimit-remaining: 1999
x-frame-options: ALLOWALL
vary: Origin
{
"message": "These credentials do not match our records.",
"errors": {
"email": [
"These credentials do not match our records."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Account
requires authentication
Delete the user account and all the data associated with it
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/user/delete" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"password\": \"\\\"your password\\\"\"
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/delete"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"password": "\"your password\""
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/delete'
payload = {
"password": "\"your password\""
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get RapidPoints
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/user/rapidpoints" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/rapidpoints"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/rapidpoints'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"rapidpoints": 20
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get Storage Left
requires authentication
Returns how much storage you have left to use (bytes)
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/user/storage" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/storage"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/storage'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
{
"storage_left": 107374182400
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Webhooks
RapidPipeline uses webhooks to notify your application when an event happens in your account. Webhooks are particularly useful for upload and optimization events. Instead of polling the API to know the status of your upload or optimization, RapidPipeline sends an event to your webhook.
Begin using webhooks with your RapidPipeline integration in just three steps:
- Create a webhook endpoint on your server
- Register the endpoint with RapidPipeline to go live
- Test your endpoint by clicking the test button in the webhooks page
What are webhooks
The webhook endpoint is just more code on your server, which could be written in Ruby, PHP, Node.js, or whatever. The webhook endpoint has an associated URL (e.g., https://example.com/webhooks). The RapidPipeline notifications are Event objects sent as POST requests (Fire-and-forget, no retry). This Event object contains all the relevant information about what just happened, including the type of event and the data associated with that event. The webhook endpoint uses the event details to take any required actions, such as indicating that an optimization should be done.
Validation
In order to validate an incoming webhook event you need to first set up a secret when creating it on RapidPipeline. This secret will be used to sign the body and send the signature as part of the requests header. You can use this secret on your receiving endpoint to validate the content of the body by signing it with the same secret. For an example check out this repository: https://github.com/DGG3D/webhook-api-example
Optimization Events
RapidPipeline sends the "optimization_finished" event. You can see an example on the right side
{
"event_type": "optimization_finished",
"timestamp": "2023-01-19T15:03:08.076920Z",
"data": {
"status": "Successful",
"message": "Optimization has ended and your rapid model is available to download.",
"rawmodel_id": 1961,
"rapidmodel_id": 4213,
"rapidmodel": {
"rapid.glb": "link to rapid model"
}
}
}
Upload Events
RapidPipeline sends an "analysis_finished" event when your uploaded model has been finished being analyzed and is now ready to be optimized. You can see an two examples for the successful and failed state on the right side.
For uploaded zip files RapidPipeline sends an "unzip_finished" event when your model has been finished being unzipped and is going to be analysed next. You can see an two examples for the successful and failed state on the right side.
{
"event_type": "analysis_finished",
"timestamp": "2023-01-02T15:03:08.076920Z",
"data": {
"status": "Successful",
"message": "Model analysis has ended and your base asset is ready to be optimized.",
"rawmodel_id": 1961,
}
}
{
"event_type": "analysis_finished",
"timestamp": "2023-01-02T15:03:08.076920Z",
"data": {
"status": "Failed",
"message": "Analysis failed",
"rawmodel_id": 1961,
}
}
{
"event_type": "unzip_finished",
"timestamp": "2024-01-02T15:03:08.076920Z",
"data": {
"status": "Successful",
"message": "Model successfully unzipped.",
"rawmodel_id": 1961,
}
}
{
"event_type": "unzip_finished",
"timestamp": "2024-01-02T15:03:08.076920Z",
"data": {
"status": "Failed",
"message": "Unzip failed",
"rawmodel_id": 1961,
}
}
Get Webhooks
requires authentication
Example request:
curl --request GET \
--get "https://api.rapidpipeline.com/api/v2/user/webhooks" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/webhooks"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/webhooks'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200, success):
[
{
"id": 6,
"user_id": 303,
"url": "https://mywebhookurl.com",
"last_called_at": "2021-10-26T09:45:47.000000Z",
"created_at": "2021-10-26T09:45:47.000000Z",
"updated_at": "2021-10-26T09:45:47.000000Z",
"secret": "secret",
"last_status": null,
"verify_ssl": true,
"failed_calls": 0,
"notified_at": null
}
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Create Webhook
requires authentication
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/user/webhooks" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"url\": \"https:\\/\\/example.com\\/webhook\",
\"secret\": \"my secret\",
\"verify_ssl\": true
}"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/webhooks"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"url": "https:\/\/example.com\/webhook",
"secret": "my secret",
"verify_ssl": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/webhooks'
payload = {
"url": "https:\/\/example.com\/webhook",
"secret": "my secret",
"verify_ssl": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200, success):
{
"id": 6,
"user_id": 303,
"url": "https://example.com/webhook",
"last_called_at": "2021-10-26T09:45:47.000000Z",
"created_at": "2021-10-26T09:45:47.000000Z",
"updated_at": "2021-10-26T09:45:47.000000Z",
"secret": "aut",
"last_status": null,
"verify_ssl": true,
"failed_calls": 0,
"notified_at": null
}
Example response (500, Maximum number of tags reached):
[
"code": 1,
"message": "Maximum number of webhooks allowed already created"
]
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Delete Webhook
requires authentication
Example request:
curl --request DELETE \
"https://api.rapidpipeline.com/api/v2/user/webhooks/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/webhooks/1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/webhooks/1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Test Webhook
requires authentication
A test event will be sent to the webhook to make sure it is accessible and can receive events
Call the "Test Webhook" endpoint again to see if the webhook was successfully invoked
Example request:
curl --request POST \
"https://api.rapidpipeline.com/api/v2/user/webhooks/test/1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"https://api.rapidpipeline.com/api/v2/user/webhooks/test/1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
import requests
import json
url = 'https://api.rapidpipeline.com/api/v2/user/webhooks/test/1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (200, success):
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.