You can use the Anything World's API in your application to request 3D models and other data based on different search criteria.
Python users can also use a package directly for easier integration. It's available at https://pypi.org/project/anything-world/ and can be installed with pip install anything-world
.
The API is divided in the library API (used to search and obtain models from our 3D asset library) and the processing API (used to rig, animate or otherwise process your own 3D models using our AI system). However, both use the same API key.
After generating the API key in our Dashboard, the API key can be used to authorize requests to the Anything World's API.
Bear in mind that many endpoints require the API to generate results.
The API is currently experimental and is subject to change. For use in a critical production environment, please reach out to us at hello@anything.world.
The following requests can be used to download 3D models from our library. Those are the same models available in our gallery. Here you can find models animated by our AI pipeline as well as static ones, and they are ideal for creating new games or entire 3D worlds without having to design nor animate by hand.
GET
https://api.anything.world/anything?key=<API_KEY>&name=<NAME>
Retrieve a single model (JSON response) based on its name. If there is an exact match it will be returned, otherwise a similar result (if found), or no model otherwise.
key*
String
API key
name*
String
Name to search, e.g. dog
fuzzy
Boolean
Whether to enable approximate matching (true by default)
GET
https://api.anything.world/anything?key=<API_KEY>&search=<QUERY>
Get a JSON array representing all models that matched the query string, which can be anything, such as a name (e.g. "cat"), a tag (e.g. "Christmas"), a habitat (e.g. "jungle" or "desert") or a taxonomical category (e.g. "animal" or "object"). The response is a JSON with an array of objects, where each object represents the data of a model, in the same format as that of the endpoint for obtaining a specific model, shared above.
key*
String
Your API key
search*
String
Search query
fuzzy
Boolean
Whether approximate matches are returned (default is true)
These requests give you access to our AI pipeline. With them you'll be able to animate your own 3D models. To know which types of models we support and other requirements that should be followed to have a proper animation, please refer to this page. At the end, we also present endpoints to generate 3D models from text or image.
POST
https://api.anything.world/animate
Get a JSON response with a "model_id"
representing an unique identifier for the 3D model being animated. It’s important to note that, because we’re sending files through the request, all parameters and files should be encoded as formdata
.
The files should be sent as the value of the files
key, no matter the amount of files. As value, a list of tuples should be provided with each tuple containing: (file_name, file_content, content_type)
. The file names should have the expected extension and content-type. Currently we support the following file types:
Meshes: OBJ, GLB, GLTF, FBX and DAE
Materials: MTL
Textures: JPG, PNG, BMP, GIF, TIF, TGA and TARGA
As content-type, please make sure your files have the expected one:
Make sure that all your mesh, materials and texture files are referencing each other as expected. For example, a material file named "foo.mtl"
should be properly referenced inside a "model.obj"
. The rule of thumb is: if you are able to open your model in a 3D editor like Blender and it shows all expected materials and textures bindings, it should work with our API as well.
It's also possible to send a ZIP file as your model data. Please make sure to include all the files in a single folder (please, don't use subfolders e.g. for materials, etc) and compress it as a valid .zip file (with the right content-type).
This request is asynchronous and follows a polling strategy, meaning that a response will be returned by the endpoint as fast as possible (in a few seconds). The animation process though takes time (approx. 10 minutes). Please, use the generated "model_id"
as parameter for a request to https://api.anything.world/user-processed-model endpoint to get the current status of the model being animated. When the request returns the final stage, the model should have been animated with success and the generated rigged files will be available to download. Please check the documentation for the https://api.anything.world/user-processed-model endpoint, it's just bellow, in the next section.
To better illustrate this process, we provide an open source Python library that can be used as example on how to communicate with our API: https://github.com/anythingworld/anything-world-python. Given it has minimal requirements, this implementation can be easily translated to other programming languages.
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
model_name*
String
A name to be given to the model
model_type*
Type of the given model (e.g. "cat"). This parameter is only mandatory ifauto_classify=false
. If model_type
is provided, text-based classification is always performed. If model_type
is not provided, auto_classify
must be true
or otherwise an error is given since the system does not have enough information to classify the model. If model_type
is not provided and auto_classify=true
, then 3D classification is performed instead of the text-based. It is recommended to provide model_type
over auto_classify
as it is more accurate, especially for best results in animal animation.
can_use_for_internal_improvements
String
"true"
if user allows AW to use the model for internal improvements (ML training, etc) and "false"
otherwise. If not specified, it defaults to "false"
author
String
Name of the author of the model. If not specified, it defaults to an empty string
license
String
License attributed to the model. Either "cc0"
, "ccby"
or "mit"
. If not specified, it defaults to "ccby"
symmetry*
String
"true"
if the model is symmetric, "false"
otherwise
files*
String
Files to be sent to be animated, encoded as a list of tuples like (file_name, file_content, content_type)
.
auto_classify
String
"true"
if user allows AW to automatically classify the model during processing and "false"
otherwise. If not specified, it defaults to "false"
. This parameter becomes mandatory if model_type
is not specified, as text-based classification needs to be performed from the model type then, please see the notes for that parameter.
auto_rotate
String
"true"
if user allows AW to automatically rotates the model during processing and "false"
otherwise. If not specified, it defaults to "false"
.
POST
https://api.anything.world/rig
This endpoint is pretty similar to the /animate
endpoint above, however it will only generate the rigging of the provided 3D model instead of also generating all the animations.
Get a JSON response with a "model_id"
representing an unique identifier for the 3D model being rigged. It’s important to note that, because we’re sending files through the request, all parameters and files should be encoded as formdata
.
The files should be sent as the value of the files
key, no matter the amount of files. As value, a list of tuples should be provided with each tuple containing: (file_name, file_content, content_type)
. The file names should have the expected extension and content-type. Currently we support the following file types:
Meshes: OBJ, GLB, GLTF, FBX and DAE
Materials: MTL
Textures: JPG, PNG, BMP, GIF, TIF, TGA and TARGA
As content-type, please make sure your files have the expected one:
Make sure that all your mesh, materials and texture files are referencing each other as expected. For example, a material file named "foo.mtl"
should be properly referenced inside a "model.obj"
. The rule of thumb is: if you are able to open your model in a 3D editor like Blender and it shows all expected materials and textures bindings, it should work with our API as well.
It's also possible to send a ZIP file as your model data. Please make sure to include all the files in a single folder (please, don't use subfolders e.g. for materials, etc) and compress it as a valid .zip file (with the right content-type).
This request is asynchronous and follows a polling strategy, meaning that a response will be returned by the endpoint as fast as possible (in a few seconds). The rigging process though takes time (approx. 3 minutes). Please, use the generated "model_id"
as parameter for a request to https://api.anything.world/user-processed-model endpoint to get the current status of the model being rigged. When the request returns the final stage, the model should have been rigged with success and the generated rigged files will be available to download. Please check the documentation for the https://api.anything.world/user-processed-model endpoint, it's just bellow, in the next section.
To better illustrate this process, we provide an open source Python library that can be used as example on how to communicate with our API: https://github.com/anythingworld/anything-world-python. Given it has minimal requirements, this implementation can be easily translated to other programming languages.
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
model_name*
String
A name to be given to the model
model_type*
Type of the given model (e.g. "cat"). This parameter is only mandatory ifauto_classify=false
. If model_type
is provided, text-based classification is always performed. If model_type
is not provided, auto_classify
must be true
or otherwise an error is given since the system does not have enough information to classify the model. If model_type
is not provided and auto_classify=true
, then 3D classification is performed instead of the text-based. It is recommended to provide model_type
over auto_classify
as it is more accurate, especially for best results in animal animation.
can_use_for_internal_improvements
String
"true"
if user allows AW to use the model for internal improvements (ML training, etc) and "false"
otherwise. If not specified, it defaults to "false"
author
String
Name of the author of the model. If not specified, it defaults to an empty string
license
String
License attributed to the model. Either "cc0"
, "ccby"
or "mit"
. If not specified, it defaults to "ccby"
symmetry*
String
"true"
if the model is symmetric, "false"
otherwise
files*
String
Files to be sent to be rigged, encoded as a list of tuples like (file_name, file_content, content_type)
.
auto_classify
String
"true"
if user allows AW to automatically classify the model during processing and "false"
otherwise. If not specified, it defaults to "false"
. This parameter becomes mandatory if model_type
is not specified, as text-based classification needs to be performed from the model type then, please see the notes for that parameter.
auto_rotate
String
"true"
if user allows AW to automatically rotates the model during processing and "false"
otherwise. If not specified, it defaults to "false"
.
OK Response. Created the model and returns the id for it.
Missing required parameters in the request
Error while trying to extract the category for the given model type
Uploaded file is unsafe
URL is not found
Uploaded file is too large
Too Many Requests User has no more credits. Please, visit the user's profile page to see current credits count and how to acquire more
General internal server error
Failed to increment the number of processed models by the user
Failed to store data on file system
Failed to publish message to pub/sub queue
Failed to store data on DB
GET
https://api.anything.world/user-processed-model?key=<API_KEY>&id=<MODEL_ID>&stage=<MODEL_STAGE>
Get a JSON response representing the current state of a model being processed by the AI pipeline. If a model has completed the stage specified in the query (or is fully processed if the stage is not given), the response will be a model entry in similar format as the returned JSON of https://api.anything.world/anything endpoint. An error is returned if the model faced a processing error or if the model has not reached yet the asked stage or is past it.
Note that you can speed up your request by setting the stage
parameter in a strategic manner, depending on your use case:
If you don't need other formats than the basic ones provided, you don't need to specify a stage
parameter (or specify stage="done"
). This way you'll receive a .obj
file for static and vehicle models; and .fbx
and .glb
for animated models. Our AI pipeline will return the models as soon as they are processed, however it will keep performing formats conversion and thumbnails generation on background, and the stage of the model will change for formats_conversion_finished
and thumbnails_generation_finished
when those operations are done. This is the preferred way to get a result as fast as possible;
If you care about having the results in .fbx
and .glb
for static and vehicle models as well as .dae
and .gltf
formats for all models, please request with stage="formats_conversion_finished"
. This will take longer to your request to finish, but you'll be able to have extra formats. You will still get some speed up by not having to wait for thumbnails generation to finish;
If you want to receive not only the extra formats but also thumbnail images representing previews of the 3D model, please use stage="thumbnails_generation_finished"
. This is the longest request and will not give you any speed up when compared with the other previous options.
Within the JSON structure, the model rig sub-object can be found in model.rig
. At its raw level, you can find the rigged mesh file in the formats cited above, e.g. model.rig.FBX
contains the FBX version of the rig. The animations can be found in model.rig.animations
, with a sub-object in the JSON for each animation, and inside that, a field for each format, e.g. model.rig.animations.walk.FBX
contains the walk animation (only available for some categories) in FBX format. If the model is not rigged and animated but a vehicle, you can find the separated parts in the model.parts
sub-object in the JSON response.
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
id*
String
stage
String
Stage to check. The model JSON will only be returned if the stage is exactly matched. If not specified, it only checks to see if the model is fully processed.
GET
https://api.anything.world/user-processed-models?key=<API_KEY>
Get a JSON response with an array of data from all the models processed with the AI pipeline by the user.
Each element of the array follows the same format of a processed model (rigged and animated model if the category allowed, otherwise part-split vehicle or static mesh) as described in the endpoint user-processed-model
(which you can check for more context, just note that in the endpoint described now you do not have the further control of the stage
parameter).
Within the JSON structure of an element of the array (that is, a processed model), the rig data sub-object can be found in model.rig
. At its raw level, you can find the rigged mesh file in the formats cited above, e.g. model.rig.FBX
contains the FBX version of the rig. The animations can be found in model.rig.animations
, with a sub-object in the JSON for each animation, and inside that, a field for each format, e.g. model.rig.animations.walk.FBX
contains the walk animation (only available for some categories) in FBX format. If the model is not rigged and animated but a vehicle, you can find the separated parts in the model.parts
sub-object in the JSON response.
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
POST
https://api.anything.world/text-to-3d
Get a JSON response with a "model_id"
representing an unique identifier for the 3D model being animated.
This request is asynchronous and follows a polling strategy, meaning that a response will be returned by the endpoint as fast as possible (in a few seconds). The generation process though takes time (approx. 6 minutes). Please, use the generated "model_id"
as parameter for a request to https://api.anything.world/user-generated-model endpoint to get the current status of the model being generated. When the request returns the final stage, the model should have been animated with success and the generated files will be available to download. Please check the documentation for the https://api.anything.world/user-generated-model endpoint, it's just bellow, in the next section.
To better illustrate this process, we provide an open source Python library that can be used as example on how to communicate with our API: https://github.com/anythingworld/anything-world-python. Given it has minimal requirements, this implementation can be easily translated to other programming languages.
It's important to note that you have a free allowance of model generation credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
text_prompt*
String
Text input that directs the model generation.
The maximum prompt length is 1024 characters, equivalent to approximately 100 words.
refine_prompt
Boolean
Refine the prompt to encourage a standard pose that will facilitate animation. It is treated as true if not specified.
can_use_for_internal_improvements
Boolean
true
if user allows AW to use the model for internal improvements (ML training, etc.) and false
otherwise. If not specified, it defaults to false
.
can_be_public
Boolean
true
if user allows to make the model available for public to use, false
otherwise. If not specified, it defaults to false
.
Missing required parameters in the request
Missing API key
Invalid API key
URL is not found
General internal server error
Failed to increment the number of processed models by the user
Failed to store data on file system
Failed to publish message to pub/sub queue
Failed to store data on DB
POST
https://api.anything.world/image-to-3d
Get a JSON response with a "model_id"
representing an unique identifier for the 3D model being generated. It’s important to note that, because we’re sending files through the request, all parameters and files should be encoded as formdata
.
This endpoint is pretty similar to the /text-to-3d
endpoint above, however it will generate the 3D model via image.
The file should be sent as the value of the files
key. As value, a list of tuples should be provided with each tuple containing: (file_name, file_content, content_type)
. The file name should have the expected extension and content-type. Currently we support the following file types:
Image files: JPG, PNG and JPEG
Request Body
key*
String
Your API key
model_name
String
A name to be given to the model, if not provided, system will take the file name as model_name
files*
String
Specifies the image input. Encode file as a list of tuples like (file_name, file_content, content_type)
.
can_use_for_internal_improvements
String
"true"
if user allows AW to use the model for internal improvements (ML training, etc.) and "false"
otherwise. If not specified, it defaults to "false"
.
can_be_public
String
"true"
if user allows to make the model available for public to use, "false"
otherwise. If not specified, it defaults to "false"
.
Missing required parameters in the request
Missing API key
Uploaded file is unsafe
Invalid API key
Uploaded file is too large
URL is not found
General internal server error
Failed to increment the number of processed models by the user
Failed to store data on file system
Failed to publish message to pub/sub queue
Failed to store data on DB
GET
https://api.anything.world/user-generated-model?key=<API_KEY>&id=<MODEL_ID>
Get a JSON response representing the current state of a model being generated by the mesh generation system. If a model is fully generated, the response will be a model entry in similar format as the returned JSON of https://api.anything.world/anything endpoint. An error is returned if the model faced a processing error or if the model has not yet generated.
Within the JSON structure, At its raw level, you can find the mesh file in the formats cited above, e.g. model.mesh.fbx
contains the FBX version of the generated model..
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
The generated model files can then be submitted to /animate
if you want to get the model animated.
key*
String
Your API key
id*
String
GET
https://api.anything.world/user-generated-models?key=<API_KEY>
Get a JSON response with an array of data from all the models generated with the mesh generation system by the user.
Each element of the array follows the same format of a generated model as described in the endpoint user-generated-model
Within the JSON structure, At its raw level, you can find the mesh file in the formats cited above, e.g. model.mesh.fbx
contains the FBX version of the generated model..
It's important to note that you have a free allowance of model processing credits which renews every month. Additional credits can be purchased in your profile page.
key*
String
Your API key
This example demonstrates how to use the /text-to-3d
and /animate
endpoints in sequence to generate a 3D model, poll for its status, and animate it once the model has been generated.
Node.js installed.
axios
for making HTTP requests (npm install axios
).
API credentials (API key).
Model id (returned by the endpoint, for instance)
Model id (returned by the or endpoint, for instance)