# Introduction

Learn how to store, optimize, and share 3D models, animations, and interactive content across your organization and beyond.

### What is echo3D?

echo3D is a cloud platform for **digital asset management (DAM)** for enterprises & teams to store, secure, optimize, and share 3D models anf scans across their organization and beyond.

echo3D is built to securely **store**, **share**, **optimize**, and **search** large 3D data while saving time and money in setting up your 3D cloud infrastructure and application programming interface (API). We help users to view and share massive 3D assets and digital twins, while allowing teams to discover, manage, and update 3D content in real-time across the entire organization.&#x20;

{% embed url="<https://www.youtube.com/watch?v=fwdA6L-fM_I>" %}

We offer a **3D-first** content management system (**CMS**) and delivery network (**CDN**), compression & conversion tools (**asset optimization**), scalable backend-as-a-service (**BaaS**) infrastructure, as well as **collaboration** tools, **access permission** tools, **versioning** and **reporting** tools, and a **3D library** with over 1M free assets.&#x20;

Store all 3D files as well as 2D images, and videos, and binary files in one central repository, with build-in **compression** and **conversion** tools, as well as **3D viewer**, **3D editor**, and a custom **WebAR experience builder**.

* Efficiently **manage** large 3D libraries across your entire organization
* **View** and **share** massive 3D models and digital twins of any format
* **Collaborate** and track **your** 3D content using one centralized platform
* **Organize** and **search** for 3D files using AI-powered tagging
* **Integrate** a 3D DAM into existing 3D workflows
* **Reduce spend** on incompatible 3D assets and duplicates
* **Secure** your 3D content on your local cloud infrastracture

### Why use echo3D?

Teams struggle to manage and update their 3D libraries and collaborate across their organization, resulting in time and resources wasted. Teams suffer from inefficient workflows, are unable to discover existing content and even spend money on incompatible 3D asset and asset duplicates.&#x20;

* **Unlock Content**: View and share massive 3D models and scans of any format and size, from the browser
* **Easily Collaborate**: Use one centralized system to manage and update 3D content in real-time across the entire organization.
* **Save time & resources**: Streamline your team’s 3D workflow, discover and track your 3D content and its versions, and minimize spend on incompatible assets and duplicates.

{% embed url="<https://www.youtube.com/watch?v=QfqeuH82yUw>" %}

echo3D enables professionals to handle, convert, and compress 3D models, interactive content, animations, videos, and images while providing interaction analytics & usage metrics.

We tackle the **unique complexities of 3D assets** (various file formats, fragmentation, interactivity, location-awareness, large file sizes, higher latency, etc.) by offering an **all-in-one 3D warehouse** for **better workflows** across your organization and beyond.

### How robust is echo3D?

For technical teams, our **cross-platform system and RESTful API** support any client-side platform, such as Unity, Unreal Engine, JavaScript, React, Swift, Blender, NVIDIA Omniverse, 8th Wall, Zapper, Niantic Lightship, Qualcomm Snapdragon Spaces, Meta Quest SDK, and more. Content creators can use our platform and manage 3D content from anywhere using our web console.

* **API Access**: All features of the platform are available through API queries, allowing for **easy integration** with your existing cloud environment and 3D tools (we also offer built-in plugins for Unity, Unreal, Blender, and more).
* **Local Cloud & On-Prem Deployment**: Deploy our platform on **your company's AWS, Google Cloud Platform, Microsoft Azure, or on-prem** cloud infrastructure.
* **3D Processing:** View and share massive 3D files and scans thanks to our **proprietary 3D optimization algorithm,** outperforming market standard compression tools by more than 10x.

### Where do I start?

Head over to the [Quickstart ](/quickstart/get-api-key)section to begin managing 3D assets:

{% content-ref url="/pages/-M41FBuc-owu3FzV8aW7" %}
[Quickstart](/quickstart/get-api-key)
{% endcontent-ref %}

### What can I use echo3D for?

3D, AR/VR, and spatial computing open a whole new world of possibilities of use cases and apps! You are only limited by your imagination. echo3D users include 3D use cases as:

1. [**Oil & gas, energy, and industrial use cases**](https://www.echo3d.com/solutions/industrial), e.g., visualize large structures and data.
2. [**Manufacturing**](https://www.echo3d.com/solutions/manufacturing), e.g., leverage 3D to reduce operating costs and waste, while improving productivity and time-to-market.
3. [**Architecture, engineering and construction**](https://www.echo3d.com/solutions/aec), e.g., streamline architectural design and construction, resulting in lower costs, less rework and more satisfied customers.
4. [**Metaverse, AR/VR**](https://www.echo3d.com/solutions/metaverse)[**, & Spatial Computing**](https://www.echo3d.com/solutions/metaverse), e.g., immersive 3D experiences for mobile devices and headsets.
5. [**Gami**](https://www.echo3d.com/solutions/gaming)[**ng**](https://www.echo3d.com/solutions/gaming), e.g., capturing digital monsters around the real world.
6. [**eCommerce & Retail**](https://www.echo3d.com/solutions/ecommerce), e.g., "try-before-you-buy" products in the comfort of your home.
7. [**Marketing & Advertising**](https://www.echo3d.com/solutions/marketing-advertising), e.g., engaging consumers through the camera to boost sales.
8. [**Training & Education**](https://www.echo3d.com/solutions/education), e.g., simulating complex processes with an expert remotely guiding you through them.
9. [**Healthcare**](https://www.echo3d.com/post/four-ways-ar-vr-are-reshaping-healthcare), e.g., using medical imaging to show physicians 3D representation of patient anatomy during surgery
10. [**Navigation**](https://www.echo3d.com/post/how-augmented-reality-is-revolutionizing-driving-and-navigation), e.g., overlay the camera with directions to help you find your way with your phone camera
11. [**Home design**](https://medium.com/echo3d/how-to-design-your-room-with-augmented-reality-ar-tutorial-39239d6109e3), e.g., virtually placing true-to-scale 3D furniture in your own space
12. [**Art**](https://medium.com/echo3d/preview-art-in-your-home-in-augmented-reality-for-free-tutorial-89e9cac87f3), e.g., immersing visitors in 3D experiences at museums and galleries
13. and [**so much more**](https://www.echo3d.com/inspiration)!

### How do I get in touch?

If you have any other questions, join our [Slack](https://go.echo3d.co/join), send us an [email](mailto:support@echo3D.com), reach out on [Facebook](https://www.facebook.com/echo3DInc/), connect on [LinkedIn](https://www.linkedin.com/company/echo3D), or [tweet](https://twitter.com/_echo3D_) at us to say hello.

### Where can I learn more?

Check out the platform walkthrough below our visit our [YouTube](https://www.youtube.com/@echo3Dco/videos) page for more resources.


# Register

Learn how to set up a collection to start managing 3D assets.

{% hint style="info" %}
Enterprise users should contact to their system admin for a dedicated registration link.&#x20;
{% endhint %}

This is the easy part. Head over to the [**registration page**](https://www.echo3d.com/signup).

1. Fill out the form with your **name** and **email address**
2. Set a password
3. Check that you agree to our [**Terms of Service**](https://www.echo3d.com/terms)
4. Click the **Sign Up** button

**That's it!** Your new 3D collection will appear in the console once you [log in](https://console.echo3d.com/#/auth/login). 🔑

<figure><img src="/files/EgLjqga0hvBk2x65v4AQ" alt=""><figcaption></figcaption></figure>

Check your inbox for an automatic welcome email with your unique collection name. 📧

{% hint style="info" %}
&#x20;Check your spam folder if you don't get an email within a few seconds.
{% endhint %}


# Access the Platform

Learn how to access the platform and load your 3D collection.

Upon registration, you will be redirected to [**log in to the platform**](https://console.echo3d.com/)**,** or you can use the link in the registration email to get back to the platform anytime.

<figure><img src="/files/0KOl9PmHi707D8MBsShH" alt=""><figcaption></figcaption></figure>

You can see the collection name set in the header, load all the collections at once, or load a different collection by clicking the ![](/files/rr20KKxx4b30B00cBX13)  symbol. The dropdown list may include multiple options depending on the number of collections you have access to.

<figure><img src="/files/fGoofjvOgnvYEXHAsz56" alt=""><figcaption></figcaption></figure>


# Add a 3D Asset

Learn how to add a 3D asset to the collection.

You can add content by clicking the ![](/files/XOjJqxVQ0dZAEOHNksM5)  button.

<figure><img src="/files/Rm5Ww4jquS62K8cR29dW" alt=""><figcaption></figcaption></figure>

Click **echo3D Library**.

Choose 3D models by clicking their thumbnails.

<figure><img src="/files/RGLRl48Ycb8brBLrutFc" alt=""><figcaption></figcaption></figure>

Click the ![](/files/lMPHUHhzbdCK04XjKkHw)button.

Wait for the model to upload and appear on the **Content page**.

**You did it**! 🥳

{% hint style="info" %}
Use the **search** bar in the [Content Page](/web-console/manage-pages/content-page) or the **echo3D Library** under the [**New +**](/web-console/how-to-add-content) button to find free 3D models that you can instantly add to the console.

You can **find** additional free 3D models on <img src="/files/-MRulwaCEyznz4Lm__PC" alt="" data-size="line"> [Sketchfab](https://sketchfab.com/), <img src="/files/-MRunRvuxTR6z-JHkUzQ" alt="" data-size="line"> [TurboSquid](https://www.turbosquid.com/), <img src="/files/bPix2az3gRKNBovyqCSG" alt="" data-size="line"> [CGTrader](https://www.cgtrader.com/free-3d-models), <img src="/files/-MRumHnN0HV-prW_dRr1" alt="" data-size="line"> [Sketchup's 3D Warehouse](https://3dwarehouse.sketchup.com/), <img src="/files/-MRumY2iuHwTReiSy5Yy" alt="" data-size="line"> [Clara.io](https://clara.io/), <img src="/files/-MeZ0Vq4r4xNrXnRJYDv" alt="" data-size="line"> [Thangs](https://thangs.com/), <img src="/files/Ul7TpBI7yo4qThADxam8" alt="" data-size="line"> [Poly Haven](https://polyhaven.com/), <img src="/files/-MRunBKhq9rNQTx9i19W" alt="" data-size="line"> [Archive3D](http://archive3d.net/), and [Free3D](https://free3d.com/).

You can **create** your own 3D models with [Tinkercad](https://www.tinkercad.com/), [Blender](https://www.blender.org/), [KenShape](https://kenney.itch.io/kenshape), [Fusion 360](https://www.autodesk.com/products/fusion-360/overview), [MagicaVoxel](https://ephtracy.github.io/), or use [3D scanning apps](/3d-content/3d-capture-apps).

Learn more about the types of supported 3D content (e.g., models, videos, and images) [here](/web-console/manage-pages/content-page/assets).
{% endhint %}


# Share it with Others

Learn how to instantly share assets and allow others to access assets anywhere.

You can generate a short link and share it with others so they can see the 3D model you have in your collection.

Click the <img src="/files/GTdbZDvhM8FNVHhI7wXO" alt="" data-size="line"> at the top right corner of the asset card and then click  <img src="/files/TI5iyOEobwamiQkEViIT" alt="" data-size="line"> to share the assets with members of your team or to invite others to the platform to collaborate on the asset.

You can also click <img src="/files/oDImBFBkCM5ROjPP6gnw" alt="" data-size="line"> to automatically copy a short link to the asset into your clipboard.

<figure><img src="/files/CU7Fgel5V6dT5XYwxS9J" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The short link should look something like **`https://go.echo3D.co/ABCD`**
{% endhint %}

Paste and share the link with team member&#x73;**.** Clicking the short link redirects to our platform, where they can click the <img src="/files/-M8RtgG2kuQoYJ9CPgkg" alt="" data-size="original"> button to place the 3D model on the floor around them.

![](/files/-M8S6cjO9ksng67_VtNU)


# See it in AR

Learn how to instantly see 3D models in AR through your phone.

## Option **1**: on the floor, instantly

Click on the <img src="/files/RRD7vo04pUYqBKCyWFEX" alt="" data-size="line"> icon for asset options and then click <img src="/files/FDm3r93Ed3f0KaphSCsf" alt="" data-size="line"> to show the QR codes.

Make sure the <img src="/files/-M8RgbVbb15dRvAXsp0y" alt="" data-size="original"> tab is selected and shows a QR code that can be detected by the camera.

{% hint style="info" %}
If this tab does not exist, this option is not supported for the selected type of content. Continue to the other options
{% endhint %}

<figure><img src="/files/AR3nCECTjbDa1IVV5SEc" alt=""><figcaption></figcaption></figure>

Scan the QR code with your phone's camera app or with a QR reader app.

{% hint style="info" %}
Latest iOS and Android phones are able to read QR codes with their default camera apps.
{% endhint %}

Click the pop-up message to get redirected to our website.

![](/files/aW0ul6Lor405UYzTTOLx)

Click the <img src="/files/-M8RtgG2kuQoYJ9CPgkg" alt="" data-size="original"> button.

Move the phone around until it detects the surface around you and tap the screen to place the 3D model on the floor around you.

![](/files/-M8RswQ6j4lE5vs-uILc)

{% hint style="info" %}
Scale the model by pinching the screen with two fingers.
{% endhint %}

**You did it! 🎉**

## Option **2**: on an image

Click on the <img src="/files/RRD7vo04pUYqBKCyWFEX" alt="" data-size="line"> icon for asset options and then click <img src="/files/FDm3r93Ed3f0KaphSCsf" alt="" data-size="line"> to show the QR codes.

Choose the<img src="/files/-M8ReP9bhgxmAY7UOJxU" alt="" data-size="original">tab to show a QR code that can be detected by the camera.&#x20;

<figure><img src="/files/xBoqdoyKZGB4rNq26V0j" alt=""><figcaption></figcaption></figure>

Scan the QR code with your phone's camera app or with a QR reader app.

{% hint style="info" %}
Latest iOS and Android phones are able to read QR codes with their default camera apps.
{% endhint %}

Click the pop-up message to get redirected to our website. Your browser should open.

{% hint style="warning" %}
You might need to allow camera access. In iOS, we recommend using the Safari browser. In Android, the Chrome browser is recommended as the default browser.
{% endhint %}

Your camera should open in the browser. Troubleshoot camera issues [here](/quickstart/troubleshooting).

**Keep your camera pointed to the QR code to see the 3D model appear on top of the QR code.**

![](/files/-M42cM1eY-7D3NjkDpec)

**You did it! 🎉**

## Option 3: on a face

Click on the <img src="/files/RRD7vo04pUYqBKCyWFEX" alt="" data-size="line"> icon for asset options and then click <img src="/files/FDm3r93Ed3f0KaphSCsf" alt="" data-size="line"> to show the QR codes.

Choose the <img src="/files/dypvUdQ7BdxD54sQGXOq" alt="" data-size="original"> tab to show a QR code that can be detected by the camera.&#x20;

<figure><img src="/files/TIoPy1VZsItb2A1ttdem" alt=""><figcaption></figcaption></figure>

Scan the QR code with your phone's camera app or with a QR reader app.

{% hint style="info" %}
Latest iOS and Android phones are able to read QR codes with their default camera apps.
{% endhint %}

Click the pop-up message to get redirected to our website. Your browser should open.

{% hint style="warning" %}
You might need to allow camera access. In iOS, we recommend using the Safari browser. In Android, the Chrome browser is recommended as the default browser.
{% endhint %}

Your camera should open in the browser. Troubleshoot camera issues [here](/quickstart/troubleshooting).

**Keep your camera pointed to a face to see the 3D model appear on top of the face.**

![](/files/5nKDsbVGXBomJYwNW7mX)

**You did it! 🎉**

## Option **4**: on the floor, through the mobile platform

Go to the platform in your phone's browser by typing [console.echo3D.com](https://console.echo3D.com) or scan the QR code below to get redirected automatically.

![](/files/pCGVXqBMv6GrCKZlHCFI)

Make sure you are logged in and that your key is loaded.

Click on the <img src="/files/-ME0FXbRCJaXjlfL7-8_" alt="" data-size="original"> icon next to the model preview.

<figure><img src="/files/pUmnNgrlPeck2DWIP2A2" alt=""><figcaption></figcaption></figure>

You will get redirected to our website.

![](/files/aW0ul6Lor405UYzTTOLx)

Click the <img src="/files/-M8RtgG2kuQoYJ9CPgkg" alt="" data-size="original"> button.

Move the phone around until it detects the surface around you and tap the screen to place the 3D model on the floor around you.

![](/files/-M8RswQ6j4lE5vs-uILc)

{% hint style="info" %}
Scale the model by pinching the screen with two fingers.
{% endhint %}

**You did it! 🎉**

## **Option 5:** on the floor, through **a mobile app**

{% hint style="info" %}
Your device needs to be compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) (iOS) or [ARCore](https://developers.google.com/ar/discover/supported-devices) (Android).
{% endhint %}

Download the echo3D GO app from the [Apple App Store](https://apps.apple.com/app/id1531785763) or [Google Play Store](https://play.google.com/store/apps/details?id=xyz.echoar.echoargo).

Open the app and allow camera permissions if prompted.

Set your API key in the text input field located in the bottom left corner of the screen.

Click the <img src="/files/-MIkzbPg19Mpcvo4YXub" alt="" data-size="line"> button located in the bottom right corner of the screen.

![](/files/BmfHFNt01x7SuTxXwBkJ)

{% hint style="warning" %}
If the <img src="/files/-MIkzbPg19Mpcvo4YXub" alt="" data-size="line"> button is not visible, turn the phone to landscape.
{% endhint %}

Move the phone around until a grid of dots appear on the ground.

Click the screen and see the 3D asset that appears.

{% hint style="info" %}
If the 3D asset does not appear, try scaling it by pinching the screen with two fingers.
{% endhint %}

![](/files/-M6XoDXCtBba3Y2fTuvX)

You can move the 3D assets around by touching the screen with one finger. Note that rotation is not enabled.

**You did it! 🎉**

## Troubleshooting

Can't see 3D content in AR? Check out the troubleshooting page:

{% content-ref url="/pages/-M41C6i2bcoYubbnvR9m" %}
[Troubleshooting](/quickstart/troubleshooting)
{% endcontent-ref %}


# Troubleshooting

What to do when things don't work as expected.

## The camera won't open!

### I have an iOS device

We recommend using the Safari browser on iOS.

Make sure your device is updated with iOS version 13.0.0 or above.

Allow access to the website when prompted for camera permission. If you are not prompted for camera permission, make sure you enable your browser to have permission to access the camera.

* Go to Settings on your device
* Scroll down and open Safari tab
* Ensure Camera & Microphone are set to Allow

<figure><img src="/files/uuzly9END73vL3v1tDhP" alt="" width="336"><figcaption></figcaption></figure>

### I have an Android device

Make sure you are using the latest Chrome browser version. We advise setting Chrome as your default browser through your phone's settings as it tends to work better than the other preinstalled browsers.&#x20;

Also, make sure you enable your browser to have permission to access the camera and allow access to the website when prompted for camera permission.

## The model is too big or very small!

If you chose [option 1](/quickstart/see-it-in-ar#option-1-on-the-floor-instantly) or [option 3](/quickstart/see-it-in-ar#option-3-on-the-floor-through-the-mobile-console), scale the model by pinching the screen with two fingers.

If you chose [option 2](/quickstart/see-it-in-ar#option-2-on-an-image), you can change the size of the model by adding a metadata key named `scale` to the 3D models. See how in the [Data Page](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) section of the documentation.

## I am getting errors relating to ARKit/ARCore!

Some apps or browsers require that your device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or [ARCore](https://developers.google.com/ar/discover/supported-devices).

Make sure to have [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed on your Android device.

## I am getting errors around not having enough key points!

Make sure to upload **high-contrast** images with **multiple details** in the shot.&#x20;

When uploading an image file to be used as an image target, our system checks for the contrast and detail complexity of the uploaded image. This validates that AR-enabled cameras will be able to detect the image.

Here is an example of a good image:

![Stones by Vuforia](/files/-M8SXyc8x4VdD3t1xShJ)

## My OBJ files fail to upload!

**Are you uploading multiple files (`.obj`, `.mtl`, and `.png`) together?**

Make sure that the `.obj` and `.mtl` file has the same name and that this`.mtl` filename is referenced inside the `.obj`.

**Are you uploading a `.zip` file with the `.obj`, `.mtl`, and `.png` inside?**

Make sure that the `.mtl` filename is referenced inside the `.obj`.

{% hint style="warning" %}
When adding multiple assets from local storage, we recommend zipping them first and **uploading the ZIP file**.
{% endhint %}

## I created an FBX model using Blender and it loads with no textures

If you created a 3D model on Blender, uploaded it to our platform, and its textures are not showing, make sure that the FBX file has its textures baked in when exporting from Blender.

To export an FBX with textures from Blender, go to the **shading tab** and **connect the image to the base color**.

![](/files/uTK76ak8TuKLKXamcqKM)

Then when you export your FBX make sure the **Path Mode** is set to `Copy` and the **Embed Textures** button **is ticked**.

![](/files/nkgVJYWwLibmxA7es9VI)

## I need to change a 3D model’s material

There are two cases where changing the material on your 3D model in Unity makes sense.

1. You don’t want to use Blender or some other 3D modeling software
2. Your model’s material looks different in Unity than what you see in Blender/your 3D modeling software (or it doesn’t show up at all and your object is white).

Here’s a quick way to get the right material on your 3D object, even if you didn’t create the asset yourself:

{% embed url="<https://www.youtube.com/watch?feature=youtu.be&v=a_VbzVloEgg>" %}

## I created an FBX model using Mixamo and the animation isn't playing in WebAR on iOS!

Unfortunately, conversions from FBX to USDZ for 3D models created with Mixamo **do not support animations** on iOS 15.6 or older versions.

This issue is resolved on iOS 16 and above.

## I need some open-source examples.

Check out our [tutorials](broken://pages/-M41xprO1t0auEsrb04N) page, open-source code examples on [GitHub](https://github.com/echo3Dco?tab=repositories), and posts on [Medium](https://medium.com/echo3d).

## I am getting some other error.

Let's talk! Message us on [Slack](https://go.echo3D.co/join) or send an email to <support@echo3D.com> and please attach a screenshot of the error you are experiencing.

## My account is suspended.

Navigate to the Subscription page to view the reason for account suspension.

### Common Issues

* **Overdue payment**: If your card is expired or there is some other issue, you can change your payment method by navigating to your Profile page and clicking the Payment Method button. Please see [Profile Tab](/web-console/account-page/profile#how-to-add-or-update-a-payment-method) for details. Your account should be restored within 24 hours. You can also send an email to <support@echo3D.com> for more information.
* **Other**: Please email us at <support@echo3D.com>.


# Load a Collection

Learn how to load a collection in the platform.

**Collections** are repositories of assets. Each collection has specific access permission and its own unique ID.

After logging in, you can see the collection (e.g., "My collection") set in the header or load a new one by clicking the ![](/files/3rWKhXRw7jzmexELe6z3) icon.&#x20;

<figure><img src="/files/9pidO2ZnAmuqKB3DLmnW" alt="" width="343"><figcaption></figcaption></figure>

Hovering over your collection name will show the API key associated with such collection:

<figure><img src="/files/J5knbDiYfhqXnTLlMCF3" alt="" width="262"><figcaption></figcaption></figure>

## Adding Collections

{% hint style="success" %}
Adding sub-collections is only available in the [paid](https://www.echo3d.com/pricing) plans.
{% endhint %}

Click the ![](/files/3rWKhXRw7jzmexELe6z3) icon to open the collections menu and see all the collections you can access.

<figure><img src="/files/bIVAXpAFmbR7qpcLTJ4f" alt="" width="282"><figcaption></figcaption></figure>

Click the ![](/files/pKzA8NpowlVJffzteD0a) next to the collection search bar to create a new collection or click the "Manage Collections" button to go to the Collections tab, where you can add new collection and see all of the collections you currently have access to. You can see who is the the collection's main admin, your access level, and the credit limit.&#x20;

<figure><img src="/files/UaZnEH1OenFOtF9MAkrq" alt=""><figcaption></figcaption></figure>

By clicking the three dots next to each collection, you can **rename** your collection, set it as **public or private**, set a **credit limit**, enable **lazy loading**, show the **API key** associated with the collection, **export all the data** associated with the collection, or **delete** it entirely.

Lazy loading is enabled by default and ensures your collection load faster, by only loading a thumbnail for each 3D model, that fully renders upon hovering over it.&#x20;

<figure><img src="/files/YWi56lfgmYH3QXPf2iRu" alt="" width="227"><figcaption></figcaption></figure>


# Add Assets

Learn how to add assets to collections.

Click the **New +** button at the top of the sidebar or the **empty card** in the Content page to add a new asset to the collection.

<figure><img src="/files/MOoGaX5CChhcCnxN5Xnt" alt=""><figcaption></figcaption></figure>

### Choosing Assets

You can either select files from **local storage**, **Google Drive**, **Bynder**, **Acquia**, **Box**, **Canto**, search the **echo3D library**, or **drag and drop** files.

<figure><img src="/files/PHJenoyE5qW96o3eSqdX" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
When using Google Drive, Bynder, Acquia, Box or, Canto, a window will appear to log you into your account and allow you to select the files your would like to import.

In Bynder, a 3D file must be categorized as *document* and added to a collection on Bynder before it can be imported.

In Canto, a 3D file must be added to a library on Canto before it can be imported. Also, hover over the Canto profile picture and select Settings.

1\. Go to the Configuration Options tab.

2\. Select API in the menu.

3\. Create an API key.

4\. In the Redirect URL enter: <https://api.echo3d.com/canto/callback>
{% endhint %}

Once selected, can set if you want to **maintain the uploaded folder structures**, and set if you want to **detect duplicates** to check if these new assets already exist in your collection.

<figure><img src="/files/DRgJswfEalWRi6LiFUqP" alt=""><figcaption></figcaption></figure>

You can choose to reupload all duplicates, skip all duplicates, or be prompted on a case-by-case basis.&#x20;

{% hint style="info" %}
Duplicate detection aims to prevent accidental duplicate uploads and save storage usage.&#x20;

Duplicate assets will reference the same files in our storage.
{% endhint %}

<figure><img src="/files/V5u8T5RUEzyFdmpHSM1W" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
We detect duplicates using an MD5 checksum of the asset(s) at the time of upload. Assets are not considered duplicates of one another if they are only visually similar.
{% endhint %}

At this point, you can **proceed with the upload** if you do not want to add any additional settings, or you can continue **customizing the upload workflow**. The assets will all be added to a queue and processed sequentially.

### Adding Metadata & Tags

You can add metadata & tags that will be applied to all of the uploaded assets.&#x20;

You can choose if you would like for **AI-generated tags** to be added to your asset, or use Quick Add **suggested tags** from your other assets in the collection.

<figure><img src="/files/YFRom9Gqsx1xa8cofKeX" alt=""><figcaption></figcaption></figure>

Note that if your collection has **Required Keys** set, you will not be able to proceed with an upload until you have added a value for those keys.

<figure><img src="/files/Y3rLFf1KMv46yx5M5Apw" alt=""><figcaption></figcaption></figure>

### Adding Automatic Optimizations

You can choose what additional operations will be performed on each uploaded asset.

A **GLB and USDZ version of your model will always be created**. You can choose additional conversions as well.

You can choose to generate a Draco Compressed or Ultimate Compressed version of the models as well.

Additional storage and usage rates apply.

<figure><img src="/files/fSzjweAWwvNHMxr8Xwbg" alt=""><figcaption></figcaption></figure>

### Adding Automatic Sharing

You can choose which collections and users on your current collection to share all of the assets with.&#x20;

You can also set if you want the assets to be locked.

<figure><img src="/files/xc5h1I1h9GYHpm1yVBre" alt=""><figcaption></figcaption></figure>

### Saving Template

You can save the upload workflow configurations as a template to be reused for future uploads.

<figure><img src="/files/lBikKLzCLXhO1H9iHfaE" alt=""><figcaption></figcaption></figure>


# Manage Pages

Learn how to use the pages in the Manage section of the platform.

The [Content](/web-console/manage-pages/content-page) page allows you to manage 3D assets such as models, videos, animations, and interactive content, alongside the data and settings associated with them. Learn more here:

{% content-ref url="/pages/-M41w2bWfo0x0nUD4AOF" %}
[Content](/web-console/manage-pages/content-page)
{% endcontent-ref %}

The [Collections and Sharing ](/web-console/manage-pages/data-page)page allows you to manage your collections, users, asset permissions, groups, and security settings.

{% content-ref url="/pages/BQlbxZTrdPD5iJRz83Ph" %}
[Collections and Sharing](/web-console/manage-pages/collections-and-sharing)
{% endcontent-ref %}

The [Metadata & Tags](/web-console/manage-pages/data-page) page allows you to manage data associated with your collection and metadata associated with each 3D asset. Learn more here:

{% content-ref url="/pages/-M41wP9eSdnB89jBgqtT" %}
[Metadata & Tags](/web-console/manage-pages/data-page)
{% endcontent-ref %}

The [Web Customizer](/web-console/manage-pages/customize-page) page allows you to personalize all the web experiences you create by adding buttons, actions, audio, and a custom background.

{% content-ref url="/pages/-MVhMc9i6Xw4RXvfkaeB" %}
[Web Customizer](/web-console/manage-pages/customize-page)
{% endcontent-ref %}

{% hint style="success" %}
The [Customizer](/web-console/manage-pages/customize-page) page is available in the paid plan.&#x20;
{% endhint %}

The [Model Editor](broken://pages/-MVhMWAbyJ48u-SDBsnb) page allows you to view 3D models, edit their textures, color, lighting settings, and other attributes, add annotations, and export them to your project.

{% content-ref url="/pages/-MVhMWAbyJ48u-SDBsnb" %}
[Broken mention](broken://pages/-MVhMWAbyJ48u-SDBsnb)
{% endcontent-ref %}

{% hint style="success" %}
The [Model Editor](broken://pages/-MVhMWAbyJ48u-SDBsnb) page is available in paid plans.
{% endhint %}

The [Scene Editor](broken://pages/Tu8Si0OE66us6aQnlqUn) page allows you to structure 3D scenes, transform 3D models, merge 3D models together, import scenes to the console, and more.

{% content-ref url="/pages/Tu8Si0OE66us6aQnlqUn" %}
[Broken mention](broken://pages/Tu8Si0OE66us6aQnlqUn)
{% endcontent-ref %}

{% hint style="success" %}
The [Scene Editor](broken://pages/Tu8Si0OE66us6aQnlqUn) page is available in paid plans.&#x20;
{% endhint %}

<figure><img src="/files/HsHUQ45djLQFyhiCcKWq" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
[Contact us](mailto:sales@echo3D.com) to discuss custom offerings.
{% endhint %}


# Content

Learn how to use the content page.

This page allows you to manage 3D assets such as models, videos, animations, and interactive content.

<figure><img src="/files/7p5sQ1uTqvdRgJQ8LmSe" alt=""><figcaption></figcaption></figure>


# Assets

Learn more about 3D assets, spatial targets, content entries, and content cards.

## Terms

**Assets** are digital content files. These could be:

1. **3D assets**: static or animated. File formats include `.obj`, `.stl`, `.fbx`, `.glTf`, `.glb`, `.usd`, `.usda`, `.usdc`, `.usdz`, `.ply`, `.dae`, `.zip`, CAD files (`.step`, `.stp`, `.iges`, `.igs`, `.prt`, `.sldprt`, `.asm`, `.sldasm`), and more. We recommend using `.glb` or `.fbx` with the textures baked in. Enterprise plans include support for Blender files (`.blend`), Adobe file formats, Autodesk file formats including Revit (`.rvt`,`.3dm`, `.3ds`, `.a`, `.asm`, `.brd`, `.catpart`, `.catproduct`, `.cgr`, `.collaboration`, `.dae`, `.dgn`, `.dlv3`, `.dwf`, `.dwfx`, `.dwg`, `.dwt`, `.dxf`, `.emode`, `.exp`, `.f2d`, `.f3d`, `.iam`, `.idw`, `.ifc`, `.ige`, `.iges`, `.igs`, `.ipt`, `.iwm`, `.jt`, `.max`, `.model`, `.mpf`, `.msr`, `.neu`, `.nwc`, `.nwd`, `.par`, `.pmlprj`, `.pmlprjz`, `.prt`, `.psm`, `.psmodel`, `.rvm`, `.sab`, `.sat`, `.sch`, `.session`, `.skp`, `.sldasm`, `.slddrw`, `.sldprt`, `.ste`, `.step`, `.stp`, `.stpz`, `.vue`, `.wire`, `.xap`, `.xpr`, and [more](https://aps.autodesk.com/en/docs/model-derivative/v2/developers_guide/supported-translations/)), point clouds (`.e57`), gaussian splats (`.ply` and Niantic's `.spz`), Clo3D files (`.zprj`), Unreal Engine projects (`.uproject`, `.uassset`), and more.
2. **Video assets**: regular or 360 degrees. File formats include `.mp4`, `.mov`, NotchLC, and more.
3. **Image assets**: static or animated. File formats include `.png`, `.jpg`, `.gif`, and more.
4. **Binary assets:** any other format is treated as a binary data file. File formats include `.pdf`, `.docx`, `.pptx`, and more.

A single asset is referred to as an **Asset Entry**, which has its own unique ID and is represented by a single **Asset Card** on the Content page.

## Asset Cards

The Content page displays all 3D models, images, and videos in the project as individual asset cards.

<p align="center"><img src="/files/4ED5MFtcPyIHhkfiMd9Q" alt=""></p>

Click the ![](/files/FIJ2Q6p7bBVvzroOs0yF) icon on the card to inspect the asset, download it, edit it, move it, and more:

<figure><img src="/files/h3GJ3ECvln1QG0M8BmkL" alt="" width="174"><figcaption></figcaption></figure>

{% hint style="info" %}
You can share 3D models instantly by clicking <img src="/files/CkC3CNpfXfBoXS1U20Qt" alt="" data-size="line"> which will copy a short direct link to the model in the from of `https://go.echo3D.co/ABCD` into your clipboard.
{% endhint %}

Hovering the asset card will reveal the![](/files/SQ7PsnJB0tz2lcwlC1SU) icon that allows leaving a comment on assets or tagging team members. A notification indicates that comments are available.

{% hint style="success" %}
Commenting on content is available in paid plans.
{% endhint %}

## Asset Window

Double-clicking the asset card will open a window with additional options and information.

<figure><img src="/files/OJ9MHSZP3SgqoTEHBMsn" alt=""><figcaption></figcaption></figure>

The asset window allows you to:

1. Preview the asset, its size, and its total polygon count
2. Add, view, or hide [annotations](https://www.youtube.com/watch?v=AY_MO80cvYs\&ab_channel=echo3Dhttps://www.youtube.com/watch?v=AY_MO80cvYs\&ab_channel=echo3D) to the asset
3. Take a 2D asset snapshot and set a new asset thumbnail
4. Set asset [status](/web-console/manage-pages/content-page/status)
5. Share the assets with others
6. Add, delete, edit, upload, or download [metadata & tags](/web-console/manage-pages/data-page/global-data-and-metadata)
7. View and edit [AI-generated tags](https://www.youtube.com/watch?v=AJma0FEalpU)
8. Edit the asset using the [Model Editor](broken://pages/-MVhMWAbyJ48u-SDBsnb)
9. Get [insights](/web-console/deliver-pages/insights-page) related to the asset
10. [Convert & compress](/web-console/compute-pages/convert-and-compress-page) the asset
11. Review different versions of the assets
12. Associate the asset with other assets in the collection
13. View or update the target associated with the asset
14. and more.

Click the ![](/files/FIJ2Q6p7bBVvzroOs0yF) icon on the window to explore additional actions such as downloading the asset in different formats.

<figure><img src="/files/3Y3kKDse8xNijAPoYDGw" alt=""><figcaption></figcaption></figure>

## Asset Folders

Assets can be organized into folders under the same collection.

<figure><img src="/files/5vMKGqDG5mOcIfxf7lnE" alt=""><figcaption></figcaption></figure>

To move an asset into a folder, click the ![](/files/JF3PEdEyD7vHwu87m4ZZ) icon and select ![](/files/RgTKbnDyuroYiVnONTyI).

A window will prompt you to select a folder or create a new one.

<figure><img src="/files/9hcd2gAfs0WBoOrD7sIe" alt=""><figcaption></figcaption></figure>

Organizing can all be preformed on multiple assets at once through [bulk actions](/web-console/manage-pages/content-page/bulk-actions).

{% embed url="<https://www.youtube.com/watch?v=yi2KJr_guNQ&ab_channel=echo3D>" %}


# Annotations

Learn how to apply annotations to assets.

You can annotate your assets from the asset window.&#x20;

### Adding Annotations

Click the ![](/files/Qv0FPLILOE7UFC0aY8ls) icon and choose ![](/files/ryMgG72XNCCMNlJvt99j).

<figure><img src="/files/XgSElLBGgeaPtK29gP2v" alt="" width="335"><figcaption><p>Open asset window</p></figcaption></figure>

Click on the part of the asset that you would like to annotate.

<figure><img src="/files/nPUqVR5SgxnN6vSzyP7H" alt="" width="563"><figcaption><p>Click on the asset</p></figcaption></figure>

Type your annotation and click Submit.

<figure><img src="/files/hoaJhcysLNRWiHDTsBey" alt="" width="563"><figcaption><p>Click Submit</p></figcaption></figure>

<figure><img src="/files/oxCdMHJ7ovASTEhYrbjy" alt="" width="563"><figcaption></figcaption></figure>

### Editing Annotations

To edit the annotation, hover over the existing annotation and click on the pencil icon. Make your edit and click Submit.

<figure><img src="/files/lT3u7EfguigUsc1wbi94" alt="" width="563"><figcaption><p>Hover over the annotation to reveal the edit and delete icons</p></figcaption></figure>

<figure><img src="/files/LA8gfYd8vijqtkWF9mOH" alt="" width="563"><figcaption><p>Update the annotation</p></figcaption></figure>

<figure><img src="/files/ftiJ0sud1b2UCiS5mEVg" alt="" width="563"><figcaption><p>Updated annotation</p></figcaption></figure>

### Deleting Annotations

To remove the annotation, hover over the existing annotation and click on the trash icon. Click Confirm.

<figure><img src="/files/AWM23Sdp8iQo0o1e5WtC" alt="" width="563"><figcaption><p>Hover over the annotation to reveal the edit and delete icons</p></figcaption></figure>

<figure><img src="/files/FfB7DBwocbgJQ9BXgFAi" alt="" width="563"><figcaption><p>Click Confirm to delete annotation</p></figcaption></figure>

<figure><img src="/files/1KnpXZS8UlrpwLtfRkhL" alt="" width="563"><figcaption><p>Annotation has been removed</p></figcaption></figure>

### Hiding Annotations

You can toggle annotations to view the asset without any of the annotations. Click the Show Annotations toggle in the toolbar at the top of the asset window to show/hide annotations.

<figure><img src="/files/u0ImGL0OkTSEKxPiHObB" alt="" width="434"><figcaption></figcaption></figure>


# Status

Learn how to set the status of assets.

You can set the statue of assets from the asset window.&#x20;

### Setting a Status

Click the ![](/files/Qv0FPLILOE7UFC0aY8ls) icon and choose ![](/files/ryMgG72XNCCMNlJvt99j).

<figure><img src="/files/AngEDAPDC8H5rLYqVQW8" alt=""><figcaption></figcaption></figure>

Look for **Status** on the right sidebar.

<figure><img src="/files/3TM0H1vOyRGLvBnajh9n" alt=""><figcaption></figcaption></figure>

Click **+ Not Set**.

<figure><img src="/files/1X9yCD6xu8iJKKIYYl8U" alt=""><figcaption></figcaption></figure>

Choose one of the statue options:

<figure><img src="/files/An3TeoazhfLjsasn5Kgh" alt=""><figcaption></figcaption></figure>

The new status will appaer in the sidebar on the right.

<figure><img src="/files/NRSVMhaf0CYjq2xSdNUg" alt=""><figcaption></figcaption></figure>

### Filter based on Status

Use the **Status filter** in the [Content page](/web-console/manage-pages/content-page) to filter for one or more statuses.

<figure><img src="/files/QnHKVpX4f0ruAInp9O0X" alt=""><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=UatlzSHU2-Y>" %}


# Sharing & Permissions

Manage who can access an asset.

**Access** to an asset allows a user or viewer to edit, update, delete, or download the asset. By default, all assets obey the collection-level permission setting. You can further set asset permissions individually for more granular control over edits to your project.&#x20;

{% hint style="info" %}
Access permission settings are available on paid plans.
{% endhint %}

To view and make edits, navigate to ![](/files/mBlZHHHH6TPo7M3lPkme) under the asset window.

<figure><img src="/files/entOAD4I7CelQ00d76kq" alt=""><figcaption></figcaption></figure>

## Share with people

Add team member emails to allow them access to the selected asset.

## Access Requests

Similar to the [Collections & Sharing](/web-console/manage-pages/collections-and-sharing) page, here you can manage access requests pertaining to the individual asset selected.&#x20;

### Requesting Access

If you are an editor, commenter, or viewer with access to a collection with a locked asset, you must request access to the locked asset:

<figure><img src="/files/D6c81VnvOdnGPEjlDEeB" alt=""><figcaption><p>Locked asset card</p></figcaption></figure>

To send a request, click on the lock icon. The button and tooltip will update indicating a request has been sent and is awaiting admin approval:&#x20;

<figure><img src="/files/gRahckDZdmEGMhWiGTpF" alt=""><figcaption><p>Asset with a pending request awaiting approval</p></figcaption></figure>

When the request is approved, the card will unlock and normal tile buttons will appear.

If the request is rejected, the card and tooltip will update. If the admin included a note with the rejection request, it will be shown in the tooltip.

If your request was rejected, you cannot take any further action. An admin can still approve your rejected request at a later time.

<figure><img src="/files/sqkXDkoqbtY5o0Pxsxz2" alt=""><figcaption><p>A locked asset with a rejected access request</p></figcaption></figure>

## Access Settings

This determines whether users and viewers can access (modify, edit, delete, or download) this asset.

* **Locked:** Collection users and viewers can only access this asset with an approved request. Collection admins can access the asset and approve or deny requests.
* **Unlocked:** Collection users can access this asset. Collection viewers must request access. Collection admins can approve or deny requests.

<figure><img src="/files/ypAVq5VbDORtYrzLVMtC" alt=""><figcaption></figcaption></figure>

## Copy to Other Collections

Copy the selected asset to other collections you have access to.&#x20;

This will create an entirely **new asset** in the other collection.&#x20;

<figure><img src="/files/3qgL9sLtYwnEndc4KMKe" alt=""><figcaption></figcaption></figure>

## Direct Link

Copy the Direct Link of an asset. For any user with existing access to the collection, this direct link will immediately navigate to the collection and open the asset window for the asset.&#x20;

<figure><img src="/files/KGjdS8V95J6QA4MVbWhh" alt=""><figcaption></figcaption></figure>

## Public Link

Create and copy a Public Link for an asset. This link lets you share a single asset from your echo3D collection with anyone, even if they don't have an echo3D account. When someone opens the link, they'll see the asset in a dedicated viewer page along with some basic details about it.

<figure><img src="/files/E9rgqcdgmy4ahH6SIrcG" alt=""><figcaption></figcaption></figure>

To create a public link for an asset, you can configure the following options:

* **Enabled/Disabled**: Control whether the link is currently active. You can disable a link at any time to revoke access without deleting it.
* **Show Annotations**: Choose whether annotations on your 3D model are visible to anyone viewing the link.
* **Limit on Views**: Optionally limit how many times the link can be viewed. Once the limit is reached, the link will stop working. If you don't set one, the link can be viewed unlimited times.
* **Expiration Date**: Optionally set a date after which the link will stop working. If you don't set one, the link will remain active indefinitely.
* **Note**: Add a private note for your own reference. This note is not shown to anyone viewing the link.

You can edit any of these settings or delete the link entirely at any time.

<figure><img src="/files/DktuAYfESTOQx0v3d1ob" alt="" width="460"><figcaption></figcaption></figure>

#### What Viewers See

When someone opens your public link, they'll see a page with your asset and some information about it. For images, videos, and audio files, the asset is displayed using the appropriate player. For 3D models, the asset is displayed in an interactive 3D viewer. Viewers can rotate, zoom, and pan around the model. A toolbar at the top of the viewer provides additional controls:

* **Recenter**: Reset the camera back to the default view.
* **Play/Pause***:* Play or pause any animations the model contains (only shown if the model has animations).
* **Annotations**: Show or hide annotations on the model (only available if you enabled annotations when creating the link).
* **Shadows**: Toggle ground shadows on or off.
* **Snapshot**: Download a screenshot of the model as it currently appears in the viewer.

Asset details are shown in a panel next to the viewer:

* File type (e.g., GLB, PNG, MP4)
* File size
* Date created
* Date last modified
* Polygon count (for 3D models)
* Tags

Viewers can also send a note using the text input at the bottom of the page. This note will be sent via email to all administrators of the associated collection.&#x20;

<figure><img src="/files/Phexry5DtndFiMNsIQTa" alt=""><figcaption></figcaption></figure>

*Important*: Viewers cannot make any changes to your asset. They cannot edit details, modify annotations, or download the original file. The public link provides view-only access.

#### If Something Goes Wrong

If a viewer tries to open a link that is expired, disabled, or has exceeded its view limit, they'll see a message letting them know the link is no longer available.


# Metadata & Tags

Add metadata, tags, and additional files to an asset.

<figure><img src="/files/oOGTiqEXJcIWrnFXBflj" alt=""><figcaption></figcaption></figure>

## Metadata

You can add **keys** and **values** to be associated with the asset.

You can add **any key or value** by typing it i&#x6E;**.** Built-in metadata keys will be suggested.

<figure><img src="/files/EzxXL8wLI6UyTaTjahZJ" alt="" width="440"><figcaption></figcaption></figure>

## Tags

You can add **tags** to be associated with the asset.

You can add **any tag** by typing it i&#x6E;**.** Previously used tags will be suggested.

<figure><img src="/files/ofzWTfcgfazEIqOblz9H" alt="" width="375"><figcaption></figcaption></figure>

## Asset Flies

You can view and add **asset files**, such as textures and materials, that are associated with the asset.

{% embed url="<https://www.youtube.com/watch?v=xiPRA4te-0A&ab_channel=echo3D>" %}

## Linked Files

You can view and add **linked files**, such as text files or PDFs, that are associated with the asset.

## Linked Text

You can add **any text** to be associated with the asset.

{% embed url="<https://www.youtube.com/watch?v=pFrcbcbLE8A&ab_channel=echo3D>" %}


# Web Customizer

Learn how to use the WebAR Customizer section.

Personalize the WebAR experience of the selected asset through the [Web Customizer](/web-console/manage-pages/content-page/web-customizer).

<figure><img src="/files/JKznrfESATkAMQ2K9yHq" alt=""><figcaption></figcaption></figure>


# Asset Editing

Learn how to use the view & edit the asset.

View the selected asset, edit its textures, color, lighting settings, and more through the [Editor](/web-console/manage-pages/editor).

<figure><img src="/files/0MtnwpFAzT9mdv4cQC2D" alt=""><figcaption></figcaption></figure>


# Asset Insights

Learn how to view asset insights.

View asset-level insights associated with the selected asset through the [Insights page](/web-console/deliver-pages/insights-page).

<figure><img src="/files/OiGgy4IW52znjcAyiEWz" alt=""><figcaption></figcaption></figure>


# Asset Compression

Learn how to convert & compress the asset file.

Optimize the asset and download its different versions using the [Convert & Compress page](/web-console/compute-pages/convert-and-compress-page).

<figure><img src="/files/ww6b0sXGY2M78vgEnMRx" alt=""><figcaption></figcaption></figure>

By default, the generated assets will be added as new entries to the collection. If you prefer downloading the files, toggle the checkbox:

<figure><img src="/files/CwutC3PcgJO1IKJrBKCZ" alt=""><figcaption></figcaption></figure>

## File Converter

Convert the assets to a different file type.

<figure><img src="/files/hKjwFPl4wGXgY3iLJyir" alt="" width="296"><figcaption></figcaption></figure>

## Standard Compression

Compress the asset using Draco compression.

## Ultimate Compression

Compress the asset using echo3D's proprietary [Ultimate Compression](https://www.echo3d.com/cloud/echo3d-features/3d-compression/3d-model-ultimate-compression-tool).

<figure><img src="/files/ty0NADSeNJQGBsyjodgg" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Assets that go through Ultimate Compression cannot be compressed further.
{% endhint %}

## Polygon Reduction

Compress the asset by decimating its mesh.

You can set any decimation percentage value.

<figure><img src="/files/chHD8dM5KY3KZrooTqXL" alt=""><figcaption></figcaption></figure>

## Rescaling

Resize the asset uniformly.

You can set any scale percentage value.

<figure><img src="/files/FyByUAl2pSVQ2vNLZrqx" alt=""><figcaption></figcaption></figure>


# Version Control

Learn how to create and revert to older versions of an asset.

{% hint style="info" %}
Version control is only available on paid plans.
{% endhint %}

## Version History

By default, the first version (version "0") of your asset is the originally uploaded asset.&#x20;

A new version is created whenever the asset file or target is changed or updated.

<figure><img src="/files/cw1rGRujr1IJHlilGmqz" alt=""><figcaption></figcaption></figure>

Click the ![](/files/Z5YDRxcP2JQUUHTF3rtq) icon to **download the version history as a CSV** file or **delete all past versions**.

<figure><img src="/files/praHTxvXqCsDNw9O2thy" alt=""><figcaption></figcaption></figure>

Click the **New version +** button to create a new version and overwrite the existing asset.

<figure><img src="/files/KsZhKnAl6WahmeYgXUGO" alt=""><figcaption></figcaption></figure>

## Reviewing Versions

Clicking on any of the lines will display a preivew of the old version.

<figure><img src="/files/QGnujNB0PPz18Xfu0yxT" alt=""><figcaption></figcaption></figure>

## Comparing Versions

Hold the `Ctrl`  key and select multiple versions to view a side-by-side comparison.

<figure><img src="/files/hdNMNT47D2QrLoTSCJBW" alt=""><figcaption></figcaption></figure>

## Reverting or Editing Versions

Clicking the ![](/files/Z5YDRxcP2JQUUHTF3rtq) icon next to a version allows you to:

* **Revert** to an old version by making it the latest version.
* Copy the unique **version ID**
* Edit the version by **adding a note**.
* **Delete** the old version

The latest version cannot be deleted.

<figure><img src="/files/rTCVeNLRPdOwmRWlcHnF" alt=""><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=LxoYEmb51tw>" %}


# Asset Hierarchy

Learn how to manage a hierarchical structure of assets within the collection.

Hierarchies allow you to create logical connections between different assets in the same collection.

This allows you to traverse through the collection and link assets together.

A hierarchy is set by defining a parent-child relationship tree.

<figure><img src="/files/GmcVCxIu67EpkCiH8MK4" alt=""><figcaption></figcaption></figure>

## Adding to Hierarchy

To add a new child or parent to an asset, click the **+Add Child** or **+Add Parent** buttons.

You will then be prompted to select the asset to connect from your collection.&#x20;

<figure><img src="/files/o8eEAFonUFfU7oB7YlU6" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
Cyclical hierarchy structures are not supported. Adding relationships that would result in such a structure will be rejected.
{% endhint %}

## Removing from Hierarchy

To unlink a relationship, click the **X** button in the top right corner of the parent or child asset.


# Asset Target

Learn how to set a target for an asset.

**Targets** are the real-world places with which you can associate an asset.

These could be:

* **Surface target**: any surface. e.g., a floor, table, ground, wall, and more. This is the **default target** assigned to any asset uploaded.
* **Location target**: geographic location represented by name or latitude and longitude coordinates (e.g., New York, London, 40.713054 & -74.007228).
* **Image Target**: static images or image trackers. Formats include .png, .jpg, and more or .iset, .fset, and .fset3.

<figure><img src="/files/lSaaHRpTreClFyYWEJpo" alt=""><figcaption></figcaption></figure>

## Editing a Target

Clicking **Edit Target** will prompt a window to set a target for the asset. Options available:

* **Anywhere** for a surface target
* **Specific location** for a location target
* **On an image** for image target

<figure><img src="/files/XgpMs66UuDSia5FX4FZK" alt="" width="415"><figcaption></figcaption></figure>


# Bulk Actions

Learn what bulk actions can be performed on single or multiple asset selection.

## Select Assets

To select an asset, hold the `Ctrl` key down and click on assets you wish to select.

Upon selection, an action bar will appear on top.

<figure><img src="/files/kUsWjfKcVsHT8Z6kNw1e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Changing to a different collection while assets are selected will clear the selection bar.
{% endhint %}

## Bulk Actions

1. **Download**: downloads the selected assets to your local machine
2. **Share**: create a shortcut to the assets to an existing collection or a new collection
3. **Copy**: duplicate the asset to an existing collection
4. **Copy Link**: Copies a short link for the selected asset. For multiple assets, all short links are copied, separated by a newline.
5. **Organize**: move the assets to a folder in the collection.
6. **Tag**: add a tag to all selected assets
7. **Copy Asset ID**: Copies the Asset ID for the selected asset. For multiple assets, all Asset IDs are copied, separated by a newline.
8. **Delete**: deletes the selected assets from the collection.

## Bulk Actions across Collections

Click the ![](/files/hOKuWJLeEluhvh8jNRv3) icon to open the collections menu and select **All Collections** to perform bulk actions across multiple collections.

<figure><img src="/files/fGoofjvOgnvYEXHAsz56" alt=""><figcaption></figcaption></figure>


# Asset Commenting

Learn how to add comments to assets.

## Adding a Comment

You can add comments to an asset by hovering over an asset card and clicking the![](/files/SQ7PsnJB0tz2lcwlC1SU)icon.

<figure><img src="/files/F95Qeiqd4s6fPtveMUFY" alt=""><figcaption></figcaption></figure>

Alternatively, you can access the comment icon on the upper right side of the inspector window.

<figure><img src="/files/qFbZhLGWQmKuiVQQDeD8" alt=""><figcaption></figcaption></figure>

Upon clicking the comment icon, the comment sidebar will open.

<figure><img src="/files/HI7NtRhATvF8kQWL3bT0" alt="" width="209"><figcaption></figcaption></figure>

Enter a comment and press Enter to post a message to the asset. Other users will be able to view the messages posted given they have permissions to access the asset.

<figure><img src="/files/Oqknr9z2warMRwXoA8jc" alt=""><figcaption></figcaption></figure>

## Removing a Comment

You can delete comments that you have added by hovering over the comment and clicking the **X** ico&#x6E;**.**

<figure><img src="/files/dM00vRSWvJwTSa6PT5qd" alt=""><figcaption></figcaption></figure>

## Mention Others

Using mentions will send a notification to the specified collaborators after the comment is posted.

<figure><img src="/files/rq6cfiLQJ1akkN07WnNv" alt=""><figcaption></figcaption></figure>

Click on the ![](/files/9bD3ZNDDqmczG5IE7xx3) icon to bring up the list of other collection collaborators and select one of them.

Then enter a comment and post as described above.

<figure><img src="/files/lTDDtIH7rU5KcBoIg6pU" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Collaborators with no access to the specific model but access to the collections will be shown as well.
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=HkSORikI0G4&ab_channel=echo3D>" %}


# Activity Sidebar

Learn how to view a record of all actions performed on an asset.

## Tracked Activities

The activity sidebar displays a history of the following actions:

* Uploading an asset
* Adding annotations
* Editing an asset
* Editing a target
* Renaming an asset
* Modifying permissions
* Modified access
* Moving to folders

## Reviewing Activity

You can review all actions performed on an asset by clicking the ![](/files/gtXIa4Np73ODed0nKVRT)icon and choosing ![](/files/ImYIeyaNzonPkDWVKkQm).

Alternatively, you can click the **Activity** button in the inspector window.

<figure><img src="/files/LEpsmBT4TO1d6v7QFZt2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/qFbZhLGWQmKuiVQQDeD8" alt=""><figcaption></figcaption></figure>

Upon clicking the activity button, the activity sidebar will open.

<figure><img src="/files/tyck7qFmc0NLS4TjjSqx" alt="" width="251"><figcaption></figcaption></figure>


# Asset Measurement

To measure distances between points on your model, click the **Measure distance** button in the asset toolbar.&#x20;

<figure><img src="/files/2eObLy7agSDQJ5JBWOZ0" alt=""><figcaption></figcaption></figure>

This allows you to select two points on your model's surface and see the distance between them. To delete a displayed measurement, simply click on the measurement's distance and then click on the trash icon that appears. Note that measurements are temporary and will be lost when closing the asset window or turning off the tool. &#x20;

<figure><img src="/files/1MFvbFzXJc3RAbVtI3QJ" alt=""><figcaption></figcaption></figure>


# Exploded Asset View

To clearly view all subcomponents of your model, click the **Explode view** button in the asset toolbar.&#x20;

<figure><img src="/files/gXdL30CV2hjtzcW5LxlK" alt=""><figcaption></figcaption></figure>

This separates your model's parts automatically. You can use the slider below the button to control the distance between the separated parts. This button will only appear if your model has multiple pieces.

<figure><img src="/files/UbMU50PnpRhkbovjyqmq" alt=""><figcaption></figcaption></figure>


# Collections and Sharing

Learn how to use the collections and sharing page.

This page allows you to manage **users**, **groups**, **collections**, and **security settings**, as well as edit sharing settings on collections and individual assets.

<figure><img src="/files/J84y4xGNbuwyKwI0Yk9t" alt=""><figcaption></figcaption></figure>


# Users Tab

Learn how to manage user settings for your collections.

This tab displays all the users in the currently loaded collection, as well as their email, access level, and last sign-in date.

It will also display users who have access to your collection through a group.&#x20;

<figure><img src="/files/oX7M6RoZhqJk3NKkJNbY" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Only admins of a collection are able to edit and manage user data.
{% endhint %}

## Adding Users

By clicking the "Add User +" button, you can add new users to the collection. Start by setting the new user's email, and then set their user access level and an optional expiration date. Both users that have and have not yet registered for echo3D can be added to a collection.&#x20;

<figure><img src="/files/vS3uQIQLWnXNBosMULvB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/aUslbiAkNitPkzoHZ8Iz" alt=""><figcaption></figcaption></figure>

### User Access Level

Set the access level for a user when adding them to a collection. If an expiration date has been set for a user's collection access, they will lose all collection access when the expiration date passes.

#### Admin

Admins have full access to a collection. In addition to the access allowed to [Editors](#editor), Admins are also able to make changes to the settings of the collection via the [Collections and Sharing](/web-console/manage-pages/collections-and-sharing) page.

#### Editor

Editors have access to all functions relating to assets within a collection. They can upload, download, edit and delete assets. They are also able to access all functionality of a collection given the subscription.

#### Commenter

Commenters can comment on assets, otherwise, their interactions are the same as that of [Viewers](#viewer).

#### Viewer

Viewers are limited to viewing assets within a collection. They are not able to upload, download, edit or delete assets.

## Managing Users

By clicking the top level menu button, you can bulk upload or download user data.

<figure><img src="/files/e78Z7oVKXUtoG2fDNycM" alt=""><figcaption></figcaption></figure>

By clicking the menu button on an individual user, you can update the user's information, send them an email, or remove them from the collection.

<figure><img src="/files/6Uu9xYrSCAfDwQOzXaKp" alt=""><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=br3xJTkqBSI&ab_channel=echo3D>" %}


# Groups Tab

Learn how to manage group settings for your collections.

This tab displays all of your associated groups, as well as their member counts, associated collections, and given access levels to those collections.

Users who are granted access to a collection through a group will also be shown on the [Users](/web-console/manage-pages/collections-and-sharing/users-tab) page.&#x20;

<figure><img src="/files/8xgGgbCFY0JzYFKBjMzo" alt=""><figcaption></figcaption></figure>

## Adding Groups

Click the **+** button to create a new group

<figure><img src="/files/J4cZIEzCIdr75xwefgXe" alt="" width="441"><figcaption></figcaption></figure>

Choose users to add to the group.

<figure><img src="/files/4IqI1xREwR7jTiwJT1bm" alt="" width="536"><figcaption></figcaption></figure>

Choose what collections you want to give the group access to, as well as the desired access level.

<figure><img src="/files/bjwRw5RcVKnYuIxfpiVJ" alt=""><figcaption></figcaption></figure>

## Managing Groups

By clicking on the top level menu button, you can download a CSV of your groups data.

<figure><img src="/files/MuhrqIuCyglPNaptZdjM" alt=""><figcaption></figcaption></figure>

By clicking the menu button on an individual group, you will be able to rename the group, manage its members, edit the access level given to its member, send an email to the group members, or delete the group.

<figure><img src="/files/MIk9WMgzqPgdyfI7p9WF" alt=""><figcaption></figcaption></figure>


# Collections

Learn how to manage collection settings.

This tab displays all of your associated collections, as well as their respective admins, your access level to those collections, and the credit limit of those projects.

<figure><img src="/files/t9nWA8gCX78KAXMpz2fR" alt=""><figcaption></figcaption></figure>

## Adding Collections

By clicking the New Collection+ button, you will be able to generate a new collection, or manually enter a public collection.

<figure><img src="/files/KWAlzZjfFfmPcUx35UnJ" alt=""><figcaption></figcaption></figure>

## Managing Collections

By clicking the menu button of any individual collection, you will be able to rename the collection, make it public/private, update/remove its credit limit, view the collection key, export data, or delete the collection.

<figure><img src="/files/RMwy76iA0Wv52kq7IOSn" alt=""><figcaption></figcaption></figure>


# Export Data

Learn how to export data for collections and assets.

The Collections tab also gives admins the ability to export data for an entire collection. (NOTE: this is only available for Custom plan accounts)

Simply click the ![](/files/2yzpBrRW1zq72kApkW0n) button next to the collection you'd like to export data for, and click the "Export data" option from the dropdown that appears.

<figure><img src="/files/1qoLb2SMTmWN4YnyEZwg" alt="" width="191"><figcaption></figcaption></figure>

A modal will appear that gives options for what type of collection and asset-specific data you want to include in your export. After clicking export, our servers will process your request and will respond with a zip file of the requested data.&#x20;

<figure><img src="/files/VUEb8BGaOKqzUwzndZ3H" alt="" width="532"><figcaption></figcaption></figure>

If any asset specific data options were selected, that asset data will appear in sub-folders of the zip file, where each sub-folder corresponds to an asset in your collection.&#x20;

### Single-asset Data Export

We also provide the ability to export data for one asset at a time, which includes more options for what data you can export.&#x20;

On the Content page, click the ![](/files/2yzpBrRW1zq72kApkW0n) button for a specific asset you'd like to export data for, and click the "Export data" option from the dropdown that appears.

A modal will appear that gives options for what type of asset-specific data you want to include in your export. These options also include model-related data like the actual asset 3D model, asset files (textures, materials, etc.), and the asset in all available file formats. After clicking export, our servers will process your request and will respond with a zip file of the requested data.&#x20;

<figure><img src="/files/4mxLIVewhE8UyFjKz1uc" alt="" width="473"><figcaption></figcaption></figure>

{% embed url="<https://www.youtube.com/watch?v=gLrRnefeIOs&ab_channel=echo3D>" %}


# Collection Sharing Tab

Learn how to share your collections with others.

This tab lists all of the collaborators added to the current collection alongside their emails and access levels.

<figure><img src="/files/JD2wRxMX1s45XikRPEOz" alt=""><figcaption></figcaption></figure>

## Adding User to a Collection

By typing into the top bar, you will be able to see a list of users associated with your collections.&#x20;

You can add them directly by selecting them or typing their email to manually invite a new user.

Added users will receive an email notification indicating they were invited to the collection.&#x20;

User will be added as viewers by default.

{% embed url="<https://www.youtube.com/watch?v=br3xJTkqBSI&ab_channel=echo3D>" %}

## Changing Access Level

Use the dropdowns to change or revoke the access level of a user of the collection.

<figure><img src="/files/QMBIXot7DhNAaLWEqiZe" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The original owner of the collection cannot be removed as an admin.
{% endhint %}

## Collection Access Settings

Toggle the buttons at the bottom of the screen to **lock all the assets** in the collection, set whether the collection is **public** or **private**, and set whether viewers are **allowed to download** **assets**.

<figure><img src="/files/BCxExF8ZpKGz3n40wChQ" alt="" width="362"><figcaption></figcaption></figure>


# Asset Sharing Tab

Learn how to share assets with other users.

{% hint style="info" %}
This tab is visible only to collection administrators.
{% endhint %}

This tab is used to set asset access permissions for the assets in the collection.

A user or viewer with access to an asset can inspect, modify, update, delete, and download the asset.

## Managing Access Requests

* The **Pending Request** tab displays all current active access requests pending to be be accepted or rejected. Each request represents access to a particular asset that was granted to a user. Collection admins can **revoke** any active request to again disable access.&#x20;

<figure><img src="/files/6luXyh60Kt7vHmVjOEA4" alt=""><figcaption></figcaption></figure>

* The **Approval** tab displays the approved access requests and allows you to revoke them.

<figure><img src="/files/YpIZZIYU57PJz3fJtdZ2" alt=""><figcaption></figcaption></figure>

* The **Denials** tab displays rejected requests which can be approved later if desired.

<figure><img src="/files/MV6paGR5lg7Iflcc8Fsv" alt=""><figcaption></figcaption></figure>


# Security Tab

Learn how to use the security tab.

{% hint style="success" %}
Your data security and privacy is a top priority.
{% endhint %}

<figure><img src="/files/Ub3rO2hnSIVQRvs9A9pO" alt="" width="563"><figcaption></figcaption></figure>

Security Settings

This section shows what security protocols we use for your collections.

<figure><img src="/files/Rfkf3JO6PwCnvw6PfxHS" alt="" width="302"><figcaption></figcaption></figure>

* **SSL**: 3D assets and data will be streamed over authenticated and encrypted links.
* **Data Anonymization**: 3D assets stored on our servers will be anonymized so no attacker will be able to know what the content represents.

{% hint style="success" %}
Our system provides SSL encryption and data anonymization to **all plans free of charge**.
{% endhint %}

## Security Key

This section allows you to access the security key used to secure your API calls.

<figure><img src="/files/PYe6jNIY0McRefopauTS" alt="" width="509"><figcaption></figcaption></figure>

You can click the  ![](/files/xtRAlS4WjjkRXge9LcXp) icon to view the secret key, and clicking anywhere in the secret key container will copy it to your clipboard.

{% hint style="danger" %}
Do not share your security key with others.
{% endhint %}

## User Authentication Key

This section allows you to access your personal authentication key for your API calls

<figure><img src="/files/gRGwu4WTfAWFxTQHi7Ao" alt="" width="427"><figcaption></figcaption></figure>

You can click the ![](/files/xtRAlS4WjjkRXge9LcXp) icon to view your authentication key, and clicking anywhere in the authentication key container will copy it to your clipboard.

{% hint style="danger" %}
Do not share your user authentication key with others.
{% endhint %}


# Metadata & Tags

Learn how to use the Metadata & Tags page.

This page allows you to manage data associated with your collection, and the data associated with individual assets, including metadata, tags, files, and text.

<figure><img src="/files/poQyWZVe0z9vEz8CR49Y" alt="Collection Taxonomy tab"><figcaption><p><strong>Collection Taxonomy tab</strong></p></figcaption></figure>

<figure><img src="/files/Fmi6QS5iew2G7CQr9TC1" alt="Asset Specific Taxonomy tab"><figcaption><p><strong>Asset Specific Taxonomy tab</strong></p></figcaption></figure>


# Collection and Asset Specific Taxonomy

Learn more about collection taxonomy and asset specific taxonomy.

## Collection Taxonomy vs. Asset Specific Taxonomy

You to add data on a collection-level in the Collection Taxonomy tab, as well as add data for specific individual assets within a collection, in the Asset Specific Taxonomy tab. For both collections and individual assets, you can add metadata, tags, linked files, and free text.

## Metadata

A **metadata entry** is a pair of one key and one value (e.g., key `scale` and value `2`).

The **Collection Taxonomy** contains metadata entries that are applied at a collection-level and/or to all assets in the collection (e.g., a data entry with key `scale` and value `2` will double the scale of all assets).&#x20;

Selecting the **checkbox** will allow for the collection metadata to be applied to **all assets in the collection individually**.

<figure><img src="/files/ivIo4vm1S0dnJpgp2I4B" alt=""><figcaption></figcaption></figure>

Admins can add "**Required Keys**" and enforce the addition of such keys to any new asset in such collection. Add notes for your team members to explain why this key is required and what values would be acceptable.&#x20;

<figure><img src="/files/tCqraSL6DQ2M3sWzOxPA" alt=""><figcaption></figcaption></figure>

The **Asset Specific Taxonomy** is a set of metadata entries associated with a single asset in your collection (e.g., metadata associated only with the manufacturing arm file).

<figure><img src="/files/2arOEZ3YC6GGuN9cpoS2" alt=""><figcaption></figcaption></figure>

Admins can **lock** each metadata database to avoid user errors by clicking the three dots and locking (or unlocking) the database.

<figure><img src="/files/oqXNi2fNNkLCIaIiO5XR" alt=""><figcaption></figcaption></figure>

## Tags

You can add tags to both collections and specific assets. You can manually add any tag to your asset or collection, and the platform will also suggest other relevant tags for your to include.&#x20;

<figure><img src="/files/X5Qh5enhbfU0TVdUoeKy" alt=""><figcaption></figcaption></figure>

If enabled on upload, the platform will use AI to auto-generate tags and add them to your asset. You can then manually add more tags to your asset or your collection. AI-generated tags looks like this (and can be removed like any other tag):

<figure><img src="/files/o7EfKiyzxwsUwi23VeKg" alt=""><figcaption></figcaption></figure>

## Linked Files&#x20;

You can add any file (in any file type) and associate them with a whole collection and a specific asset. Use the Collection Taxonomy tab to add a linked file to a whole collection and the Asset Specific Taxonomy tab to add linked file to a specific asset. Once a file is added, you can download or delete it.

<figure><img src="/files/YHoFjGeioeAT0ca5ul2h" alt=""><figcaption></figcaption></figure>

## Linked Text&#x20;

You can add any freeform text and associate them with a whole collection and a specific asset. Use the Collection Taxonomy tab to add linked text to a whole collection and the Asset Specific Taxonomy tab to add linked text to a specific asset. Linked text is automatically saved and can be edited or deleted at any time.

<figure><img src="/files/9BTxjg1gcFewKrVKzuP9" alt="" width="375"><figcaption></figcaption></figure>

## Asset Files

<figure><img src="/files/AkLA8EMSuroGFxsCohmh" alt=""><figcaption></figcaption></figure>

Only available on the Asset Specific Taxonomy tab since these files are asset specific. You can view the **texture and material files** of a specific 3D asset. These files are currently only viewable for zipped .obj assets. You can download or edit each asset file. If you click edit, you'll be moved to the [Model Editor](broken://pages/-MVhMWAbyJ48u-SDBsnb), where you can update these asset files through a 3D model-specific editor.


# How to Add and Edit Metadata and Tags

Learn how to add and edit metadata and tag in the Data page.

## Metadata

### 1. Adding a Metadata Entry

On both the Collection Taxonomy and Asset Specific Taxonomy tabs, Click the <img src="/files/fioqDKRMkMko9tf6aFjN" alt="" data-size="line"> button to add a data entry to it. Fill in the `key` and `value` fields in the newly-created row, and click the <img src="/files/QJJlpNmzzUGoXBGso0nK" alt="" data-size="line">button when you’re done or click <img src="/files/8bhW9lhXL6iOu4V3UgTk" alt="" data-size="line"> to cancel.

<figure><img src="/files/CSWvMzo03SW3B4MvUJPK" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
You can add almost **any key** and **any value**. However, there are a few reserved metadata keys that cannot be added or edited.&#x20;
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=Whr8hP-3oRo>" %}

On the Collection Taxonomy tab you can also tick the checkbox <img src="/files/Zlq7wUxF9I6y5bUoYrgm" alt="" data-size="line">to apply the metadata entry to **all assets individually.**&#x20;

{% embed url="<https://www.youtube.com/watch?v=mtPWTd4Ir5s>" %}

### 2. Adding Multiple Data Entries

Click the three dots and "Upload CSV" to upload a **.csv** file that contains pairs of keys and values to be added as data entries to the global database. Your metadata file should contain only two columns: one for **keys** and the second for **values**.

![](/files/-M9tGmk4Iq5L5lD0G009)

Here is a sample file you can use:

{% file src="/files/-M9tGw0oesRNMKmCPf0\_" %}

### 3. Editing a Data Entry

Click on the <img src="/files/0zTVgA6nRxFZ1RutXK3g" alt="" data-size="line">button to edit the data entry. Click the<img src="/files/yrrPaZEZ3WCFb3M8gTHo" alt="" data-size="line"> button when you’re done or click <img src="/files/ZDV7jGMqudVQJIsHKNCf" alt="" data-size="line">  to cancel.

<figure><img src="/files/N41XX4JGtkPLWlFAvq0e" alt=""><figcaption></figcaption></figure>

### 4. Deleting a Data Entry

Click on the <img src="/files/5ieEq3XXZRRZQzzMTCY3" alt="" data-size="line"> button to delete the data entry and confirm the deletion, when prompted. Be sure to delete the metadata from all assets, if you added it for both the collection and for each asset individually.

<figure><img src="/files/0T0aFc3GOxTk3gR3Mj4V" alt=""><figcaption></figcaption></figure>

### 5. Downloading All Data Entries

Click the three dots and click "Download CSV" to download a **.csv** file that contains pairs of keys and values representing the global database.

<figure><img src="/files/MBOACdqsrYpYdjlLNDg4" alt=""><figcaption></figcaption></figure>

### 5. Required Keys

Admins also have a "Required Keys" database, allowing them to set keys that all other users must add to new assets added to the collection. Adding, editing and deleting required keys are done in the same manner as in the Metadata Database. Uploading and downloading csv files and locking the database or deleting all required keys is also done in the same manner as in the Metadata Database (clicking the three dots).

<figure><img src="/files/9ZStHsXNAthExYjIAm5x" alt=""><figcaption></figcaption></figure>

## Tags

You can add tags to both collections and specific assets. You can manually add any tag to your asset or collection, and the platform will also suggest other relevant tags for your to include.&#x20;

<figure><img src="/files/X5Qh5enhbfU0TVdUoeKy" alt=""><figcaption></figcaption></figure>

If enabled on upload, the platform will use AI to auto-generate tags and add them to your asset. You can then manually add more tags to your asset or your collection. AI-generated tags looks like this (and can be removed like any other tag):

<figure><img src="/files/o7EfKiyzxwsUwi23VeKg" alt=""><figcaption></figcaption></figure>

##


# How to Add Linked Files and Text

Learn how to add associated files and text to collections and assets, as well as asset files.

The Metadata & Tags page also allows users to add both associated files and linked text to both collections and assets. For specific assets, you can also view and edit asset files.

{% embed url="<https://www.youtube.com/watch?v=pFrcbcbLE8A>" %}

## Linked Files&#x20;

You can add any file (in any file type) and associate them with a whole collection and a specific asset. Use the Collection Taxonomy tab to add a linked file to a whole collection and the Asset Specific Taxonomy tab to add linked file to a specific asset. Once a file is added, you can download or delete it.

<figure><img src="/files/YHoFjGeioeAT0ca5ul2h" alt=""><figcaption></figcaption></figure>

## Linked Text&#x20;

You can add any freeform text and associate them with a whole collection and a specific asset. Use the Collection Taxonomy tab to add linked text to a whole collection and the Asset Specific Taxonomy tab to add linked text to a specific asset. Linked text is automatically saved and can be edited or deleted at any time.

<figure><img src="/files/9BTxjg1gcFewKrVKzuP9" alt="" width="375"><figcaption></figcaption></figure>

## Asset Files

<figure><img src="/files/AkLA8EMSuroGFxsCohmh" alt=""><figcaption></figcaption></figure>

Only available on the Asset Specific Taxonomy tab since these files are asset specific. You can view the **texture and material files** of a specific 3D asset. These files are currently only viewable for zipped .obj assets. You can download or edit each asset file. If you click edit, you'll be moved to the [Model Editor](broken://pages/-MVhMWAbyJ48u-SDBsnb), where you can update these asset files through a 3D model-specific editor.

{% embed url="<https://www.youtube.com/watch?v=xiPRA4te-0A>" %}


# Web Customizer

Learn how to use the WebAR Customizer page.

You can personalize all the WebAR experiences you create through the platform by adding buttons, actions, audio, and a custom background.

{% hint style="success" %}
The Customize page is available in the [paid](https://www.echo3d.com/pricing) plans.&#x20;
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=IuFDrLP_I00>" %}

Open each menu to add buttons and logos on different corners, add a background picture and music, allow for snapshots and saving user location for each asset. Switch between assets for which you want to customize the WebAR experience by clicking the "**Swap Asset**" Button.

<figure><img src="/files/9brm553ZDFP6rrGfOFwm" alt=""><figcaption></figcaption></figure>

This allows you to generate WebAR experiences that are more engaging, and interactive, and include your branding:

![](/files/-MVhy8BUH5bk2Ow-ouGP)

### Adding Buttons, Actions, and a Logo

Use the Buttons & Logos section to introduce clickable buttons, actions, and your own logo to the WebAR experience.&#x20;

You can set up to nine (9) UI elements on the screen at once (on the **top right** corner, **top** center, **top left** corner, **middle right**, **center**, **middle left**, **bottom right** corner, **bottom** center, and/or **bottom left** corner).

You can set default buttons for all assets in your collection through the "Collection Default" tab. You also set buttons for individual assets through the "Asset Specific" tab.&#x20;

{% hint style="info" %}
If both a "Collection Default" and "Asset Specific" button are set for a specific location, the "Asset Specific" button will override the "Collection Default" button for that asset.
{% endhint %}

<figure><img src="/files/njgS06BQYDtG1WHYOVy1" alt="" width="563"><figcaption></figcaption></figure>

Options include:

| **Logo**         | Image source, URL                                      | Redirects to a custom URL                             | Your company logo that redirects a user to your website                   |
| ---------------- | ------------------------------------------------------ | ----------------------------------------------------- | ------------------------------------------------------------------------- |
| **AR Viewer**    | Button text                                            | Opens the camera and shows the model in AR.           | A "See in AR" button that redirects the user to an AR experience          |
| **Link**         | Button text, URL                                       | Redirects to a custom URL                             | `Buy now` button that redirects a user to buy the product on your website |
| **Text**         | Button text, message                                   | Shows a custom message                                | `Learn more` button that shows more information about a product           |
| **Social Media** | Facebook URL, Instagram URL, Twitter URL, LinkedIn URL | Redirects to a social media page                      | You company's social media pages                                          |
| **WebAR QR**     | N/A                                                    | Expands a QR Code with a link to the WebAR experience | QR Button redirects viewers to the WebAR Experience                       |
| **Remove**       | N/A                                                    | None. Removed the button.                             |                                                                           |

### Viewing Click Analytics and Click-through-Rates

When buttons are configured, the number of button clicks and the overall click-through-rate (CTR) will display alongside each button.

<figure><img src="/files/gXC7gfkM6wEpToAmIQLs" alt="" width="563"><figcaption></figcaption></figure>

### Setting a Background Image

Use the Background section to set a background image for the WebAR experience. You can **select a color or upload images from your computer, Google Drive, or from your existing collections** (`.png` , `.jpg`, `.hdr`). You can set a default background **for all assets in your collection through the "Collection Default" tab**. You also set backgrounds for individual assets through the "Asset Specific" tab.&#x20;

{% hint style="info" %}
If both a "Collection Default" and "Asset Specific" background are set, the "Asset Specific" background will override the "Collection Default" background for that asset.
{% endhint %}

<figure><img src="/files/ctEQ6GuDNS4jYZ4Uverq" alt="" width="563"><figcaption></figcaption></figure>

The image will only appear on the preview screen prior to clicking the `See in AR` button.

<figure><img src="/files/8yGzOVmCdifJWWgtKInH" alt=""><figcaption></figcaption></figure>

Click the delete button<img src="/files/65wwHTnKzWSl6jOCNc5U" alt="" data-size="line"> to remove the background.

### Adding Music

Use the Music section to add an audio file to serve as background music for the webAR experience. You can upload music from your computer, Google Drive, or from your existing assets (`.mp3` or `.wav`). You can set default music **for all assets in your collection through the "Collection Default" tab** or set music for individual assets through the "Asset Specific" tab.

{% hint style="info" %}
If both a "Collection Default" and "Asset Specific" music are set, the "Asset Specific" background will override the "Collection Default" background for that asset.
{% endhint %}

Audio will only start playing after a user interaction of any type (screen touch gesture, click, etc.).

<figure><img src="/files/a2cWubDlVmXkC49qpj3i" alt=""><figcaption></figcaption></figure>

Post upload, you can click the delete button<img src="/files/65wwHTnKzWSl6jOCNc5U" alt="" data-size="line"> to remove the music, resulting in an experience with no audio..

### Including Camera Capture Functionality

Toggle "Allow snapshots" to allow **Android** camera capture of the WebAR experience. It will allow viewers to grab a snapshot of the AR scene. **iOS** screenshots and camera capture are enabled by default.&#x20;

<figure><img src="/files/tQCPd4e8KiIebYX1GOQ3" alt=""><figcaption></figcaption></figure>

### Save User Location

Enabling "Save user location" will prompt viewers of the WebAR experience to approve sharing their location with you. If permitted, this location information will be available on the [Users Page](broken://pages/-M41xF_dM7p7C2feyQaA).![](/files/AdpXKAZXEOf9IJdQrdoq)

<figure><img src="/files/VzXir4KMIILyMhfahsHi" alt=""><figcaption></figcaption></figure>

### Sharing Links with Others

Use the Sharing section to copy the link to the WebAR experience, share it to other websites, or get a QR code for the WebAR experience.&#x20;

<figure><img src="/files/B5gC4ZS6B6LEC62sQN2z" alt="" width="563"><figcaption></figcaption></figure>

The QR Code button <img src="/files/1ne4eABsa4mzijQUkMUZ" alt="" data-size="line"> will open a dialog with three QR codes: one with a link to the WebAR experience, one with a link to see your asset on an image in AR, and one QR Code to view your asset in AR on a face.&#x20;

<figure><img src="/files/oltpqj7gXi8ksO8OmLvX" alt="" width="563"><figcaption></figcaption></figure>

### Connecting a Custom Domain

Use the Custom Links section to contact our team and connect your own domain to the WebAR experience. **This means that viewers will be able to access the experience from your company website.**

<figure><img src="/files/7cWj5PpMxIw0g2hFGgAb" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
[Contact us](mailto:sales@echo3D.com) to discuss our custom offerings.
{% endhint %}

{% embed url="<https://www.youtube.com/watch?v=IuFDrLP_I00&ab_channel=echo3D>" %}


# Editor

Use this editor to view, adjust, organize, or create 3D models & scenes. Browse the hierarchy of each echo3D asset—meshes, materials, textures, and more—and select any part to inspect or fine-tune it.

<figure><img src="/files/fNUC1Iah6TtebPpVHNM8" alt=""><figcaption></figcaption></figure>

## Selecting an asset to Edit

The field at the top left of the page indicates which of your echo3D assets you are currently editing. You can select a different one of your 3D assets by clicking on this field. Note that only assets that are GLB's or have a GLB conversion can be selected.&#x20;

<figure><img src="/files/KrT63p4n0gygomkXdbsg" alt=""><figcaption></figcaption></figure>

## Scene Explorer

The left hand sidebar is the Scene Explorer. It includes the entirety of the scene's hierarchy, as well as a range of buttons at the top for manipulating and adding new 3D models and entities. The scene will include your echo3D asset, its associated materials and textures, as well as cameras, lights, and the scene's rendering pipeline. Any of these entities can be edited.&#x20;

<figure><img src="/files/WenzkeKIjdKP727Qd86p" alt=""><figcaption><p>Scene Explorer example</p></figcaption></figure>

### Adding extra entities to the  Scene

To add a new entity to the scene, click the <img src="/files/qIaWHzHda8uk8N21EYk7" alt="" data-size="line"> button in the top right of the sidebar.&#x20;

<figure><img src="/files/kF3eDp4HT4Cdmy7NooH7" alt=""><figcaption></figcaption></figure>

You will have the options to:

1. **Add echo3D asset**: here you can select any of your collection's assets that is or has a GLB.&#x20;
2. **Add local file**: here you can select any GLTF or GLB asset from your local computer.&#x20;
3. Materials
   1. **Add standard material**
   2. **Add PBR material**
4. Lighting
   1. **Add point light**
   2. **Add directional light**

To **delete** an entity, first select it in the scene explorer. Then in the right sidebar's "Properties" tab, go to the "GENERAL" section and click "Dispose".&#x20;

### Transforming 3D Models & other Scene Entities

To translate, rotate, scale, or use bounding box manipulation on scene entities, use the transform buttons at the top of the sidebar. Once one of the transform buttons is on, a gizmo will show in the scene for whichever scene entity is currently selected.&#x20;

<figure><img src="/files/x1FwrMu13DdWGVA11UER" alt=""><figcaption></figcaption></figure>

## Toolbar

The toolbar at the top of the scene includes a range of tool options. These tool options affect the echo3D asset that is currently being edited.&#x20;

<figure><img src="/files/4sEceAhVq1Y9K9ntvBAm" alt=""><figcaption></figcaption></figure>

1. **Recenter Model**: moves the camera to face the scene's origin.
2. **Play animation**: hidden if there are no animations. Plays/pauses animations for the echo3D asset.&#x20;
3. **Show Annotations**: off by default. When on, allows viewing, editing, and adding annotations to the echo3D asset.&#x20;
4. **Show ground shadows**: off by default. Turns on IBL (image-based lighting) shadows for the scene.&#x20;
5. **Exploded view**: hidden if the asset has only one part. Separates parts into an "exploded view" so each part is visible. See more [here](/web-console/manage-pages/content-page/exploded-asset-view).&#x20;
6. **Measurement**: allows measuring the distance between points on the model's surface. See more [here](/web-console/manage-pages/content-page/asset-measurement).&#x20;
7. **Take snapshot**: takes a PNG picture of the current scene and downloads it to your computer.&#x20;
8. **Snapshot and set as thumbnail**: takes a PNG picture of the current scene and sets it as the thumbnail of the echo3D asset.&#x20;
9. **Save**: dropdown menu with a range of options. Covered in the **Exporting Models** section below.&#x20;

### Exporting Models

The  <img src="/files/8ZGnhRtW4bp4XmdmOkzJ" alt="" data-size="line"> button opens a dropdown menu that allows exporting specific scene entities, or your entire scene. Keep in mind that non-visible scene entities will not be included in the export. These are the options:

* **Save as new asset**: Exports the current scene and uploads it as a new asset in your echo3D collection.&#x20;
* **Save edits as new version**: Exports the current scene and uploads it as a new version for the current echo3D asset being edited.&#x20;
* **Download selected node**: Exports the currently selected mesh in the scene explorer (including all of its descendants) and downloads it to your local computer.&#x20;

## Inspector

The left hand sidebar is the Inspector. It has four separate tabs explained below.&#x20;

<figure><img src="/files/BZHErZiMqX1DFpHEh0aa" alt="" width="481"><figcaption></figcaption></figure>

### Properties

This tab gives information on the currently selected entity in the scene explorer. Each type of scene entity (mesh, material, texture, etc.) will have some of its own distinct sections.&#x20;

**Sections for Scene**

* **Rendering Mode**: controls how the whole scene is drawn, either as a normal solid view, wireframe, or solely points.
* **Environment**: sets the scene’s lighting environment (often from a sky or HDR image), which affects how light and reflections appear on all objects.
* **Animations: l**ists and controls animations that run at the scene level, including playback and timing.
* **Material Image Processing**: adjusts the overall look of the rendered image, such as exposure, contrast, saturation, and color grading.
* **Collisions**: allows editing the force of gravity for the scene's physics.&#x20;
* **Shadows**: allows normalizing shadows in the scene.&#x20;
* **Metadata**: shows extra custom data attached to the scene (often imported from the original 3D file).

**Sections for Meshes**

* **General**: basic information about the mesh, including its name, linked material, skeleton (if any), and parent object.
* **Transforms**: controls where the mesh sits in 3D space: position, rotation, and scale.
* **Display:** controls whether the mesh is visible and how it is shown (ex. which sides render, layer mask).
* **Animations**: lists animations tied to this mesh and lets you play, pause, or inspect them.
* **Advanced:** toggle for setting collisions on the mesh, as well as information on normals and UV's.&#x20;
* **Occlusions:** performance settings that control whether parts hidden behind other objects are skipped when drawing.
* **Edge Rendering:** draws visible edges or outlines along the mesh’s geometry.
* **Outline & Overlay:** adds a colored outline or overlay on top of the mesh to highlight or emphasize it.
* **Debug:** diagnostic toggles for troubleshooting, such as surface normals, wireframe overlay, or bone-weight visualization.
* **Metadata:** Shows extra custom data stored on this mesh.

**Sections for Materials**

* **General**: basic material identity and core settings, such as name and material type.
* **Transparency:** controls see-through effects, including opacity and how transparent areas blend with objects behind them.
* **Stencil**: advanced masking rules used to clip or layer parts of a material.
* **Channels:** shows which textures are assigned to each channel of the material (color, normal, metalness, roughness, etc.) and lets you inspect or swap them.
* **Lighting & Colors**: sets base surface color, glow (emissive), and other color-related lighting inputs.
* **Metallic Workflow:** controls physically based surface qualities: how metallic vs. non-metallic the surface looks and how smooth or rough it is.
* **Clear Coat**: adds a separate glossy clear layer on top, similar to car paint or varnish.
* **Iridescence**: adds a rainbow or oil-slick color shift that changes with viewing angle.
* **Anisotropic**: adds directional shine, like brushed metal, hair, or fabric with a visible grain.
* **Sheen**: adds a soft, fuzzy highlight typical of fabrics such as velvet or cloth.
* **Subsurface**: simulates light passing through or scattering inside translucent materials (for example skin, wax, or thin plastic).
* **Levels**: adjusts intensities and strengths of lighting contributions, such as environment reflections and specular response.
* **Rendering**: technical draw settings for the material, such as which faces are visible and depth-related behavior.
* **Normal Map**: controls the orientation of the normal/bump map.
* **Advanced**: detailed shader and rendering options.
* **Debug**: isolates one part of the material (for example only normals, only metalness, or only the color map) to inspect how it contributes to the final look.
* **Metadata**: shows extra custom data stored on this material.

**Sections for Textures**

* **Preview**: shows an image thumbnail of the texture, its R/G/B/A channels, and an option to swap out the image file.
* **General**: basic texture details such as name, dimensions, format, and how the image is sampled when applied to a surface.
* **Animations**: settings for animated textures, such as video playback or frame-based animation.
* **Transform**: controls how the image is mapped onto a surface: scale, offset, and rotation (UV placement).
* **Metadata**: shows extra custom data stored on this texture.

### Debug

This tab allows you toggle different texture channels and features of your scene. There are two sections:

* **Core Texture Channels**: this includes toggles for displaying diffuse and ambient lighting, refraction, decals, etc.&#x20;
* **Features**: this includes toggles for displaying animations, physics, shadows, etc.&#x20;

Note that all of the toggles are purely for debugging, and changes made to them will **not** be used for exported scenes or meshes.&#x20;

### Statistics&#x20;

This tab gives you information about scene statistics. This includes the scene's overall frames per second, as well as the following sections:

* **Performance Viewer**: allows you to visually see and export statistics charted over time instead of just the latest number at any one moment. This debug tool lets you easily identify performance issues in your scene: the data is normalized on the displayed range, meaning the smallest value corresponds to the bottom y-position on the graph, while the highest value corresponds to the top y-position.

  <figure><img src="/files/oBkaR4RmwC3g6tBlgftd" alt=""><figcaption></figcaption></figure>
* **Count**: provides total counts of meshes, faces, lights, materials, and other types of entities in the scene.&#x20;
* **Frame Steps Duration:** provides a breakdown of what contributes to the frame time in the scene.&#x20;
* **System Info**: provides information about your system, including the hardware scaling and graphics engine your browser uses.&#x20;

### Tools

This tab allows you to capture videos and images of your scene, as well as create readable diffs of changes you've made in your scene. It includes the following sections:

* **Capture**: allows you to capture images and videos of your scene.&#x20;
* **Replay**: when you start recording here, all changes you make to your scene (e.g. changing lighting visibility, textures, etc.) will be recorded and put into a json file that will be downloaded to your computer once you stop recording. These json diffs can also be uploaded via this section, which will apply those changes to your current scene.&#x20;
* **Scene Import**: allows you to upload animations to your scene.&#x20;
* **GLTF Loader**: allows you to toggle different options for how GLTF and GLB files are loaded into your scene.&#x20;
* **GLTF Extensions**: allows you to toggle different options for which GLTF extensions are used in your scene.&#x20;


# Deliver Pages

Learn how to use the pages in the Deliver section of the platform.

The [Locations](/web-console/deliver-pages/locations-page) page allows you to see to which locations your 3D assets are being delivered, where they are used most, and the location of servers delivering your 3D content to users.

{% content-ref url="/pages/-M41x1EKI-Wkxcs7K3tf" %}
[Locations](/web-console/deliver-pages/locations-page)
{% endcontent-ref %}

The [Insights](/web-console/deliver-pages/insights-page) page allows you to examine analytics around how users are interacting with your 3D assets, how your project is being accessed, and how your plan is being utilized.

{% content-ref url="/pages/-M41xDdtrkeL7hxP3fmL" %}
[Insights](/web-console/deliver-pages/insights-page)
{% endcontent-ref %}

<figure><img src="/files/PNBmb0QCe7kywQOQsjCt" alt=""><figcaption></figcaption></figure>


# Locations

Learn how to use the locations page.

<figure><img src="/files/TNefPI9zzbbCTpTuOH9N" alt=""><figcaption></figcaption></figure>

### User locations

You can analyze user distribution by country (e.g., United States or Germany). This allows you to monitor user engagement and the popularity of your 3D experience or app in different geographical regions.

### Target locations

This chart allows you to see and analyze the distribution of all assets in your collections which are paired with a **location target**.

<figure><img src="/files/m8fu9p7TUMNeEewbaDtN" alt=""><figcaption></figcaption></figure>

You can hover over the colorful dots to see which asset is set where (e.g., a 3D model asset called `Magnifier.glb` is set to New York and was accessed 2 times).

<figure><img src="/files/Rwm8mGAq15O8TTyrb1SH" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Our CDN solution will make sure 3D assets are automatically distributed to and delivered from servers closest to their locations.
{% endhint %}

### Location popularity

You can see usage metrics around the most used locations and from which locations your 3D assets are being accessed by country (e.g., United States). You can click on the different countries to see the usage in those regions.

<figure><img src="/files/VOZxZ0vcaqMeZtBelQOA" alt=""><figcaption></figcaption></figure>

### Server Coverage

You can view the servers delivering your 3D content to users.&#x20;

<figure><img src="/files/pvqNQekZXDoajey0aB8g" alt=""><figcaption></figcaption></figure>


# Insights

Learn how to use the insights page.

## Usage History

You can see when your 3D assets were accessed or used through time (today, last week, last month, last year, custom, etc.). It also shows information like when the asset was created, and last accessed and how many times.

<figure><img src="/files/giqHZV6Oy835MErenwmS" alt=""><figcaption></figcaption></figure>

**Switch between different assets** in a given collection by clicking "Swap asset".

<figure><img src="/files/hJFdjE2Jmd5ACNrNCGBi" alt="" width="372"><figcaption></figcaption></figure>

**Switch time periods** (last 7 days, last 30 days, last 12 months) or set a custom date range, using the menu on right corner.&#x20;

<figure><img src="/files/ej9dNgTpO9w6jwuYF0mV" alt="" width="158"><figcaption></figcaption></figure>

**Compare** the usage of two different assets by clicking "Compare" and selecting another asset from your collection. The compared asset will appear on the bottom left corner of the screen.

<figure><img src="/files/YPVDrjyPqDpo74ULo8jK" alt=""><figcaption></figcaption></figure>

## Collection History

The collection history panel displays a running log of actions taken on the current collection. The collection history includes date, user email, asset ID, and the action taken.&#x20;

Examples of these actions include:&#x20;

1. Adding, deleting, or editing an entry
2. Adding a user to the project
3. Changing a user’s access privileges
4. Changing the security level of the project

The collection history can be sorted by most recent or oldest actions by clicking the arrows next to the  Date Colum.

<figure><img src="/files/UmzDGJsuR4mWSmRVn8LP" alt=""><figcaption></figcaption></figure>


# Optimize Pages

Learn how to use the pages in the Optimize section of the platform.

The [Convert & Compress](/web-console/compute-pages/convert-and-compress-page) page allows you to process 3D assets, convert models between file formats, compress and optimize files, and generate 2D thumbnails.

{% content-ref url="/pages/-MVhMOnvV\_AEK5IkfKIS" %}
[Convert & Compress](/web-console/compute-pages/convert-and-compress-page)
{% endcontent-ref %}

<figure><img src="/files/bjPYnWq8L6r2fWYE84U0" alt=""><figcaption></figcaption></figure>


# Convert & Compress

Learn how to use the convert & compress page.

On this page, you can process 3D assets, convert between formats, and compress and optimize files.&#x20;

{% embed url="<https://www.youtube.com/watch?v=2iXXCx8u70U&ab_channel=echo3D>" %}

## Assets from Collection

3D assets from your collection are automatically available for processing.&#x20;

<figure><img src="/files/ypZ1zqkdNpKYuLNE90GE" alt=""><figcaption></figcaption></figure>

You can choose different models from your collection by clicking the dropdown above the asset:

<figure><img src="/files/J2DEgx1dOYl7scjGFls0" alt=""><figcaption></figcaption></figure>

## 3D Models

For this type of asset, you can:

* Convert the models to different file formats (fbx, glb, glft, obj, stl, usdz, and more).
* Compress the models using Standard Draco or the [echo3D Ultimate Compression](https://www.echo3d.com/cloud/3d-model-compression-optimization)
* Compress the models to poly-reduced versions
* Compress the model's textures&#x20;
* Rescale the model to other sizes
* Upload compressed versions directly to the platform or download the new model

<figure><img src="/files/kT0NergCTdEeHuNbl0sv" alt=""><figcaption></figcaption></figure>

#### Texture Compression

Each of an asset's textures can be compressed by clicking the "Compress Texture" toggle switch in the Texture Compress section. The following settings are also available to control how the texture is compressed:

* Format: Jpeg, Png, WebP, Ktx2
* Resolution: 256x256, 512x512, 1024x1024, 2048x2048, 4096x4096
* Quality: 0-100%

The "Compressed Size" and "Total GLB File Size" will show an estimate of the final post-compression sizes.&#x20;

To compress multiple textures at once, simply select a different Material or Texture from the dropdown, and also click the  "Compress Texture" toggle switch for it. To generate the model with these compressed textures, click the blue "Compress" button at the bottom of the section.&#x20;

<figure><img src="/files/79L56A3v1GWrBpEKbLNC" alt=""><figcaption></figcaption></figure>

## Images

For this type of asset, you can:

* Compress the images to lighter versions
* Convert them to 3D models

<figure><img src="/files/MBuCSixDWf0f0HjVJ3Pw" alt=""><figcaption></figcaption></figure>

## Videos

For this type of asset, users of [paid](mailto:sales@echo3D.com) plans can:

* Compress the videos to lighter versions
* Convert video to GIF

<figure><img src="/files/Y8NyuTB4BT0EvNwvsBGZ" alt=""><figcaption></figcaption></figure>


# Automate Pages

Learn how to use the pages in the Automate section of the platform.

The **Automate** section consists of two key pages: [Workflows](/web-console/automate-pages/workflows) and [Agents](/web-console/automate-pages/agents). Both pages allow you to build custom, automated processes and controls for your 3D assets.

<figure><img src="/files/OIDUd62Q4haRnScThyOc" alt=""><figcaption></figcaption></figure>


# Workflows

The **Workflows page** allows you customize both echo3D [Workflows](/web-console/automate-pages/workflows/workflows) and [Webhooks](/web-console/automate-pages/workflows/webhooks), enabling real-time integrations and automated configurations.

<figure><img src="/files/A9zV1U8S9qAN4htUm7iP" alt=""><figcaption></figcaption></figure>


# Workflows

Automatically apply changes to assets when specific echo3D events occur.

Workflows let you automatically apply changes to your assets when specific events occur in your echo3D collection. When a configured event fires, echo3D applies your workflow's settings to the affected asset. These changes can include adding custom metadata, granting asset access to specific users, creating shortcuts in other collections, compressing assets, or converting assets to new file formats.

<figure><img src="/files/nvHLzpLAwFdLaiHsNDpe" alt=""><figcaption></figcaption></figure>

### Creating a Workflow

To create a new workflow, navigate to the Workflows tab and click the **Add Workflow** button. A dialog will appear with four tabs:

* **Triggers**: Choose which events activate the workflow. The available triggers are:
  * *Upload*: Fires when a new asset is uploaded.
  * *Edit*: Fires when an asset is edited via the model editor.
* **Metadata & Tags**: Define custom metadata key-value pairs and tags to be applied to the asset when the workflow triggers.
* **Optimization**: Configure automatic asset compression or file format conversion.
* **Sharing**: Grant elevated access to the asset for specific users, or create shortcuts to the asset in other collections.

You can save any combination of these settings as a reusable Template (via the top-right of the dialog), which lets you quickly populate the same settings when creating new workflows in the future.

<figure><img src="/files/BT9TqEypXi6G2HeqZJ3A" alt=""><figcaption><p>Example of the Metadata &#x26; Tags tab</p></figcaption></figure>

### Default Upload Workflow

Every collection comes with a pre-existing Upload Workflow whose initial settings match the system defaults. You can edit its settings, and those changes will appear as the defaults in the Upload Hub. You can also add additional triggers (such as Edit) to this workflow, but you cannot remove the Upload trigger or delete the workflow itself.

<figure><img src="/files/G0EozTbHHqEK5IVYiKOq" alt=""><figcaption><p>Example of the Upload Workflow template in the top right of the Upload Hub</p></figcaption></figure>

### How Multiple Workflows Interact

Multiple workflows can share the same trigger. When an event fires that matches more than one workflow, echo3D merges the settings from all matching workflows into a single combined setting and applies it to the asset. The merge rules are:

* **Metadata**: If multiple workflows add the same metadata key, their values are combined with a comma.
* **Sharing**: If multiple workflows grant the same user different access levels, the highest level is applied.
* **Optimizations**: All selected optimizations across the workflows will be performed.&#x20;

Exception for Upload Hub uploads: When you upload an asset through the Upload Hub, only the settings you configure directly in the Upload Hub are applied -- they are not merged with any upload-triggered workflows. Uploads via any other method (the model editor, the API, etc.) will merge settings from all matching upload-triggered workflows as described above.<br>


# Webhooks

Trigger custom API calls from echo3D event triggers.

Webhooks let you automatically notify external services when specific events occur in your echo3D collection. When a configured event fires, echo3D sends an HTTP POST request with a JSON payload to your specified URL, enabling real-time integrations and automated workflows.

The Webhooks tab is located on the Workflows page.&#x20;

<figure><img src="/files/mtEUj8UwLEMo6gru43Mb" alt=""><figcaption></figcaption></figure>

### Creating a Webhook

To create a new webhook, navigate to the Webhooks tab and click the **Add Webhook** button. A dialog will appear with the following fields:

* **Name**: A name for your webhook (required).
* **URL**: The HTTPS endpoint that echo3D will call when a selected event is triggered (required). The URL must use HTTPS and cannot point to a private or localhost address.
* **Description**: An optional description of what the webhook is used for.
* **Set Webhook Trigger(s)**: One or more echo3D events that will trigger a POST request to your URL. Each trigger and its corresponding webhook payload are described in detail in the next section.

<figure><img src="/files/mZOdrz7xxXxAQyLtazsy" alt="" width="304"><figcaption></figcaption></figure>

### Webhook Triggers & Payloads

Every webhook receives an HTTP POST with a JSON payload. The payload always has the same fields, listed below. Importantly, metadata keys/values are parallel arrays: metadataKeys\[i] corresponds to metadataValues\[i]. In the examples below, "color" maps to "red" and "size" maps to "large".

| Field          | Type      | Description                                            |
| -------------- | --------- | ------------------------------------------------------ |
| event          | string    | The trigger that fired                                 |
| apiKey         | string    | The API key of the collection                          |
| entryIds       | string\[] | The affected entry/asset IDs (empty if not applicable) |
| metadataKeys   | string\[] | The metadata keys involved (empty if not applicable)   |
| metadataValues | string\[] | The metadata values involved (empty if not applicable) |
| statuses       | string\[] | The statuses involved (empty if not applicable)        |
| versionIds     | string\[] | The version ID's involved (empty if not applicable)    |

***

#### 1. Upload

Fired when a new asset is uploaded to the collection. Only one entryId is ever sent for this trigger.&#x20;

```json
{
  "event": "Upload",
  "apiKey": "bold-sky-1234",
  "entryIds": ["a1b2c3d4-5678-90ab-cdef-1234567890ab"],
  "metadataKeys": [],
  "metadataValues": [],
  "statuses": [],
  "versionIds": []
}
```

#### 2.  Processed

Fired when a new asset is uploaded to the collection and fully processed. Only one entryId is ever sent for this trigger.&#x20;

```json
{
  "event": "Processed",
  "apiKey": "bold-sky-1234",
  "entryIds": ["a1b2c3d4-5678-90ab-cdef-1234567890ab"],
  "metadataKeys": [],
  "metadataValues": [],
  "statuses": [],
  "versionIds": []
}
```

#### 3. Edit

Fired when a new hologram is added to an existing asset (e.g. uploading a new file version for the same entry). Only one entryId is ever sent for this trigger.&#x20;

```json
{
  "event": "Edit",
  "apiKey": "bold-sky-1234",
  "entryIds": ["a1b2c3d4-5678-90ab-cdef-1234567890ab"],
  "metadataKeys": [],
  "metadataValues": [],
  "statuses": [],
  "versionIds": []
}
```

#### 4. Delete

Fired when one or more assets are deleted from the collection. Note that entryIds may contain multiple IDs.

```json
{
  "event": "Delete",
  "apiKey": "bold-sky-1234",
  "entryIds": [
    "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "f9e8d7c6-5432-10fe-dcba-0987654321fe"
  ],
  "metadataKeys": [],
  "metadataValues": [],
  "statuses": [],
  "versionIds": []
}
```

#### 5. CollectionMetadataAdd

Fired when metadata key-value pairs are added at the collection (project) level. entryIds is empty because this metadata applies to the entire collection, not specific assets.

```json
{
  "event": "CollectionMetadataAdd",
  "apiKey": "bold-sky-1234",
  "entryIds": [],
  "metadataKeys": ["category", "environment"],
  "metadataValues": ["furniture", "indoor"],
  "statuses": [],
  "versionIds": []
}
```

#### 6. CollectionMetadataRemove

Fired when metadata key-value pairs are removed at the collection (project) level.

```json
{
  "event": "CollectionMetadataRemove",
  "apiKey": "bold-sky-1234",
  "entryIds": [],
  "metadataKeys": ["category", "environment"],
  "metadataValues": ["furniture", "indoor"],
  "statuses": [],
  "versionIds": []
}
```

#### 7. AssetMetadataAdd

Fired when metadata key-value pairs are added to specific assets. All three list fields are populated: entryIds identifies the affected assets, and metadataKeys/metadataValues are the metadata that was added.

```json
{
  "event": "AssetMetadataAdd",
  "apiKey": "bold-sky-1234",
  "entryIds": [
    "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "f9e8d7c6-5432-10fe-dcba-0987654321fe"
  ],
  "metadataKeys": ["color", "size"],
  "metadataValues": ["red", "large"],
  "statuses": [],
  "versionIds": []
}
```

#### 8. AssetMetadataRemove

Fired when metadata key-value pairs are removed from specific assets.

```json
{
  "event": "AssetMetadataRemove",
  "apiKey": "bold-sky-1234",
  "entryIds": [
    "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    "f9e8d7c6-5432-10fe-dcba-0987654321fe"
  ],
  "metadataKeys": ["color", "size"],
  "metadataValues": ["red", "large"],
  "statuses": [],
  "versionIds": []
}
```

#### 9. AssetStatusUpdate

Fired when a status is updated on an asset or a specific asset version. If the status is removed, the "statuses" list will be empty. If the status was set directly on the asset (via the asset dialog "Details" tab), the "versionIds" list will be empty since there is no associated version. However, if the status was set on a specific asset version (via the asset dialog "Versions" tab), the "versionIds" list will contain that version's id.&#x20;

```json
{
  "event": "AssetStatusUpdate",
  "apiKey": "bold-sky-1234",
  "entryIds": ["a1b2c3d4-5678-90ab-cdef-1234567890ab"],
  "metadataKeys": [],
  "metadataValues": [],
  "statuses": ["In Progress"],
  "versionIds": ["1234567890ab"]
}
```

***


# Agents

The **Agents page** allows you to run specialized [Agents](/web-console/automate-pages/agents/agents) and connect external clients to your collection via the echo3D [MCP Server](/web-console/automate-pages/agents/mcp-server), enabling custom configurations across your assets.&#x20;

<figure><img src="/files/FPwvbiP1K3IhWyLziqWD" alt=""><figcaption></figcaption></figure>


# Agents

Deduplicate and watermark your echo3D assets.

The Agents tab allows you to clean up duplicate files across multiple collections, or quickly watermark assets in your current collection to ensure brand protection.

<figure><img src="/files/FPwvbiP1K3IhWyLziqWD" alt=""><figcaption></figcaption></figure>

## Duplicate Detection

The Duplicate detection agent allows you to view duplicate assets across all of your collections. Simply select which collections you'd like to detect duplicates in, and wait for the agent to complete its search.&#x20;

<figure><img src="/files/EoL8kMzLUZlBt3tU2OZ0" alt=""><figcaption></figcaption></figure>

All detected duplicate assets will be grouped as shown above so that they can be easily compared and organized. The three dots menu on the right hand side offers options for opening the asset dialog in a separate tab, editing the asset's status, merging, or deleting the asset entirely.&#x20;

### Duplicate Merging

Within the duplicate agent, selecting a duplicate asset and clicking merge on the three dots menu, will take you to the merge asset menu.

<figure><img src="/files/aEc96PKpK1Mmqn5muink" alt=""><figcaption></figcaption></figure>

Here the selected duplicate shown in the top can be merged into another selected duplicate bellow as it's new version. All metadata and tags from both assets will appear in the Metadata & Tags tab on the left, these tags and metadata can be removed or modified from here, or new data can be added. Sharing and optimization data can also be modified in their respective tabs.&#x20;

After making the selection and adjusting settings clicking merge will delete the selected duplicate on the top, and make it into the newest version of the selected duplicate bellow.&#x20;

## Watermarking

The Watermarking agent allows you to set watermarking settings for assets in your collection. When watermarks are enabled, a visual watermark will overlay your asset's 3D viewer, preventing unauthorized screen captures or usage of proprietary designs during the review process.

<figure><img src="/files/Y30M1RS4d8YDxh1VItNo" alt="" width="375"><figcaption></figcaption></figure>

You can turn watermarking on at the collection level, which will show watermarks for all users viewing your collection's assets. If watermarking at the collection level is off, you can set watermarking to appear for only specific users viewing your collection.&#x20;


# MCP Server

Let your AI clients connect directly with echo3D collections.

The echo3D Model Context Protocol (MCP) server lets any MCP-compatible AI client (Claude, ChatGPT, Gemini, Cursor, and others) manage your 3D collection using natural language. Once connected, you can list, upload, convert, compress, tag, and search assets just by asking.&#x20;

To connect an AI client with your echo3D collection, follow the instructions on the MCP Server page in your echo3D console.

<figure><img src="/files/KFnGpHPMw848rcKMD8zk" alt=""><figcaption></figcaption></figure>


# Account Page

Learn how to use the pages in the Account section of the platform.

Open the Account page by clicking your profile picture in the top left of the platform, and clicking "Account" in the dropdown menu that appears.

<figure><img src="/files/hwJuv5wCytsfAtuZPyig" alt="" width="89"><figcaption></figcaption></figure>

The [Profile ](/web-console/account-page/profile)tab allows you to view and customize your user information.

{% content-ref url="/pages/-MGKeGd\_c5BRy\_Gz6mOF" %}
[Profile Tab](/web-console/account-page/profile)
{% endcontent-ref %}

The [Plans](/web-console/account-page/subscription) tab allows you to manage your subscription plan and payment method.

{% content-ref url="/pages/-M41we-\_S6AKu9FnrpGa" %}
[Plans Tab](/web-console/account-page/subscription)
{% endcontent-ref %}

The Credit Usage tab allows you to view the credit usage for each of your individual collections, as well as your total credit usage across all collections.&#x20;

{% content-ref url="/pages/vEMa8jXUPi5AOF0S7Sv4" %}
[Credit Usage Tab](/web-console/account-page/credit-usage-tab)
{% endcontent-ref %}

The Email and Password tab allows you to change your email and password:

{% content-ref url="/pages/gvZMOMAdR7qgaR8lwu4h" %}
[Email & Password](/web-console/account-page/email-and-password)
{% endcontent-ref %}

The Notifications tab allows you to customize which emails you receive from echo3D.&#x20;

{% content-ref url="/pages/JbqkP9PYTdhQwBiNrEnL" %}
[Notifications Tab](/web-console/account-page/notifications-tab)
{% endcontent-ref %}

The Delete Account tab allows you to delete your echo3D account if necessary.

{% content-ref url="/pages/ocK6ieyZAOeXAYDGbUBX" %}
[Delete Account Tab](/web-console/account-page/delete-account-tab)
{% endcontent-ref %}


# Profile Tab

Learn how to manage your user profile.

On this tab you can:

* Set your profile picture (png or jpg, 2MB max) or create a 3D avatar to represent you

{% hint style="info" %}
3D avatars are created using Ready Player Me or Avaturn and their creation and use are subject to separate terms between you these third party services
{% endhint %}

* Update your name
* Set your main role
* Set your industry
* Connect to your Google account
* Set your content display preference for the content page (infinite scroll vs. pagination)

<figure><img src="/files/Iky17OBaeyRwuh6KsMDm" alt=""><figcaption></figcaption></figure>


# Plans Tab

Learn how to use the Plans tab.

This page allows you to change your subscription plan, see and update your payment method, view when your next billing cycle starts, and enable or disable pay-as-you-go.

<figure><img src="/files/9TsDxkcr4bzJp59k2iyW" alt=""><figcaption></figcaption></figure>

### **How to See Your Payment Method**

You can add or view your payment method in the top right corner of the plans tab.

<figure><img src="/files/JoD9pngwQjCpTgmBWqIc" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Your payment method is secured by [Stripe](https://stripe.com/). No credit card information is saved in our system.
{% endhint %}

### **Your Current Plan**

You can change, upgrade, and cancel your plan anytime through this tab. Simply click to switch between [plans](https://www.echo3D.com/pricing), cancel your current plan, or [contact us](mailto:sales@echo3D.com) to discuss our custom offerings.&#x20;

<figure><img src="/files/dUGXSf1en13mTy0bl0Tf" alt=""><figcaption></figcaption></figure>

## Information about your Plan

The Plans tab also includes information on how many credits you have left in your billing cycle, and when your billing cycle will reset. You can enable Pay-as-you-go, which allows you to use credits beyond your limit and pay for them as you use them.&#x20;

<figure><img src="/files/zv1bygWyvz4EU1xhcHH3" alt="" width="563"><figcaption></figcaption></figure>


# Credit Usage Tab

Learn how to use the credit usage tab.

View the credit usage for each of your individual collections, as well as your total credit usage across all collections. See how you used your credits, as well as set credit limits for individual sub-collections.&#x20;

<figure><img src="/files/ybPpAsvaWrvpgaCe2KYY" alt=""><figcaption></figcaption></figure>

## Your Limit

This section of the credit usage tab goes over how many credits you have left across all of your collections. 1 credit can be used for 10 API calls, 100MB of storage, **or** 25MB of bandwidth usage.

<figure><img src="/files/W4fGSJ5Qi2AW2aS7xy9D" alt="" width="274"><figcaption></figcaption></figure>

## Your Usage

See how you used your credits across each individual collection or all collections.

<figure><img src="/files/iceaQQ3nspGjQae7sYso" alt="" width="363"><figcaption></figcaption></figure>

Select "**All collections"** from the dropdown menu to see the total usage or select individual collections and view their specific credit usage.&#x20;

The total credits used for All Collections, or the individual collection you selected, is shown in the bottom right of the tab. Credits are used in one of these three methods, which are broken down in the "equation" shown on the tab:

1. API calls, where 10 API calls = 1 credit
2. Storage used, where 100MB of storage = 1 credit
3. Bandwidth, where 25MB of bandwidth = 1 credit

## Credit Limits

You can set limits on sub-collections to manage their credit usage as part of the plan of your main collection. So if you have selected a sub collection, you should see a<img src="/files/M0OISxC9VZ8nm3t8OYlh" alt="" data-size="line"> ("Set credit limit") button under the total credit used. Click that button to open the credit limit input and set a credit limit:

<figure><img src="/files/bfyfE4h9h1cKYodlkbRU" alt="" width="210"><figcaption></figcaption></figure>


# Email & Password

Learn how to change your email and password

### Change email

#### Coming soon!

### Change password

You can change your password by entering your current password, new password, and confirming your new password. Note that if you signed up using your Google account, you must first set a password before you can change it.

<figure><img src="/files/ELOSzW6we8UOIzaYX5Cm" alt="" width="454"><figcaption></figcaption></figure>


# Notifications Tab

Learn how to use the Notifications tab.

Customize which emails you receive from us.&#x20;

<figure><img src="/files/akIrl94uxgXAG2dJjGL5" alt="" width="375"><figcaption></figcaption></figure>

You are welcome to turn off all notifications, however we will still send you selected emails that are pertinent to your account, including emails about missed payments.


# Delete Account Tab

Learn how to use the Delete Account tab.

The Delete Account tab allows you to delete your echo3D account if necessary. **This action cannot be undone and all your content will be deleted.** We'll be sad to see you go!

<figure><img src="/files/wvWMP7BIxg2LV1QGcFDq" alt="" width="563"><figcaption></figcaption></figure>


# Help Menu

Learn how to access the help menu.

Click the <img src="/files/vGamMp5x05dMIXjdyrHI" alt="" data-size="line"> button on the right side of the screen to reveal the help menu.

You can access this [documentation](https://docs.echo3D.com), reference code examples in our [GitHub repository](https://github.com/echo3Dco), request new features, register to our [Slack channel](https://go.echo3D.co/join) (for support or to join our community), and reach out to us through [email](mailto:support@echo3D.com).

<figure><img src="/files/v8VLrdj4SNXk956We2WA" alt="" width="158"><figcaption></figcaption></figure>


# Dev Tools

Learn how to download apps, SDKs, and example code from the platform.

Clicking the <img src="/files/T1tOno8QjqqcjN2gEIC3" alt="" data-size="line"> button in the top right corner of the header bar opens up the Dev Tools window.&#x20;

<figure><img src="/files/Ri3FQOFUFJh5TOKTEGbs" alt="" width="327"><figcaption></figcaption></figure>

## API Key

You can view and copy the current collection's API key. Each collection has its own unique identifier to authenticate API access to the platform.&#x20;

## Security Key

Enable or disable your security key to secure your API calls with an extra security key. Do **not** share it with others. Also available on the [Security tab](/web-console/manage-pages/collections-and-sharing/security) of the Collections & Sharing page.

## User Authentication Key

This key **must** be included in your API calls. Do **not** share it with others. Also available on the [Security tab](/web-console/manage-pages/collections-and-sharing/security) of the Collections & Sharing page.

## SDK Downloads

You can access and download software development kits (SDKs), example code, and demos that allow you to integrate with game engines, 3D builders, 3D painters, and more, and connect them with our platform, such that you can manage and deliver 3D content to your apps through the platform.

{% hint style="warning" %}
Most apps require that your device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or [ARCore](https://developers.google.com/ar/discover/supported-devices).\
Make sure to have [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed on your Android device.
{% endhint %}

<figure><img src="/files/HZTLdzTnJjRtxORxVc4H" alt=""><figcaption></figcaption></figure>

[SDK & integrations](https://www.echo3d.com/developers/sdk-integrations) include:

* Unity SDK
* Unreal SDK
* Blender Addon
* npm Package
* Omniverse Extension
* WebGL
* Snapdragon Spaces
* Niantic Lightship
* ThreeJS
* 8th Wall
* Adobe Substance 3D Painter
* Zappar
* and [more](https://www.echo3d.com/developers/sdk-integrations)


# Themes

Learn how to switch the platform's color schemes.

How to Switch a Theme

Clicking the<img src="/files/4uB4WMpsnp8TvVfuMQTU" alt="" data-size="line"> "theme" button in the top right corner of the header bar allows you to pick between the default "light" and "dark" themes for the platform.

<figure><img src="/files/w2PDjibmST8iWk0cQg0W" alt="" width="375"><figcaption></figcaption></figure>

<figure><img src="/files/vpuzaZYfVAwPkkSDPi86" alt="" width="375"><figcaption></figcaption></figure>

How to Change the Logo

{% hint style="success" %}
Changing the logo is only available in the [paid](https://www.echo3d.com/pricing) plans.
{% endhint %}

An edit button is revealed when hovering over the platform logo.

<figure><img src="/files/UAsqSXS8Ujf0SUxIshid" alt="" width="181"><figcaption></figcaption></figure>

Clicking the pencil icon will allow you to upload an image file as a new logo.

{% hint style="info" %}
We recommend using a 520 x 100 pixels `.png` or `.jpg` file.
{% endhint %}

When a custom logo exists, an "X" button is revealed when hovering over the logo. Clicking that button will allow you to change the logo back to the default logo or upload a new logo.


# Search

Learn how to search through your assets via text or image in the echo3D platform.

Users can search for 3D models, images, and other assets stored in their collection, sub-collections, and collections shared by team members.

<figure><img src="/files/gfzUJHvBJJTaUOiBRHud" alt=""><figcaption></figcaption></figure>

## Search by Text

Type your search criteria in the header search bar next to the ![](/files/Mzqp8lIShk7XDW3NWA1f)  icon.

Assets will appear in the search results if any of the following asset data includes the search text:

1. Asset file name
2. Asset tags and AI-generated tags&#x20;
3. Names of linked files associated with the asset
4. Asset metadata keys&#x20;

<figure><img src="/files/GhjT82ViC8GOHUzltsPB" alt=""><figcaption></figcaption></figure>

## Search by Image

Click the ![](/files/1lEB6HtzjiH20DPbYVhU) icon in the header search bar to upload a search image file. Search images must be of type **.jpg, .jpeg, or .png**.

The search results will show all 3D models and image assets that have at least 50% visual similarity to the search image file. Upon search, a similarity filter will appear that allows you to redo the search with a different minimum similarity.&#x20;

<figure><img src="/files/R65MEhvr8MUTK8vpTTQb" alt=""><figcaption></figcaption></figure>

## Search by Model

3D model search allows you to use one 3D asset to quickly find more assets like it. This tool helps teams remove redundancies from their 3D library and save on storage and find relevant, style-matched 3D assets.

Click the ![](/files/l3zYzozvW1R7jniMq4nO) three dots menu of any **.obj**, **.glb**, or **.usdz** asset, and select "Find similar".

The search results will show all 3D models and image assets that have at least 50% visual similarity to the searched asset. Upon search, a similarity filter will appear that allows you to redo the search with a different minimum similarity.&#x20;

<figure><img src="/files/2oSh5CIRKUXQZawN37kg" alt=""><figcaption></figcaption></figure>


# Objects

Learn the structure of content entries in the API.

## 1. Complete Data Set

This is the structure of the complete data set holding your API key and a database of all content entries associated with your API key.

This data set is retrieved by making the [`/query`](/api/queries#get-entries) API call.

{% tabs %}
{% tab title="Object" %}

```
{
  "apiKey": "API_KEY",    // Your API Key
  "db": {                 // A collection of all content entries                
    ...
  }
}
```

{% endtab %}

{% tab title="Example" %}

```
{
  "apiKey": "API_KEY",
  "db": {
    "edc343c7-37d3-4132-9cd7-52c4902b24c7": {
      "id": "edc343c7-37d3-4132-9cd7-52c4902b24c7",
      "target": {
        "id": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
        "type": "BRICK_TARGET",
        "holograms": [
          "0839a395-4a48-47d1-b819-a923184a7314"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "0839a395-4a48-47d1-b819-a923184a7314",
        "type": "MODEL_HOLOGRAM",
        "targetID": "0c63d1f8-8038-478b-8b60-df6cedeff5cb"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "qrWebXRStorageID": "5ead9dc6-0b11-4133-b342-d43ac95d1116",
        "qrARjsStorageFilename": "qr_arjs_blue-water-4646.png",
        "qrARjsTargetStorageFilename": "qr_arjs_blue-water-4646.patt",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "qrARjsMarkerStorageFilename": "marker_qr_arjs_blue-water-4646.png",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e85b7db2-42a9-4f76-aacc-8f7be4a5e05f",
        "usdzHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.usdz",
        "qrARjsStorageID": "f78b7b84-979d-4dfc-b478-e369b560a623",
        "accessHistory": "[\"1587253959697\",\"1587254928553\",\"1587254944219\",\"1587254945465\"]",
        "createdAt": "1587253959697",
        "qrWebXRStorageFilename": "qr_webxr_blue-water-4646.png",
        "usdzHologramStorageFilename": "Skyscraper.usdz",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "lastAccessed": "1587254945465",
        "qrARjsMarkerStorageID": "343df194-e7ae-4c34-adbf-5718542aca37",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}
{% endtabs %}

## 2. Entries Database

This is the structure of the collection of all content entries associated with your API key.

This database is retrieved by making the [`/query`](/api/queries#get-entries) API call and referring to its `db` component.

{% tabs %}
{% tab title="Object" %}

```
"db": {                 // A collection of all content entries                
    "ENTRY_ID_1": {       // First content entry
      ...
    }
    "ENTRY_ID_2": {       // Second content entry
      ...
    }
    ...                   // Additonal content entries
  }
```

{% endtab %}

{% tab title="Example" %}

```
"db": {
    "edc343c7-37d3-4132-9cd7-52c4902b24c7": {
      "id": "edc343c7-37d3-4132-9cd7-52c4902b24c7",
      "target": {
        "id": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
        "type": "BRICK_TARGET",
        "holograms": [
          "0839a395-4a48-47d1-b819-a923184a7314"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "0839a395-4a48-47d1-b819-a923184a7314",
        "type": "MODEL_HOLOGRAM",
        "targetID": "0c63d1f8-8038-478b-8b60-df6cedeff5cb"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "qrWebXRStorageID": "5ead9dc6-0b11-4133-b342-d43ac95d1116",
        "qrARjsStorageFilename": "qr_arjs_blue-water-4646.png",
        "qrARjsTargetStorageFilename": "qr_arjs_blue-water-4646.patt",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "qrARjsMarkerStorageFilename": "marker_qr_arjs_blue-water-4646.png",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e85b7db2-42a9-4f76-aacc-8f7be4a5e05f",
        "usdzHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.usdz",
        "qrARjsStorageID": "f78b7b84-979d-4dfc-b478-e369b560a623",
        "accessHistory": "[\"1587253959697\",\"1587254928553\",\"1587254944219\",\"1587254945465\",\"1587254963484\"]",
        "createdAt": "1587253959697",
        "qrWebXRStorageFilename": "qr_webxr_blue-water-4646.png",
        "usdzHologramStorageFilename": "Skyscraper.usdz",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "lastAccessed": "1587254963484",
        "qrARjsMarkerStorageID": "343df194-e7ae-4c34-adbf-5718542aca37",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
```

{% endtab %}
{% endtabs %}

## 3. Content Entries

This is the structure of a single content entry in the database associated with your API key.

This content entry is retrieved by making the [`/query`](/api/queries#get-entries) API call and referring to the`db['ENTRY_ID']` component.

{% tabs %}
{% tab title="Object" %}

```
"ENTRY_ID": {             // First content entry
      "id": "ENTRY_ID",     // Content entry ID
      "hologram": {         // The hologram
        ...
      },
      "target": {           // The target
        ...
      },
      "additionalData": {   // The metadata sscocaite with this entry
        ...
      },
      "sdks": [             // A list of SDK supporting this content
        ...
      ]
    }
```

{% endtab %}

{% tab title="Example" %}

```
"edc343c7-37d3-4132-9cd7-52c4902b24c7": {
      "id": "edc343c7-37d3-4132-9cd7-52c4902b24c7",
      "target": {
        "id": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
        "type": "BRICK_TARGET",
        "holograms": [
          "0839a395-4a48-47d1-b819-a923184a7314"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "0839a395-4a48-47d1-b819-a923184a7314",
        "type": "MODEL_HOLOGRAM",
        "targetID": "0c63d1f8-8038-478b-8b60-df6cedeff5cb"
      },
      "additionalData": {
        "qrWebXRStorageID": "5ead9dc6-0b11-4133-b342-d43ac95d1116",
        "qrARjsStorageFilename": "qr_arjs_blue-water-4646.png",
        "qrARjsTargetStorageFilename": "qr_arjs_blue-water-4646.patt",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "qrARjsMarkerStorageFilename": "marker_qr_arjs_blue-water-4646.png",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e85b7db2-42a9-4f76-aacc-8f7be4a5e05f",
        "usdzHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.usdz",
        "qrARjsStorageID": "f78b7b84-979d-4dfc-b478-e369b560a623",
        "accessHistory": "[\"1587253959697\",\"1587254928553\",\"1587254944219\",\"1587254945465\",\"1587254963484\",\"1587255480604\",\"1587255693450\"]",
        "createdAt": "1587253959697",
        "qrWebXRStorageFilename": "qr_webxr_blue-water-4646.png",
        "usdzHologramStorageFilename": "Skyscraper.usdz",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "lastAccessed": "1587255693450",
        "qrARjsMarkerStorageID": "343df194-e7ae-4c34-adbf-5718542aca37",
        "glbHologramStorageFilename": "Skyscraper.glb"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ]
    }
```

{% endtab %}
{% endtabs %}

## 4. Assets

This is the structure of a single asset inside a single content entry in the database based on type.

This asset is retrieved by making the [`/query`](/api/queries#get-entries) API call and referring to the`db['ENTRY_ID']['hologram']` component.

### Any Type of Asset

This is data available for any asset of any type.

{% tabs %}
{% tab title="Object" %}

```
"hologram": {
  "id": "HOLOGRAM_ID",          // Hologram ID
  "type": "HOLOGRAM_TYPE",      // Hologram type, e.g. MODEL_HOLOGRAM, VIDEO_HOLOGRAM, or IMAGE_HOLOGRAM
  "targetID": "TARGET_ID",      // The ID of the associated target
  "filename": "FILENAME",       // The filename of the hologram
  "storageID": "STORAGE_ID"     // The storage ID of the hologram file
},
```

{% endtab %}

{% tab title="Example" %}

```
"hologram": {
  "id": "9d45a992-4f27-4559-9eef-6cec05f79ce7",
  "type": "VIDEO_HOLOGRAM",
  "targetID": "7daa5469-2ac7-40f6-8823-814ac2e596f8",
  "filename": "big_buck_bunny.mp4",
  "storageID": "fa67df18-2a60-4bb6-a7b6-3d5d6a80c6d8"
},
```

{% endtab %}
{% endtabs %}

### Model Assets

This is data available for model assets.

{% tabs %}
{% tab title="Object" %}

```
"hologram": {
        "id": "HOLOGRAM_ID",                      // Hologram ID
        "type": "MODEL_HOLOGRAM",                 // Hologram type
        "targetID": "TARGET_ID",                  // The ID of the associated target
        "filename": "FILENAME",                   // The filename of the hologram
        "storageID": "STORAGE_ID",                // The storage ID of the hologram file
        "textureFilenames": [                     // A collection of the filenames of the hologram's texture files
          "TEXTURE_FILENAME_1",                      // The filename of the first texture file
          "TEXTURE_FILENAME_2",                      // The filename of the second texture file
          ...                                        // Additional texture files
        ],
        "textureStorageIDs": [                     // A collection of the storage IDs of the hologram's texture files
          "TEXTURE_STORAGE_ID_1",                    // The storage ID of the first texture file
          "TEXTURE_STORAGE_ID_2",                    // The storage ID of the second texture file
          ...                                        // Additional texture files
        ],
        "materialFilename": "MATERIAL_FILENAME",   // The filename of the hologram's material file
        "materialStorageID": "MATERIAL STORAGE_ID" // The storage ID of the hologram's material file
      },
```

{% endtab %}

{% tab title="Example" %}

```
"hologram": {
        "id": "0839a395-4a48-47d1-b819-a923184a7314",
        "type": "MODEL_HOLOGRAM",
        "targetID": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d"
      },
```

{% endtab %}
{% endtabs %}

### Video Assets

&#x20;This is data available for video assets.

{% tabs %}
{% tab title="Object" %}

```
"hologram": {
  "id": "HOLOGRAM_ID",          // Hologram ID
  "type": "VIDEO_HOLOGRAM",      // Hologram type
  "targetID": "TARGET_ID",      // The ID of the associated target
  "filename": "FILENAME",       // The filename of the hologram
  "storageID": "STORAGE_ID"     // The storage ID of the hologram file
},
```

{% endtab %}

{% tab title="Example" %}

```
"hologram": {
  "id": "9d45a992-4f27-4559-9eef-6cec05f79ce7",
  "type": "VIDEO_HOLOGRAM",
  "targetID": "7daa5469-2ac7-40f6-8823-814ac2e596f8",
  "filename": "big_buck_bunny.mp4",
  "storageID": "fa67df18-2a60-4bb6-a7b6-3d5d6a80c6d8"
},
```

{% endtab %}
{% endtabs %}

### Image Assets

This is data available for image assets.

{% tabs %}
{% tab title="Object" %}

```
"hologram": {
  "id": "HOLOGRAM_ID",          // Hologram ID
  "type": "VIDEO_HOLOGRAM",     // Hologram type; same as for video holograms
  "targetID": "TARGET_ID",      // The ID of the associated target
  "filename": "FILENAME",       // The filename of the hologram
  "storageID": "STORAGE_ID"     // The storage ID of the hologram file
},
```

{% endtab %}

{% tab title="Example" %}

```
"hologram": {
  "id": "9d45a992-4f27-4559-9eef-6cec05f79ce7",
  "type": "VIDEO_HOLOGRAM",
  "targetID": "7daa5469-2ac7-40f6-8823-814ac2e596f8",
  "filename": "air.png",
  "storageID": "fa67df18-2a60-4bb6-a7b6-3d5d6a80c6d8"
},
```

{% endtab %}
{% endtabs %}

## 5. Targets

This is the structure of a single target inside a single content entry in the database based on type.

This target is retrieved by making the [`/query`](/api/queries#get-entries) API call and referring to the`db['ENTRY_ID']['target']` component.

### Any Type of Target

This is data available for any target of any type.

{% tabs %}
{% tab title="Object" %}

```
"target": {
  "id": "TARGET_ID",           // Target ID
  "type": "TARGET_TYPE",       // Target type, e.g. BRICK_TARGET, GEOLOCATION_TARGET, or IMAGE_TARGET
  "holograms": [               // A collection of IDs of holograms associated with this target
    "HOLOGRAM_ID_1",             // The ID of the first holograms
    "HOLOGRAM_ID_2",             // The ID of the second holograms
    ...                          // Additional holograms
  ]
},
```

{% endtab %}

{% tab title="Example" %}

```
"target": {
  "id": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
  "type": "BRICK_TARGET",
  "holograms": [
    "0839a395-4a48-47d1-b819-a923184a7314"
  ]
},
```

{% endtab %}
{% endtabs %}

### Surface Targets

This is the data available for surface targets.

{% tabs %}
{% tab title="Object" %}

```
"target": {
  "id": "TARGET_ID",           // Target ID
  "type": "BRICK_TARGET",      // Target type
  "holograms": [               // A collection of IDs of holograms associated with this target
    "HOLOGRAM_ID_1",             // The ID of the first holograms
    "HOLOGRAM_ID_2",             // The ID of the second holograms
    ...                          // Additional holograms
  ]
},
```

{% endtab %}

{% tab title="Example" %}

```
"target": {
  "id": "0c63d1f8-8038-478b-8b60-df6cedeff5cb",
  "type": "BRICK_TARGET",
  "holograms": [
    "0839a395-4a48-47d1-b819-a923184a7314"
  ]
},
```

{% endtab %}
{% endtabs %}

### Location Targets

{% tabs %}
{% tab title="Object" %}

```
"target": {
  "id": "TARGET_ID",           // Target ID
  "type": "GEOLOCATION_TARGET",// Target type
  "holograms": [               // A collection of IDs of holograms associated with this target
    "HOLOGRAM_ID_1",             // The ID of the first holograms
    "HOLOGRAM_ID_2",             // The ID of the second holograms
    ...                          // Additional holograms
  ],
  "country": "COUNTRY",       // The location's country, e.g. US
  "city": "CITY",             // The location's country, e.g. New York
  "place": "NAME",            // The location's name, e.g Times Square 
  "latitude": ##.######,      // The location's latitude coordinate
  "longitude": ##.######      // The location's longitude coordinate
},
```

{% endtab %}

{% tab title="Example" %}

```
"target": {
  "id": "803d5d89-1615-455d-ad49-15c69bfc3f4f",
  "type": "GEOLOCATION_TARGET",
  "holograms": [
    "303ee6b8-f63a-4827-99d5-073dad8569f6"
  ],
  "country": "US",
  "city": "New York",
  "place": "Times Square",
  "latitude": 40.713055,
  "longitude": -74.007225
},

```

{% endtab %}
{% endtabs %}

### Image Targets

{% tabs %}
{% tab title="Object" %}

```
"target": {
  "id": "TARGET_ID",           // Target ID
  "type": "BRICK_TARGET",      // Target type
  "holograms": [               // A collection of IDs of holograms associated with this target
    "HOLOGRAM_ID_1",             // The ID of the first holograms
    "HOLOGRAM_ID_2",             // The ID of the second holograms
    ...                          // Additional holograms
  ]
  "filename": "FILENAME",      // The filename of the image file
  "storageID": "STORAGE_ID"    // The storage ID of the image file
},
```

{% endtab %}

{% tab title="Example" %}

```
"target": {
  "id": "935a9bb9-3cbd-4c42-a899-68dc41567e7a",
  "type": "IMAGE_TARGET",
  "holograms": [
    "b963bce7-41be-4d15-9713-2d63f1917132"
  ],
  "filename": "air.png",
  "storageID": "f41ab59d-f4df-422c-830a-63fe4e7107f0",
},
```

{% endtab %}
{% endtabs %}

## 6. Metadata

This is the structure of the metadata of a single content entry in the database.

This metadata is retrieved by making the [/get](/api/data#get-metadata-of-an-entry) API call.

Alternatively, this metadata is retrieved by making the [`/query`](/api/queries#get-entries) API call and referring to the`db['ENTRY_ID']['additionalData']` component.&#x20;

A specific value can be retrieved by referring to the`db['ENTRY_ID']['additionalData'][KEY]` or `db['ENTRY_ID']['additionalData'].KEY`.

{% tabs %}
{% tab title="Object" %}

```
"additionalData": {
        "KEY_1": "VALUE_1",    // The first metadata entry, i.e. pair of key and value
        "KEY_2": "VALUE_2",    // The second metadata entry, i.e. another pair of key and value
        ...                    // Additional metadata entries , i.e. more pairs of keys and values
      },
```

{% endtab %}

{% tab title="Example" %}

```
"additionalData": {
        "qrWebXRStorageID": "5ead9dc6-0b11-4133-b342-d43ac95d1116",
        "qrARjsStorageFilename": "qr_arjs_blue-water-4646.png",
        "qrARjsTargetStorageFilename": "qr_arjs_blue-water-4646.patt",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "qrARjsMarkerStorageFilename": "marker_qr_arjs_blue-water-4646.png",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e85b7db2-42a9-4f76-aacc-8f7be4a5e05f",
        "usdzHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.usdz",
        "qrARjsStorageID": "f78b7b84-979d-4dfc-b478-e369b560a623",
        "accessHistory": "[\"1587253959697\",\"1587254928553\",\"1587254944219\",\"1587254945465\",\"1587254963484\",\"1587255480604\",\"1587255693450\"]",
        "createdAt": "1587253959697",
        "qrWebXRStorageFilename": "qr_webxr_blue-water-4646.png",
        "usdzHologramStorageFilename": "Skyscraper.usdz",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "lastAccessed": "1587255693450",
        "qrARjsMarkerStorageID": "343df194-e7ae-4c34-adbf-5718542aca37",
        "glbHologramStorageFilename": "Skyscraper.glb"
      },
```

{% endtab %}
{% endtabs %}

## 7. Supported SDKs

This is the structure of the supported SDK array of a single content entry in the database.

{% tabs %}
{% tab title="Object" %}

```
"sdks": [
        true/false,     // Vuforia support
        true/false,     // ARCore support
        true/false,     // ARKit support
        true/false,     // Unity support
        true/false,     // EasyAR support
        true/false,     // Wikitude support
        true/false,     // Kudan support
        true/false,     // WebXR support
        true/false      // AR.JS support
      ],
```

{% endtab %}

{% tab title="Example" %}

```
"sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
```

{% endtab %}
{% endtabs %}


# Queries

Learn how to query for information on the entries of the project.

## Get entries

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>`

This query allows you to retrieve a data set of entries associated with your API key.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                                              |
| ----------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                                            |
| secKey<mark style="color:red;">\*</mark>  | string | Your Secret key. You can disable need to include this key in the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                                       |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                                                  |

{% tabs %}
{% tab title="200 Set of entries successfully retrieved." %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "BRICK_TARGET",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "qrWebXRStorageID": "018b9e20-3b8e-47f8-a19c-eca8dde46137",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="404 Could not find the API key." %}

```
Key '<API_KEY>' not found!
```

{% endtab %}
{% endtabs %}

## Get a specific entry

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY_ID>`

This query allows you to retrieve a specific entry.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| entry<mark style="color:red;">\*</mark>   | string | A specific entry ID.                                                                                                                 |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200 " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "BRICK_TARGET",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "qrWebXRStorageID": "018b9e20-3b8e-47f8-a19c-eca8dde46137",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400 " %}

```
Entry ID '<ENTRY_ID>' not associated with key '<API_KEY>'.
```

{% endtab %}
{% endtabs %}

## Get specific entries

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entries=<ENTRY_ID1>,<ENTRY_ID2>,..`

This query allows you to retrieve specific entries.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| entries<mark style="color:red;">\*</mark> | string | Comma-separated list of entry IDs without spaces                                                                                     |
| secKey                                    | String | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200: OK " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "<TYPE>",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }, "b02cc2f0-3050-4f3a-111e-c8e8b2413b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "<TYPE>",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
Entry ID '<ENTRY_ID1>' not associated with key '<API_KEY>'.
```

{% endtab %}
{% endtabs %}

## &#x20;Get entries based on file

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&filename=<FILENAME>`

This query allows you to retrieve entries that contain a specific file.

#### Query Parameters

| Name                                       | Type   | Description                                                                                                                          |
| ------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>      | string | Your API key.                                                                                                                        |
| filename<mark style="color:red;">\*</mark> | string | A file name, e.g. `myfile.obj`.                                                                                                      |
| secKey                                     | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>    | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark>  | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200 Set of entries successfully retrieved." %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "BRICK_TARGET",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "<FILENAME>",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "qrWebXRStorageID": "018b9e20-3b8e-47f8-a19c-eca8dde46137",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400 " %}

```
No entries found containing a file named '<FILENAME>' associated with key '<API_KEY>'.
```

{% endtab %}
{% endtabs %}

## Get entries based on data

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&data=<DATA>&value=<VALUE>`

This query allows you to retrieve entries that contain a specific data key and value.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                            |
| value                                     | string | A data value, e.g. `2`.                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200 " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "BRICK_TARGET",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "<DATA>": "<VALUE>",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400 " %}

```
Entries with <data, value> pair '<DATA>,<VALUE>' not associated with key '<API_KEY>'.
```

{% endtab %}
{% endtabs %}

## Get entries based on tags

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&tags=<TAG1>,<TAG2>,..`

This query allows you to retrieve entries based on the default ‘tags’ metadata. This query will return any asset whose 'tags' metadata matches *any* of the query parameter filters.&#x20;

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| tags<mark style="color:red;">\*</mark>    | string | Comma-separated list of tags without spaces                                                                                          |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200: OK " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "BRICK_TARGET",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "tags": "<TAG1>",
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{}
```

{% endtab %}
{% endtabs %}

## Get entries based on filters

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&filters=<filter1>,<filter2>,<filter3>,...`

This query allows you to retrieve entries based on the default ‘tags’ metadata. This query will return any asset whose 'tags' metadata matches *all* of the query parameter filters.&#x20;

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | String | Your API key.                                                                                                                        |
| filters<mark style="color:red;">\*</mark> | String | Comma-separated list of filters without spaces                                                                                       |
| secKey                                    | String | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |

## Get entries based on type

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&type=<TYPE>`

This query allows you to retrieve entries that contain a specific type of hologram or target.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                                         |
| ----------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                                       |
| type<mark style="color:red;">\*</mark>    | string | A type of hologram or target. Options: `MODEL_HOLOGRAM`, `VIDEO_HOLOGRAM`, `IMAGE_HOLOGRAM`,`BRICK_TARGET`, `GEOLOCATION_TARGET`, or `IMAGE_TARGET` |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).                |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                                  |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                                             |

{% tabs %}
{% tab title="200 " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b": {
      "id": "b02cc2f0-3050-4f3a-999e-c8e8be9d3b5b",
      "target": {
        "id": "df54c477-8eeb-4530-b989-4cb3cdcd6512",
        "type": "<TYPE>",
        "holograms": [
          "ada1dfd6-0f0e-4606-bde6-fc88a0610466"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "ada1dfd6-0f0e-4606-bde6-fc88a0610466",
        "type": "MODEL_HOLOGRAM",
        "targetID": "df54c477-8eeb-4530-b989-4cb3cdcd6512"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400 " %}

```
Entry type '<TYPE>' not associated with key '<API_KEY>'.
```

{% endtab %}
{% endtabs %}

## Get entries based on timestamp

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&secKey=<SEC_KEY>&userKey=<USER_KEY>&fromTimestamp=<FROM_TIMESTAMP>&toTimestamp=<TO_TIMESTAMP>`

This query allows you to retrieve entries that were uploaded given timestamp parameters. The `fromTimestamp` parameter will return assets that have been uploaded on or after the timestamp. The `toTimestamp` parameter will return assets that have been uploaded on or before the timestamp. You can use `fromTimestamp` and `toTimestamp` together. The returned list is in ascending order based on the time of upload.&#x20;

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| secKey<mark style="color:red;">\*</mark>  | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key. You can retrieve your User Key by clicking the Dev Tools icon in the upper right of the echo3D console.     |
| fromTimestamp                             | number | A timestamp expressed in Unix epoch time to the millisecond.                                                                         |
| toTimestamp                               | number | A timestamp expressed in Unix epoch time to the millisecond.                                                                         |

{% tabs %}
{% tab title="200 " %}
{% code fullWidth="true" %}

```json
[
  {
    "id": "d0b8911e-8309-447c-a191-a430fad22496",
    "target": {
      "id": "3e658b98-5da4-4545-a388-aa55a0791760",
      "type": "BRICK_TARGET",
      "holograms": [
        "d59f5bbc-cccd-4ff0-9954-54ee710a3046",
        "d59f5bbc-cccd-4ff0-9954-54ee710a3046"
      ]
    },
    "hologram": {
      "storageID": "8327004e-b136-41ad-ad34-3be15d76e2e1.dae",
      "id": "d59f5bbc-cccd-4ff0-9954-54ee710a3046",
      "type": "MODEL_HOLOGRAM",
      "targetID": "3e658b98-5da4-4545-a388-aa55a0791760",
      "filename": "Cap.dae"
    },
    "sdks": [
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false
    ],
    "additionalData": {
      "qrWebXRStorageID": "8f46c128-be98-466b-aa88-c686f8d6084f.png",
      "screenshotStorageID": "4279783e-6ab3-48f1-a8fc-6689eaf29536.png",
      "qrARjsStorageFilename": "qr_arjs.png",
      "qrARjsTargetStorageFilename": "qr_arjs.patt",
      "qrARjsMarkerStorageFilename": "marker_qr_arjs.png",
      "qrARjsTargetStorageID": "8b998c81-f8ea-41e9-b974-3f52eee61898",
      "qrWebARStorageID": "d7b8daeb-98b9-45a5-b37d-c18c0b5ac860.png",
      "createdByEmail": "<EMAIL>",
      "createdAt": "1747340785010",
      "qrWebXRStorageFilename": "qr_webxr.png",
      "aiTags": "[\"Clothing\",\"Hardhat\",\"Helmet\",\"Hat\",\"Cap\"]",
      "topRightType": "ar",
      "usdzHologramStorageFilename": "Cap.usdz",
      "lastUpdatedTimestamp": "1747340790624",
      "topRightText": "See in AR ?",
      "filePath": "null",
      "qrFaceARStorageFilename": "qr_facear.png",
      "bottomRightType": "qr",
      "qrFaceARStorageID": "b84f6ef7-8131-48e8-9742-2ba8cacb665e.png",
      "glbHologramStorageID": "34e2e9db-7c88-4044-8c92-15136e57de8a.glb",
      "usdzHologramStorageID": "b34891af-854f-47e2-b3fb-fd7a9ed4a09c.usdz",
      "qrARjsStorageID": "83bc578f-57b4-4801-9497-fc551010df8a.png",
      "lastUpdatedByEmail": "<EMAIL>",
      "storageUsed": "8643189",
      "fileSize": "4910996",
      "lastAccessed": "1747340785010",
      "qrARjsMarkerStorageID": "3665fda5-2958-48ab-9cfa-33b5ff10c2dc.png",
      "screenshotStorageFilename": "Cap.png",
      "glbHologramStorageFilename": "Cap.glb",
      "qrWebARStorageFilename": "qr_webar.png"
    },
    "checksums": [
      "955528ed067d5d6400ba66a763235ba5"
    ]
  },
  {
    "id": "50d680ec-0893-4371-98f6-0c0e8c789aa3",
    "target": {
      "id": "a758fa33-5793-493e-811e-3815967a715e",
      "type": "BRICK_TARGET",
      "holograms": [
        "44f33faa-ceeb-41eb-a903-c3c36bc771b7",
        "44f33faa-ceeb-41eb-a903-c3c36bc771b7"
      ]
    },
    "hologram": {
      "storageID": "87b265c9-c862-4497-bfb5-b38b8255121a.glb",
      "id": "44f33faa-ceeb-41eb-a903-c3c36bc771b7",
      "type": "MODEL_HOLOGRAM",
      "targetID": "a758fa33-5793-493e-811e-3815967a715e",
      "filename": "armor_all.glb"
    },
    "sdks": [
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false
    ],
    "additionalData": {
      "qrWebXRStorageID": "d1db55f9-caf5-40f1-ba69-f241a71614db.png",
      "screenshotStorageID": "0b565683-a2de-4a1d-bd10-4f0d107e1012.png",
      "shortURL": "https://go.echo3d.dev/",
      "qrARjsStorageFilename": "qr_arjs.png",
      "qrARjsTargetStorageFilename": "qr_arjs.patt",
      "qrARjsMarkerStorageFilename": "marker_qr_arjs.png",
      "qrARjsTargetStorageID": "affd2ca3-1dab-4718-9bf9-e236d9672a89",
      "qrWebARStorageID": "cf548e49-04a9-4ef9-93a7-3fb27ae65ec3.png",
      "createdByEmail": "<EMAIL>",
      "createdAt": "1747468270377",
      "qrWebXRStorageFilename": "qr_webxr.png",
      "aiTags": "[\"Bottle\",\"Water Bottle\",\"Shaker\"]",
      "topRightType": "ar",
      "usdzHologramStorageFilename": "armor_all.usdz",
      "lastUpdatedTimestamp": "1747468275670",
      "topRightText": "See in AR ?",
      "filePath": "null",
      "qrFaceARStorageFilename": "qr_facear.png",
      "bottomRightType": "qr",
      "qrFaceARStorageID": "53f109a6-0c46-48af-b785-9c13390b9dc0.png",
      "usdzHologramStorageID": "adda0e8d-9aef-4462-a39c-deb9310d5d5d.usdz",
      "qrARjsStorageID": "239ff656-1348-48ce-81af-506b49ede5a8.png",
      "lastUpdatedByEmail": "<EMAIL>",
      "storageUsed": "20270164",
      "fileSize": "9082380",
      "lastAccessed": "1747468270377",
      "qrARjsMarkerStorageID": "0b4a0ddf-b483-4304-b58f-80e4ec5139c0.png",
      "screenshotStorageFilename": "armor_all.png",
      "qrWebARStorageFilename": "qr_webar.png"
    },
    "checksums": [
      "36920ed56c39a279b32c25fa06d99310"
    ]
  },
  {
    "id": "e5e125a1-5bf2-42ed-9ddb-d702eed9f623",
    "target": {
      "id": "b7b0be5a-c9cf-4638-97b3-80141b495bdb",
      "type": "BRICK_TARGET",
      "holograms": [
        "ff95d7ea-cfcf-463d-b3cb-e39a3bec6a23",
        "ff95d7ea-cfcf-463d-b3cb-e39a3bec6a23"
      ]
    },
    "hologram": {
      "storageID": "346e4c8d-fdfc-4c9b-a8c6-dae1431626a8.glb",
      "id": "ff95d7ea-cfcf-463d-b3cb-e39a3bec6a23",
      "type": "MODEL_HOLOGRAM",
      "targetID": "b7b0be5a-c9cf-4638-97b3-80141b495bdb",
      "filename": "car.glb"
    },
    "sdks": [
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false,
      false
    ],
    "additionalData": {
      "qrWebXRStorageID": "bac926d5-113b-40a9-b429-a9ca2e90f93d.png",
      "screenshotStorageID": "f1289c68-e0e8-4232-ad49-92ea33545b6e.png",
      "shortURL": "https://go.echo3d.dev/",
      "qrARjsStorageFilename": "qr_arjs.png",
      "qrARjsTargetStorageFilename": "qr_arjs.patt",
      "qrARjsMarkerStorageFilename": "marker_qr_arjs.png",
      "qrARjsTargetStorageID": "95699a9c-3786-488c-88c1-622c41955907",
      "qrWebARStorageID": "db4ba9f7-5f6f-4bb5-a37f-c0443b476dca.png",
      "createdByEmail": "<EMAIL>",
      "createdAt": "1747554134022",
      "qrWebXRStorageFilename": "qr_webxr.png",
      "aiTags": "[\"Car\",\"Transportation\",\"Vehicle\",\"Sports Car\"]",
      "topRightType": "ar",
      "usdzHologramStorageFilename": "car.usdz",
      "lastUpdatedTimestamp": "1747554153270",
      "topRightText": "See in AR ?",
      "filePath": "null",
      "qrFaceARStorageFilename": "qr_facear.png",
      "bottomRightType": "qr",
      "qrFaceARStorageID": "54ce3962-76d1-4532-95ca-e208c8f7adf5.png",
      "usdzHologramStorageID": "76682589-51b2-454b-a2c0-ba1fb3b74380.usdz",
      "qrARjsStorageID": "403df553-91a7-4f6f-bdf3-3045cf5132fb.png",
      "lastUpdatedByEmail": "<EMAIL>",
      "storageUsed": "43273937",
      "fileSize": "15511940",
      "lastAccessed": "1747554134022",
      "qrARjsMarkerStorageID": "780b4126-0abc-476a-a7c9-7de0eb6d9f25.png",
      "screenshotStorageFilename": "car.png",
      "qrWebARStorageFilename": "qr_webar.png"
    },
    "checksums": [
      "56c49ea5bdb34c233693973a93725a87"
    ]
  }
]
```

{% endcode %}
{% endtab %}

{% tab title="400 - fromTimestamp parse error" %}
{% code overflow="wrap" %}

```
'fromTimestamp' parameter received cannot be parsed as a number. Epoch time in milliseconds expected.
```

{% endcode %}
{% endtab %}

{% tab title="400 - toTimestamp parse error" %}
{% code overflow="wrap" %}

```
'toTimestamp' parameter received cannot be parsed as a number. Epoch time in milliseconds expected.
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Get entries based on location

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&location=<LAT>,<LONG>&radius=<RADIUS>`

#### Query Parameters

| Name                                       | Type   | Description                                                                                                                                     |
| ------------------------------------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>      | string | Your API key.                                                                                                                                   |
| location<mark style="color:red;">\*</mark> | string | A pair of GPS coordinates in the form of LAT,LONG or a location name that will be converted to GPS coordinates.                                 |
| radius                                     | string | The acceptable distance in miles between the location and the the entry's location. If radius isn't specified, a default 1 mile radius is used. |
| secKey                                     | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).            |
| email<mark style="color:red;">\*</mark>    | string | Your email address                                                                                                                              |
| userKey<mark style="color:red;">\*</mark>  | string | Your authentication key                                                                                                                         |

{% tabs %}
{% tab title="200 " %}

```json
{
  "apiKey": "<API_KEY>",
  "db": {
    "62714211-a573-40ab-9ae2-d2c9aff68c5a": {
      "id": "62714211-a573-40ab-9ae2-d2c9aff68c5a",
      "target": {
        "place": "New York",
        "latitude": 40.776653,
        "longitude": -73.9547,
        "id": "c1cc0e59-3294-459e-a7ce-a9d14cf2dbdd",
        "type": "GEOLOCATION_TARGET",
        "holograms": [
          "038ecebe-9d81-4a3b-aa8b-f33fbf0e1a1b"
        ]
      },
      "hologram": {
        "filename": "Skyscraper.obj",
        "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
        "textureFilenames": [
          "Skyscraper_BaseColor.png"
        ],
        "textureStorageIDs": [
          "f9b43711-cf79-44e5-90c5-ac781c8d9288"
        ],
        "materialFilename": "Skyscraper.mtl",
        "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
        "id": "038ecebe-9d81-4a3b-aa8b-f33fbf0e1a1b",
        "type": "MODEL_HOLOGRAM",
        "targetID": "c1cc0e59-3294-459e-a7ce-a9d14cf2dbdd"
      },
      "sdks": [
        true,
        true,
        false,
        true,
        false,
        false,
        false,
        true,
        true
      ],
      "additionalData": {
        "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475",
        "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
        "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
        "qrARjsTargetStorageID": "e7f058d5-5b66-4f50-8cdd-89f057e8070c",
        "qrARjsStorageID": "7cc6adca-ded1-4a46-a289-c07c07cb2f5c",
        "vuforiaHologramStorageFilename": "Skyscraper.h",
        "qrARjsMarkerStorageID": "5de99f4d-9602-45f0-b5ce-7ef53541cb18",
        "glbHologramStorageFilename": "Skyscraper.glb"
      }
    }
  }
}
```

{% endtab %}

{% tab title="400 " %}

```
No entires located '<RADUIS>' miles around '<LAT,LONG>' associated with key '<API_KEY>'
```

{% endtab %}
{% endtabs %}


# Data

Learn how to post data to the project.

## Get a global data entry

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/get?key=<API_KEY>&data=<DATA>`

This query allows you to get global data entries.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                            |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200 " %}

```
<VALUE>
```

{% endtab %}

{% tab title="400 " %}

```
Invalid request! No data value found in request.
```

{% endtab %}

{% tab title="404 " %}

```
Data not found
```

{% endtab %}
{% endtabs %}

## Post a global data entry

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/post?key=<API_KEY>&email=<EMAIL>&data=<DATA>&value=<VALUE>`

This query allows you to add a global data entry.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | The API key.                                                                                                                         |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                            |
| value<mark style="color:red;">\*</mark>   | string | A data value, e.g. `2`.                                                                                                              |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200 " %}

```
Additional data updated in the global database
```

{% endtab %}

{% tab title="400 " %}

```
Invalid request! No data value found in request.
```

{% endtab %}
{% endtabs %}

## Delete global data entry

<mark style="color:green;">`POST`</mark> `https://api.echo3d.com/remove?key=<API_KEY>&data=<DATA>&email=<EMAIL>`

This query allows you to remove a global data entry.

#### Request Body

| Name                                      | Type   | Description                                                                                                                         |
| ----------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key                                                                                                                        |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                           |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                  |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                             |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key) |

## Get metadata of an entry

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/get?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY>&data=<DATA>`

The query allows you to get metadata of a specific entry.\
You can either query for a specific data key or for all the data associated with the entry.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| entry<mark style="color:red;">\*</mark>   | string | A specific entry ID.                                                                                                                 |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                            |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200 " %}

```
{
    "<KEY_1>": "<VALUE_1>",
    "<KEY_2>": "<VALUE_2>",
    "<KEY_3>": "<VALUE_3>",
    ...
}
```

{% endtab %}

{% tab title="302 " %}

```
<VALUE>
```

{% endtab %}

{% tab title="400 " %}

```
Invalid request! No data value found in request.
```

{% endtab %}

{% tab title="404 " %}

```
Data not found
```

{% endtab %}
{% endtabs %}

## Post metadata to an entry

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/post?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY>&data=<DATA>&value=<VALUE>`

This query allows you to add metadata to a specific entry.

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key                                                                                                                         |
| entry<mark style="color:red;">\*</mark>   | string | A specific entry ID.                                                                                                                 |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                            |
| value<mark style="color:red;">\*</mark>   | string | A data value, e.g. `2`.                                                                                                              |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200 " %}

```
Additional data updated in asset <ENTRY>.
```

{% endtab %}

{% tab title="400 " %}

```
Invalid request! No data value found in request.
```

{% endtab %}
{% endtabs %}

## Delete metadata from an entry

<mark style="color:green;">`POST`</mark> `https://api.echo3d.com/remove?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY>&data=<DATA>`

This query allows you to remove metadata to a specific entry.

#### Request Body

| Name                                      | Type   | Description                                                                                                                         |
| ----------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key                                                                                                                        |
| entry<mark style="color:red;">\*</mark>   | string | A specific entry ID.                                                                                                                |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                           |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                  |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                             |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key) |

{% tabs %}
{% tab title="200: OK " %}

```
Additional data key removed in entry <entry>
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
Invalid request! 
```

{% endtab %}
{% endtabs %}

## Post metadata to a few entries with the same data name at the same time

<mark style="color:green;">`POST`</mark> `https://api.echo3d.com/batchpost?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entries=<ENTRY_IDs>&data=<DATA>&value<ENTRY_VALUES>`

You can set a few entries with the same data name together, even if they have a different value

#### Request Body

| Name                                      | Type   | Description                                                                                                                                                                            |
| ----------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key                                                                                                                                                                           |
| entries<mark style="color:red;">\*</mark> | string | A list of entries to update, separated by a comma (',')                                                                                                                                |
| data<mark style="color:red;">\*</mark>    | string | A data key, e.g. `scale`.                                                                                                                                                              |
| value<mark style="color:red;">\*</mark>   | string | A list of data values, corresponding with the entry IDs, separated by a comma (','). e.g. `2,5,1`. Your number of values must be the same as the number of entries you wish to update. |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                                                                     |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                                                                                |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key)                                                    |

## Query the number of clicks received by custom buttons for WebAR

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&webARButtonClick=true`

#### Request Body

| Name                                               | Type   | Description                                                                                                                          |
| -------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>              | string | Your API key                                                                                                                         |
| webARButtonClick<mark style="color:red;">\*</mark> | string | true, to get the number of clicks                                                                                                    |
| email<mark style="color:red;">\*</mark>            | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark>          | string | Your authentication key                                                                                                              |
| secKey                                             | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200: OK " %}

```json
{
  "topLeftClickCounter": 0,
  "bottomRightClickCounter": 0,
  "centerClickCounter": 0,
  "rightClickCounter": 0,
  "topRightClickCounter": 0,
  "bottomClickCounter": 0,
  "bottomLeftClickCounter": 0,
  "leftClickCounter": 0,
  "topClickCounter": 0
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```
Key <API_KEY> not found!
```

{% endtab %}
{% endtabs %}


# What Metadata is Stored

Learn what metadata is held by default in content entries and is available for you to query.

Aside from [metadata you add](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to each individual content entry, you are also able to query for metadata automatically generated by the platform for each individual content entry.

Different asset types and target types can determine the automatically generated metadata available.

### Any Content Entry

These metadata keys are available for any content entry regardless of the asset type or target type.

| Key                         | Type   | Description                                                                                                                 | Value Example                                       |
| --------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| createdAt                   | Number | Timestamp in UTC format of the time the content was created                                                                 | 1587258208433                                       |
| lastAccessed                | Number | Timestamp in UTC format of the last time the content was accessed                                                           | 1587248667634                                       |
| accessHistory               | Array  | A collection of timestamps in UTC format of the times the content was accessed                                              | \[\\"1587253222904\\"]                              |
| usageByDate                 | Object | A collection of dates in human readable format in which the content was used and a counter of the overall time it was used. | \[{\\"date\\":\\"2020-04-18\\",\\"numUses\\":12.0}] |
| qrWebXRStorageFilename      | String | Filename of a QR image redirecting to a sample WebXR experience that shows this asset                                       | qr\_webxr\_my\_key\_1234.png                        |
| qrWebXRStorageID            | String | Storage ID of a QR image redirecting to a sample WebXR experience that uses this asset                                      | 9d39d3f4-68f5-49ae-a798-903ac249f073                |
| qrARjsStorageFilename       | String | Filename of a QR image redirecting to a sample AR.js experience that shows this asset                                       | qr\_arjs\_my\_key\_1234.png                         |
| qrARjsStorageID             | String | Storage ID of a QR image redirecting to a sample AR.js experience that shows this asset                                     | fd3f4c85-5d47-40ea-a38c-9aeb728f780b                |
| qrARjsTargetStorageFilename | String | Filename of the target file used for a sample AR.js experience that shows this asset                                        | qr\_arjs\_my\_key\_1234.patt                        |
| qrARjsTargetStorageID       | String | Storage ID of the target file used for a sample AR.js experience that shows this asset                                      | ce090285-8b88-4b12-b9d3-da6490298da2                |
| qrARjsMarkerStorageFilename | String | Filename of the image marker file used for a sample AR.js experience that shows this asset                                  | marker\_qr\_arjs\_my\_key\_1234.png                 |
| qrARjsMarkerStorageID       | String | Storage ID of a QR image redirecting to a sample AR.js experience that uses this asset and doubles as a marker              | bb9e8709-a882-49fe-a3d1-9804fa452ba4                |
| source                      | String | Credit attribution to the creator of the asset                                                                              | Skyscraper by Poly by Google, CC-BY                 |

### Specific Asset Types

These metadata keys are available for content entries with specific asset types.

#### Model Assets

| Key                            | Type   | Description                                                      | Value Example                             |
| ------------------------------ | ------ | ---------------------------------------------------------------- | ----------------------------------------- |
| glbHologramStorageFilename     | String | Filename of a .glb version of the 3D model, if such exists       | Skyscraper.glb                            |
| glbHologramStorageID           | String | Storage ID of a .glb version of the 3D model, if such exists.    | d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb  |
| usdzHologramStorageFilename    | String | Filename of a .usdz version of the 3D model, if such exists      | Skyscraper.usdz                           |
| usdzHologramStorageID          | String | Storage ID of a .usdz version of the 3D model, if such exists.   | d686a655-e800-430d-bfd2-e38cdfb0c9e9.usdz |
| vuforiaHologramStorageFilename | String | Filename of a .h version of the 3D model, if such exists         | Skyscraper.h                              |
| vuforiaHologramStorageID       | String | Storage ID of a .h version of the 3D model, if such exists.      | 7068cd74-6c9f-4106-9326-585c56fa4475      |
| shortURL                       | String | A short shareable URL which automatically redirects to the model | <https://go.echo3d.co/24m3>               |

#### Video Assets

| Key    | Type   | Description               | Value Example |
| ------ | ------ | ------------------------- | ------------- |
| height | Number | Height of the video frame | 360           |
| width  | Number | Width of the video frame  | 460           |

#### Image Assets

| Key                      | Type   | Description                                                                             | Value Example                        |
| ------------------------ | ------ | --------------------------------------------------------------------------------------- | ------------------------------------ |
| height                   | Number | Height of the video frame                                                               | 360                                  |
| width                    | Number | Width of the video frame                                                                | 460                                  |
| compressedImageStorageID | String | Storage ID of the compressed version of the image uploaded by the user, if such exists. | d2c42d32-dd13-4541-b446-89dcf8e4bcb4 |

### Specific Target Types

These metadata keys are available for content entries with specific target types.

#### Surface Targets

No additional metadata for surface targets.

#### Location Targets

No additional metadata for location targets.

#### Image Targets

| Key                         | Type   | Description                                                                                    | Value Example                        |
| --------------------------- | ------ | ---------------------------------------------------------------------------------------------- | ------------------------------------ |
| originalImageStorageID      | String | Storage ID of the original image uploaded by the user before being compressed, if such exists. | d2c42d32-dd13-4541-b446-89dcf8e4bcb4 |
| arjsTargetStorageFilename   | String | Filename of the target file used for a sample AR.js experience that shows this asset           | air.patt                             |
| arjsTargetStorageID         | String | Storage name of the target file used for a sample AR.js experience that shows this asset       | f6607f7b-aee2-4cc8-87e1-97be5a6c36a6 |
| arcoreTargetStorageFilename | String | Filename of the target file used for a sample AR.js experience that shows this asset           | air.imgdb                            |
| arcoreTargetStorageID       | String | Storage ID of the target file used for a sample AR.js experience that shows this asset         | 420c746a-34e3-4535-b9ba-a4c14b4cc881 |
| arjsMarkerStorageFilename   | String | Filename of the image marker file used for a sample AR.js experience that shows this asset     | marker\_air.png                      |
| arjsMarkerStorageID         | String | Storage ID of the image marker file used for a sample AR.js experience that shows this asset   | 440c117a-5b11-4380-8d1d-6d54d3889c08 |
| vuforiaTargetID             | String | Target ID of the image used by Vuforia Cloud Recognition                                       | 6309204a74d842a8b 6917e6aef743088    |


# Upload

Learn how to upload assets with a query.

## Upload content entry

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/upload`

This endpoint allows you to upload or edit assets.

#### Headers

| Name         | Type   | Description                                              |
| ------------ | ------ | -------------------------------------------------------- |
| Content-Type | string | Use `multipart/form-data` when uploading multiple files. |

#### Request Body

<table><thead><tr><th width="174">Name</th><th width="162">Type</th><th>Description</th></tr></thead><tbody><tr><td>key<mark style="color:red;">*</mark></td><td>string</td><td>Target collection key eg <code>some-words-1234</code></td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>Your email address</td></tr><tr><td>userKey<mark style="color:red;">*</mark></td><td>string</td><td>Your authentication key</td></tr><tr><td>file<mark style="color:red;">*</mark></td><td>binary</td><td>The asset file associated with your request. Not required if using <code>url</code></td></tr><tr><td>url<mark style="color:red;">*</mark></td><td>string</td><td>The source url for the asset or AR target file. Not required if using <code>file</code></td></tr><tr><td>target_type</td><td>integer</td><td>AR target type, defaults to <code>2</code> (BRICK / no target) if not specified. Options: <code>0</code> for <code>IMAGE_TARGET</code>, <code>1</code> for <code>GEOLOCATION_TARGET</code>, or <code>2</code> for <code>BRICK_TARGET</code><strong>.</strong> See additional info about AR targets below. </td></tr><tr><td>data</td><td>string</td><td>A string representing metadata to add to the uploaded content. Format: <code>key1:value1;key2:value2;...</code></td></tr><tr><td>secKey</td><td>string</td><td>Collection Security Key. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>allowDuplicate</td><td>boolean</td><td>Set to <code>true</code> to allow duplicate uploads. Duplicates are detected via an md5 checksum of the uploaded file</td></tr><tr><td>noProcessingWait</td><td>boolean</td><td>By default, Server waits up to 5 minutes for asset processing to complete before responding with complete asset object data. Include <code>noProcessingWait=true</code> in your request to prompt server to respond with basic asset data when asset is first saved to your collection. Processing times vary according to file size, platform load and asset format. Includes conversions to web-friendly formats and 3D model screenshots.</td></tr></tbody></table>

{% tabs %}
{% tab title="200 Content successfully uploaded." %}

```
{
  "id": "3b020b06-9ba1-42f1-87e7-eec3b33617c0",
  "target": {
    "id": "147fdbe5-2724-44ed-b6ec-31ae8bbbe50a",
    "type": "BRICK_TARGET",
    "holograms": [
      "bca5895d-29c6-4e74-b843-a014bdb0962c"
    ]
  },
  "hologram": {
    "filename": "Skyscraper.obj",
    "storageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9",
    "textureFilenames": [
      "Skyscraper_BaseColor.png"
    ],
    "textureStorageIDs": [
      "f9b43711-cf79-44e5-90c5-ac781c8d9288"
    ],
    "materialFilename": "Skyscraper.mtl",
    "materialStorageID": "891d0b32-4f4b-4f7d-a2e2-d5922611928d",
    "id": "bca5895d-29c6-4e74-b843-a014bdb0962c",
    "type": "MODEL_HOLOGRAM",
    "targetID": "147fdbe5-2724-44ed-b6ec-31ae8bbbe50a"
  },
  "sdks": [
    true,
    true,
    false,
    true,
    false,
    false,
    false,
    true,
    true
  ],
  "additionalData": {
    "accessHistory": "[\"1586222284478\"]",
    "createdAt": "1586222284478",
    "glbHologramStorageFilename": "Skyscraper.glb",
    "glbHologramStorageID": "d686a655-e800-430d-bfd2-e38cdfb0c9e9.glb",
    "lastAccessed": "1586222284478",
    "qrARjsMarkerStorageFilename": "marker_qr_arjs_blue-water-4646.png",
    "qrARjsMarkerStorageID": "5d8dc812-12ba-43a6-b00d-6f199bde16ce",
    "qrARjsStorageFilename": "qr_arjs_blue-water-4646.png",
    "qrARjsStorageID": "f32c0d9f-15b9-45b6-9371-630384ad588f",
    "qrARjsTargetStorageFilename": "qr_arjs_blue-water-4646.patt",
    "qrARjsTargetStorageID": "18e93bb9-a535-4764-94a4-6d6e5a16e260",
    "qrWebXRStorageFilename": "qr_webxr_blue-water-4646.png",
    "qrWebXRStorageID": "fbd798e7-fc13-43cd-bc9d-cfa0df1aabb6",
    "source": "Skyscraper by Poly by Google, CC-BY, https://poly.google.com/view/dIsZyy2FUY-",
    "vuforiaHologramStorageFilename": "Skyscraper.h",
    "vuforiaHologramStorageID": "7068cd74-6c9f-4106-9326-585c56fa4475"
  }
}
```

{% endtab %}

{% tab title="400 Could not find an API key in this query." %}

```
Key '<API_KEY>' not found!
```

{% endtab %}

{% tab title="200 Processing Timeout" %}
{% code fullWidth="true" %}

```
Processing did not complete in expected time. Your file was queued sucessfully and added to your collection. Please check back later or contact support if the issue persists.
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Target Type

&#x20;Target types can be one of the following:

### `0` for `IMAGE_TARGET`&#xD;

If you choose to use an image as your AR target, **you must also add** to your request **one** of the following:

* `url_image`: A URL to the image you want to use as a target
* `file_image`: The image file you want to use as a target. The file will be uploaded as Part.

### `1` for `GEOLOCATION_TARGET`&#xD;

A location target must be associated with a location. You must either send an address **or** send location coordinates (longitude and latitude):

* `text_geolocation`: Address for the location.
* `longitude` and `latitude`: Longitude and latitude coordinates

### `2` for `BRICK_TARGET`&#xD;

A surface target; needs no additional arguments.

## Examples

Here are a few upload API examples using [Postman](https://www.postman.com/).

1. Uploading an asset from a url

![](/files/KbPqQX8VFnyL7Xkaxl3i)

2. Uploading an asset from a local file on your PC

<figure><img src="/files/ERh6npbQlfjca4eXGpPw" alt=""><figcaption></figcaption></figure>

3. Uploading a model asset on a brick target from a third-party search engine:

* `type` is `search`, `source` is `Sketchfab`, and `url` includes an URL redirecting to the model
* `hologram_type` is `2`
* `target_type` is `2`

![](/files/-MXridEXTDqzgH9RJ8qG)

## Uploading with Metadata

You can attach a **.csv** file that contains pairs of keys and values to the Upload API call to be added alongside the uploaded asset as data entries. Your request **must include**:

* `file_csv` that includes a file

Your metadata file should contain only two columns: one for **keys** and the second for **values**.

<figure><img src="/files/-M9tGmk4Iq5L5lD0G009" alt=""><figcaption></figcaption></figure>

Here is a sample file you can use:

{% file src="/files/-M9tGw0oesRNMKmCPf0\_" %}

## Overwrite or Edit an Existing Entry

You can overwrite or edit an existing entry that was previously uploaded by using the upload API with a few additional parameters. Your request **must include**:

* `edit_type` that included the type of edit to make: `hologram` or `target.`
* `entryId` that included the Entry ID of the existing Entry to overwrite.

## Batch Upload

If you would like to upload many assets at once, the following repository allows for customized batch uploads via a Python script and a CSV data file. Click [here](https://github.com/echo3Dco/echo3D-Batch-Upload-script) to access the repository on GitHub.

{% embed url="<https://github.com/echo3Dco/Echo3D_upload_script>" %}


# Download

Learn how to download assets with a query.

## Download file via Storage ID

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/query?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&file=<FILE_STORAGE_ID>`

This query allows you to download a file stored in the system. Asset file storage IDs can be obtained by querying the asset data as shown in the [Queries](/api/queries) section.&#x20;

#### Query Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| file<mark style="color:red;">\*</mark>    | string | The file storage ID.                                                                                                                 |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey                                    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |

{% tabs %}
{% tab title="200 The file will start downloading." %}

```
N/A
```

{% endtab %}
{% endtabs %}

## Download specific file format for an entry

<mark style="color:blue;">`POST`</mark>`https://api.echo3D.com/download`

This query allows you to download a file of a specified format for a given asset. If the format for an asset does not exist, the request can optionally trigger the conversion and wait for the system to generate and return the file in the requested format.&#x20;

#### Request Parameters

All parameters must be included as form data with matching content type header `Content-Type: application/x-www-form-urlencoded`

<table><thead><tr><th width="172">Name</th><th width="132">Type</th><th>Description</th></tr></thead><tbody><tr><td>key<mark style="color:red;">*</mark></td><td>string</td><td>Your API key.</td></tr><tr><td>entryId<mark style="color:red;">*</mark></td><td>string</td><td>Asset's entry id</td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>Your email</td></tr><tr><td>userKey<mark style="color:red;">*</mark></td><td>string</td><td>Your authentication key</td></tr><tr><td>secKey</td><td>string</td><td>Your Secret key. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>fileFormat</td><td>string</td><td>Target file format version of the you would like to download. Request may be rejected if the target asset does not support the conversion (eg, requesting a <code>glb</code> for a <code>pdf</code> asset). Omit this parameter to download the original version of the asset uploaded. Example: <code>glb</code> </td></tr><tr><td>convertMissing</td><td>string</td><td>Set to "true" to attempt to convert the file if the target format version does not already exist. Note that the converted files will count for storage and bandwidth used in your subscription. The API will wait for the conversion to finish to respond. Conversion times can be long (>5m) for large or complex models.</td></tr></tbody></table>

{% tabs %}
{% tab title="302: The file will start downloading" %}

{% endtab %}
{% endtabs %}


# Delete

Learn how to delete assets with a query.

## Delete an entry

<mark style="color:blue;">`POST`</mark>`https://api.echo3d.com/delete?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY_ID>`

#### Path Parameters

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | String | Your API key                                                                                                                         |
| email<mark style="color:red;">\*</mark>   | String | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | String | Your authentication key                                                                                                              |
| entry<mark style="color:red;">\*</mark>   | String | Entry ID to delete                                                                                                                   |
| entries                                   | String | Coma separated Entry IDs to delete                                                                                                   |
| folderPath                                | String | Folder to delete                                                                                                                     |
| secKey                                    | String | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |


# Entry Hierarchy

Learn how to add an entry as a child or parent of another entry

## Add an entry as a child or parent to another entry

<mark style="color:blue;">`GET`</mark> `https://api.echo3d.com/hierarchy?key=<API_KEY>&email=<EMAIL>&userKey=<USER_KEY>&entry=<ENTRY_ID>&operation=<OPERATION>&relatedToEntryId=<RELATED_TO_ENTRY_ID>`

#### Path Parameters

| Name                                               | Type   | Description                                                                                                                          |
| -------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>              | string | Your API key                                                                                                                         |
| entryId<mark style="color:red;">\*</mark>          | string | Entry ID to add either a Child or Parent to                                                                                          |
| email<mark style="color:red;">\*</mark>            | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark>          | string | Your authentication key                                                                                                              |
| operation<mark style="color:red;">\*</mark>        | string | Either addParent or addChild                                                                                                         |
| relatedToEntryId<mark style="color:red;">\*</mark> | string | The Entry ID of the entry to be added as a Child or Parent                                                                           |
| secKey                                             | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |


# Convert & Compress

Learn how to convert assets with a query.

## Convert or Compress a 3D asset

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/convertCompress`

This endpoint allows you to convert or compress a 3D model.

#### Request Body

| Name                                         | Type   | Description                                                                                                                                                                              |
| -------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>        | string | Your API key.                                                                                                                                                                            |
| email<mark style="color:red;">\*</mark>      | string | Your email address                                                                                                                                                                       |
| userKey<mark style="color:red;">\*</mark>    | string | Your authentication key                                                                                                                                                                  |
| conversion<mark style="color:red;">\*</mark> | string | The target file format. Options: `obj`, `fbx`, `gltf`, `glb`, `usdz,` `stl`                                                                                                              |
| compression\*                                | string | The target compression. Options: `draco`, `ultimate`, `reduce` (PolyReduce), `resize`                                                                                                    |
| ratio                                        | string | For `reduce`  (ex: `reduce=10` to reduce model polygons by 10%) and `resize` (ex: `resize=50` to rescale the model to 50% of original                                                    |
| entryId<mark style="color:red;">\*</mark>    | string | Collection asset to be converted or compressed. If not provided, request is assumed to be discrete file and will return PUT url for uploading (See discrete file request section below)  |
| downloadFile                                 | string | By default, conversions are saved to the asset and compressions are returned as files. Set this to `true` for a conversion result to also be returned by the request as a file download. |
| secKey                                       | string | Your Secret key. Required if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).                                                 |
| gltftransform                                | string | The `gltf-transform` command to run (list of commands can be found [here](https://gltf-transform.donmccurdy.com/cli.html)).                                                              |
| filename\*                                   | string | Required for discrete file requests, the name of the file including extension, eg `cat.glb`                                                                                              |
| fileId                                       | string | For discrete file requests                                                                                                                                                               |

{% tabs %}
{% tab title="200 Obtain a Presigned Url" %}

```
{
    url: "https://"
    fileId: 1231-123145-12313-123123
}
```

{% endtab %}

{% tab title="200 Obtain jobId " %}
`some-uuid-here-1234`
{% endtab %}

{% tab title="200 Obtain Download Url" %}
`https://`
{% endtab %}
{% endtabs %}

## Discrete File Request Flow

For compression and conversion on files that are not a part of your collection.

1. Send a POST request as outlined above, omitting `entryId` but including a `filename`. A successful request will return `200 OK` and a JSON object containing a PUT `url` and a `fileId` :
   1. ```
      {
          url: "https://"
          fileId: 1231-123145-12313-123123
      }
      ```
2. Use the PUT `url` to upload your file
3. When your upload is complete, add a `fileId` parameter with the value from the response in step (1)  to your request and send it again. A successful response will return a string  `jobId`&#x20;
4. Replace the `fileId` parameter with the key `jobId`, and its value containing the `jobId` returned in the response from your previous request. Send it once more. When the operation is complete, the server will return a url to download your file. It may take several minutes for a url to become available for larger files.


# Compress

Learn how to compress assets with a query.

## ​Compress a 3D asset

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/compress`

This endpoint allows you to compress a 3D model.

#### Request Body

| Name                                               | Type    | Description                                                                                                                                                                      |
| -------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>              | string  | Your API key.                                                                                                                                                                    |
| email<mark style="color:red;">\*</mark>            | string  | Your email address                                                                                                                                                               |
| userKey<mark style="color:red;">\*</mark>          | string  | Your authentication key                                                                                                                                                          |
| hologramFileType<mark style="color:red;">\*</mark> | string  | A type of hologram. Only `2` form `MODEL_HOLOGRAM` is supported.                                                                                                                 |
| ratio                                              | number  | A value between 0 to 1 that represents the compression ratio where 1 the original model and 0 is an empty model. For example, `0.3`. Default is `1`.                             |
| fileToCompress                                     | string  | The model file to compress. Supported formats include .obj, .fbx, .gltf, and .glb.                                                                                               |
| compressGlb                                        | boolean | True if the output file should go through lossless compression which dramatically reduces file size but only supports a .glb output and selected 3D players. Default is `false`. |
| gltfpack                                           | boolean | True if the output should include an optimize version of the file using `glftpack`. Default is `false`.                                                                          |
| tags                                               | string  | Command-line parameters for `gltfpack`. Only `cc` (produce compressed output) and `tc` (compress textures) are supported. Use `cc,tc` to include both.                           |
| modelName                                          | string  | The name to set for the output file.                                                                                                                                             |
| modelId                                            | string  | The entry ID of the model file to compress.                                                                                                                                      |
| resize                                             | boolean | True if the output file should be resized. Default is `false`.                                                                                                                   |
| gltftransform                                      | string  | The `gltf-transform` command to run (list of commands can be found [here](https://gltf-transform.donmccurdy.com/cli.html)).                                                      |
| secKey                                             | string  | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).                                             |
| ultimateCompress                                   | boolean | True if the output should include an optimize version of the file using echo3D Ultimate Compression. Default is `false`.                                                         |

{% tabs %}
{% tab title="200 The compressed file will start downloading." %}

```
N/A
```

{% endtab %}
{% endtabs %}

![](/files/-MdxPZLpWdVvtR22r3rw)

## Action Descriptions and Priority

### 1. Resizing

If a Compress API call is sent with `resize=true`,the model will be resized based on the `ratio` value given.

### 2. Polygon Reduction

If a Compress API call is sent with no `resize` parameter or with `resize=false`, the model will be decimated (poly reduced) based on the `ratio` value given.

### 3. echo3d Ultimate Compression

If a Compress API call is sent with no `resize` parameter or with `resize=false` and `ultimateCompress=true`, the model will go through extensive compression which dramatically reduces file size. When compressing a file directly (not an entry), only .gltf and .glb files are supported. Only supports a .glb output and works with selected 3D players. Note that this compression may be lossy.

### 4. Draco Compression

If a Compress API call is sent with no `resize` parameter or with `resize=false` and `compressGlb=true`, the model will go through lossless Draco compression which reduces file size. Only supports a .glb output and works with selected 3D players.

### 5. gltfpack

If a Compress API call is sent with no `resize` parameter or with `resize=false`, no `compressGlb` parameter or `compressGlb=false`, and `gltfpack=true`, the model will be  optimized using the `glftpack` tool. You should send the file (in `.gltf` or `.glb` format) using the fileToCompress parameter, or the entry ID or the Poly model ID using the `modelId` parameter. You can also add command-line parameters for `gltfpack`:

* `cc` to produce a compressed output.
* `tc` to compress textures.

### 6. gltf-transform

If a Compress API call is sent with no `resize` parameter or with `resize=false`, no `compressGlb` parameter or `compressGlb=false`, and `gltfpack=false`, the model will be  optimized using the `gltf-transform` tool. You should set the gltf-transform parameter as the command to run with `gltftransform=<COMMAND>` (list can be found [here](https://gltf-transform.donmccurdy.com/cli.html)), and send the file (in `.gltf` or `.glb` format) using the fileToCompress parameter. You can also add command-line parameters for `gltftransform`, for example:

* `gltftransform` set to `resize`.
* `width` set to `256`.
* `height` set to `256`.


# Organize

The Organize API can help you move assets into folders easily within your project.

## Move an entry or entries to a folder

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/organize`

This endpoint allows you to move entries into a folder

#### Request Body

| Name                                         | Type   | Description                                                                                                                             |
| -------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>        | string | Your API key.                                                                                                                           |
| email<mark style="color:red;">\*</mark>      | string | Your email address                                                                                                                      |
| userKey<mark style="color:red;">\*</mark>    | string | Your authentication key                                                                                                                 |
| entries<mark style="color:red;">\*</mark>    | string | A list of specific entry IDs separated by a comma.                                                                                      |
| folderPath<mark style="color:red;">\*</mark> | string | Path of the folder you wish to move the entries into. e.g. `example\folder`. If left empty, the assets will move to the root directory. |
| secKey                                       | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).    |

Please note that if you are sending request parameters as query string, you will need to encode **folderPath** value. Encoding will not be necessary if the parameters are sent in the body as FormData.

{% tabs %}
{% tab title="200 Update successful" %}

```
N/A
```

{% endtab %}

{% tab title="400: Bad Request error" %}

```
The following entries could not be found: ...
```

{% endtab %}
{% endtabs %}


# Version

Learn how to save the location of a user accessing a content entry.

## Get asset versions

<mark style="color:green;">`GET`</mark> `https://api.echo3d.com/versionControl`

This endpoint allows you to retrieve information on the different versions of an asset entry.

#### Request Body

| Name                                        | Type   | Description                                                                                                                          |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>       | string | Your API key.                                                                                                                        |
| entryId                                     | string | The entry ID of the content entry being accessed.                                                                                    |
| operation<mark style="color:red;">\*</mark> | string | The operation to be executed. Options: `query`, `queryAll`, `revert`, `editComment`, `deleteVersion`                                 |
| versionId                                   | string | The version to execute the operation on. Applies to the `revert`, `editComment`, `deleteVersion` operations                          |
| comment                                     | string | The comment to set to the version. Applies to the `editComment` operation.                                                           |
| secKey<mark style="color:red;">\*</mark>    | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>     | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark>   | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200 The location will be saved an associated with the entry" %}

```
N/A
```

{% endtab %}
{% endtabs %}

## Operations

* `query`: Get information on all asset versions. Your request **must include**:
  * `entryId`:  The ID of the asset version to query.
* `queryAll`:  Get information on versions of all assets in a collection.
* `revert`: Set a previous asset version as the latest version. Your request **must include**:
  * `versionId`: The ID of the asset version to revert to.
* `editComment`: Add or update a comment on a specific asset version. Your request **must include**:
  * `versionId`: The ID of the asset version to comment on.
  * `comment`: The comment to add.
* `deleteVersion`: Remove a specific asset version from the database. Your request **must include**:
  * `versionId`: The ID of the asset version to delete.


# Asset Status

All assets can be assigned a status to communicate and track progress across teams.

<figure><img src="/files/1ArXo1NNE2AW5sfmvzd0" alt=""><figcaption></figcaption></figure>

## Set Asset Status

<mark style="color:green;">`PUT`</mark> `https://api.echo3d.com/versionStatus`

#### Request Body

| Name                                            | Type   | Description                                                                                                                                                |
| ----------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>           | string | Your API key.                                                                                                                                              |
| entryId<mark style="color:red;">\*</mark>       | string | The entry ID of the content entry being accessed.                                                                                                          |
| versionStatus<mark style="color:red;">\*</mark> | string | Any string  value denoting the status, eg `Approved`                                                                                                       |
| secKey<mark style="color:red;">\*</mark>        | string | Your collection's secret key. Required only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>         | string | Your email address                                                                                                                                         |
| userKey<mark style="color:red;">\*</mark>       | string | Your user authentication key                                                                                                                               |

When setting a status, the success server response will always include the asset permission state.

{% tabs %}
{% tab title="200 Asset Unlocked (Default)" %}

```
open
```

{% endtab %}

{% tab title="200 Asset Locked" %}

```
closed
```

{% endtab %}
{% endtabs %}

## Asset Lock via Status Update

The status you set for your asset can be any string. If the status string exactly matches (case-sensitive) either of status strings below, the asset will be locked. This closes the individual asset's permissions and preventing any edits until the asset is unlocked by an admin:

```
Approved
```

```
Released
```

## Clear Asset Status

<mark style="color:red;">`DELETE`</mark> `https://api.echo3d.com/versionStatus`

#### Request Body

| Name                                      | Type   | Description                                                                                                                                                |
| ----------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                                              |
| entryId<mark style="color:red;">\*</mark> | string | The entry ID of the content entry being accessed.                                                                                                          |
| secKey<mark style="color:red;">\*</mark>  | string | Your collection's secret key. Required only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                                         |
| userKey<mark style="color:red;">\*</mark> | string | Your user authentication key                                                                                                                               |

{% tabs %}
{% tab title="200 OK" %}
No Response Content
{% endtab %}
{% endtabs %}

If the asset was locked with a `Approved` or `Released` status, the deletion request will also unlock the asset.&#x20;


# Locate

Learn how to save the location of a user accessing a content entry.

## Save a location

<mark style="color:green;">`POST`</mark> `https://api.echo3D.com/location`

This endpoint allows you to save the location from where a query is made or the location of the user.

#### Request Body

| Name                                      | Type   | Description                                                                                                                          |
| ----------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>     | string | Your API key.                                                                                                                        |
| email<mark style="color:red;">\*</mark>   | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark> | string | Your authentication key                                                                                                              |
| secKey<mark style="color:red;">\*</mark>  | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| entryID<mark style="color:red;">\*</mark> | string | The entry ID of the content entry being accessed.                                                                                    |
| lat<mark style="color:red;">\*</mark>     | string | The latitude coordinate of the device accessing the content entry.                                                                   |
| long<mark style="color:red;">\*</mark>    | string | The longitude coordinates of the device accessing the content entry.                                                                 |
| countryCode                               | object | The two-letter country code of the location of the device accessing the content entry.                                               |

{% tabs %}
{% tab title="200 The location will be saved an associated with the entry" %}

```
N/A
```

{% endtab %}
{% endtabs %}

**This API query must include a location.** You must either send location coordinates (longitude and latitude) **or** a [two-letter country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).


# Search

Learn how to search for 3D models from 3rd party 3D search engines.

We integrated 3rd party APIs into a single useful search query for you to retrieve free and paid 3D models, videos, and images. We work with top 3D and 2D content aggregators:

1. [Google Poly](/3d-content/google-poly)
2. [Sketchfab](https://sketchfab.com/)
3. [Twinverse](https://twinverse.soreal.ch/) by SO REAL
4. [Unsplash](https://unsplash.com/)
5. [Pexels](https://www.pexels.com/)
6. [Alpha3D](https://www.alpha3d.io/partners/)
7. [Objaverse](https://objaverse.allenai.org/)
8. [TurboSquid](https://www.turbosquid.com/) (coming soon!)
9. [Clara.io](https://clara.io/) (coming soon!)
10. [Thangs](https://www.thangs.com) (coming soon!)
11. [Poly Haven](https://polyhaven.com/) (coming soon!)

## Get 3D models (limited)

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/search?key=<API_KEY>&keywords=<KEYWORDS>`

This query allows you to retrieve free 3D models from a limited collection through 3rd party search engines.

#### Query Parameters

| Name                                       | Type   | Description                                                                                                                          |
| ------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| key<mark style="color:red;">\*</mark>      | string | Your API key.                                                                                                                        |
| keywords<mark style="color:red;">\*</mark> | string | Keywords to search for.                                                                                                              |
| secKey<mark style="color:red;">\*</mark>   | string | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key). |
| email<mark style="color:red;">\*</mark>    | string | Your email address                                                                                                                   |
| userKey<mark style="color:red;">\*</mark>  | string | Your authentication key                                                                                                              |

{% tabs %}
{% tab title="200 Search response for the keyword animals." %}

```
[
  {
    "source": "Poly",
    "htmlID": "Elephant",
    "author": "Alex ?SAFFY? Safayan",
    "name": "Elephant",
    "thumbnail": "https://lh3.googleusercontent.com/WFavKRPBkQkYfza9vtanG5Yr02zBZOxt2Dgjr8QyYAWjnxtF6DSig5JS_oQorPQ",
    "gltf_url": "https://poly.googleapis.com/downloads/fp/1586039870059046/eGI3RS52kJA/65zTBuXeSbh/Elephant.gltf",
    "bin_url": "https://poly.googleapis.com/downloads/fp/1586039870059046/eGI3RS52kJA/65zTBuXeSbh/Elephant.bin"
  },
  {
    "source": "Sketchfab",
    "id": "c578c8c12a984e79a6d958a90f86cdc8",
    "htmlID": "Tot-anirà-bé",
    "author": "dimoni",
    "name": "Tot anirà bé",
    "thumbnail": "https://media.sketchfab.com/models/c578c8c12a984e79a6d958a90f86cdc8/thumbnails/f260ae837440436287abef466fe392f8/4b45b9a4dc994f01b05487d0d7fe6d3a.jpeg",
    "url": "https://api.sketchfab.com/v3/models/c578c8c12a984e79a6d958a90f86cdc8/download"
  },
  {
    "source": "Poly",
    "htmlID": "Cow",
    "author": "Poly by Google",
    "name": "Cow",
    "thumbnail": "https://lh3.googleusercontent.com/tMbfIKqyQ-kN2-auLiEnWSqmZRnRBNXntP_m9iKqiRNKjYQrFpy33pKCNucg6MSP",
    "gltf_url": "https://poly.googleapis.com/downloads/fp/1586039818449312/0OToIgkcVM7/48loxcU-Obv/Cow.gltf",
    "bin_url": "https://poly.googleapis.com/downloads/fp/1586039818449312/0OToIgkcVM7/48loxcU-Obv/Cow.bin",
    "png_url": "https://poly.googleapis.com/downloads/fp/1586039818449312/0OToIgkcVM7/48loxcU-Obv/Cow_BaseColor.png"
  },
  {
    "source": "Poly",
    "htmlID": "Ferret",
    "author": "Poly by Google",
    "name": "Ferret",
    "thumbnail": "https://lh3.googleusercontent.com/1pYiy69FLx6WZ2HT75sfIhPfuTmuV2w4iHKLKr_WXxY7Kuqxq3dZroHPhtcl6c0",
    "gltf_url": "https://poly.googleapis.com/downloads/fp/1585993578585478/4I1SBFHWuSo/4KoNOiNyj3s/Ferret.gltf",
    "bin_url": "https://poly.googleapis.com/downloads/fp/1585993578585478/4I1SBFHWuSo/4KoNOiNyj3s/Ferret.bin",
    "png_url": "https://poly.googleapis.com/downloads/fp/1585993578585478/4I1SBFHWuSo/4KoNOiNyj3s/Ferret_BaseColor.png"
  },
  {
    "source": "Sketchfab",
    "id": "a573d7c272c543e0b9cabdfdd6d0da0a",
    "htmlID": "Lady-with-animal---Stone-statue---Bratislava",
    "author": "winky1404",
    "name": "Lady with animal - Stone statue - Bratislava",
    "thumbnail": "https://media.sketchfab.com/models/a573d7c272c543e0b9cabdfdd6d0da0a/thumbnails/e5fedd2429af48e8bd6cc0842a3375ce/2df493213cb14320a60edbc732ffba89.jpeg",
    "url": "https://api.sketchfab.com/v3/models/a573d7c272c543e0b9cabdfdd6d0da0a/download"
  }
]
```

{% endtab %}
{% endtabs %}

## Get 3D models (advanced)

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/search?key=<API_KEY>&keywords=<KEYWORDS>`

This query allows you to retrieve free and paid 3D model from our full collection which included 3rd party search engines.

#### Query Parameters

| Name                                       | Type    | Description                                                                                                                                                               |
| ------------------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| key<mark style="color:red;">\*</mark>      | string  | Your API key.                                                                                                                                                             |
| secKey<mark style="color:red;">\*</mark>   | string  | Your Secret key. Only if enabled through the [Security page](/web-console/manage-pages/collections-and-sharing/security#secret-key).                                      |
| email<mark style="color:red;">\*</mark>    | string  | Your email                                                                                                                                                                |
| userKey<mark style="color:red;">\*</mark>  | string  | Your authentication key                                                                                                                                                   |
| keywords<mark style="color:red;">\*</mark> | string  | Keywords to search for.                                                                                                                                                   |
| id                                         | string  | Search for a specific result based on ID.                                                                                                                                 |
| source                                     | string  | Filter search results to only include results from a specific source. Options: `poly`, `sketchfab`, `objaverse`, and `soreal`.                                            |
| minPoly                                    | integer | Filter search results to only include results with this minimal triangle count.                                                                                           |
| maxPoly                                    | integer | Filter search results to only include results with this maximal triangle count.                                                                                           |
| maxResults                                 | integer | Filter search result to only include this amount of results.                                                                                                              |
| gltfpack                                   | boolean | True if the search results should include a URL to a optimized glTF version of the result using the gltfpack tool. Default is `false`. Only applies for supported models. |
| include2Dcontent                           | boolean | True if the search results should include 2D images and videos. Default if `false`.                                                                                       |

{% tabs %}
{% tab title="200 " %}

```
[
  {
    "source": "poly",
    "id": "8p-ZWYlJMnH",
    "name": "CAT",
    "author": "IDI Shopping",
    "license": "CREATIVE_COMMONS_BY",
    "price": "0.0",
    "glb_location_url": "https://storage.echoar.xyz/.../CAT.glb",
    "glb_gltfpack_creation_url": "https://console.echoar.xyz/...",
    "gltf_location_url": "https://storage.echoar.xyz/...",
    "gltf_gltfpack_creation_url": "https://console.echoar.xyz/...",
    "gltf_bin_url": "https://storage.echoar.xyz/...",
    "gltf_textures": "https://storage.echoar.xyz/...|https://storage.echoar.xyz/...",
    "thumbnail": "https://storage.echoar.xyz/...",
    "gltf_triangle_count": "33968"
  },

  ...
  
] 
```

{% endtab %}
{% endtabs %}

{% hint style="success" %}
The Advance Search API is available in the [Pro](https://www.echo3d.com/pricing) and [Custom](mailto:sales@echo3D.com) plans.
{% endhint %}


# Search by Image or Model

Learn how to search for assets across your collections via image or model.

## Get similar 3D models and images based on a search image

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/imageSearch?key=<API_KEY>&keys=<API_KEYS>&file=<IMAGE_BINARY>`

This query allows you to retrieve similar 3D models and image assets  across a list of collections that match the associated search image file.

#### Query Parameters

<table><thead><tr><th>Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td>key<mark style="color:red;">*</mark></td><td>string</td><td>Your API key.</td></tr><tr><td>secKey<mark style="color:red;">*</mark></td><td>string</td><td>Your Secret key. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>Your email address</td></tr><tr><td>userKey<mark style="color:red;">*</mark></td><td>string</td><td>Your authentication key</td></tr><tr><td>keys<mark style="color:red;">*</mark></td><td>string</td><td><p>A comma separated string of API keys.</p><p></p><p>The collection associated with each API key will be searched through to find assets that match the input search image.</p></td></tr><tr><td>file<mark style="color:red;">*</mark></td><td>binary</td><td>The search image file. Must be of type .jpg, .jpeg, or .png. </td></tr><tr><td>threshold</td><td>float</td><td>The minimum similarity score an asset must have to be included in the response. Value must be between 0 and 1, where 0 is least similar and 1 is most similar. When this value is not included, it defaults to 0.5.</td></tr><tr><td>getScore</td><td>boolean</td><td>If true, the similarity score of each asset will be returned in the response.</td></tr></tbody></table>

{% tabs %}
{% tab title="200 Search response" %}
Request:

<table><thead><tr><th width="131">Name</th><th>Value</th></tr></thead><tbody><tr><td>key</td><td><pre><code>late-sea-5767
</code></pre></td></tr><tr><td>secKey</td><td>&#x3C;YOUR-SEC-KEY></td></tr><tr><td>userKey</td><td>&#x3C;YOUR-USER-KEY></td></tr><tr><td>email</td><td>&#x3C;YOUR-EMAIL></td></tr><tr><td>keys</td><td><pre><code>broad-butterfly-4544,patient-term-4545,late-sea-5767
</code></pre></td></tr><tr><td>file</td><td>binary</td></tr></tbody></table>

Response body:

```
{
  "broad-butterfly-4544": [
    "entry-id-1",
    "entry-id-2"
  ],
  "patient-term-4545": [],
  "late-sea-5767": [
    "entry-id-3"
  ]
}
```

{% endtab %}

{% tab title="200 Search response with score" %}
Request:

<table><thead><tr><th width="160">Name</th><th>Value</th></tr></thead><tbody><tr><td>key</td><td><pre><code>late-sea-5767
</code></pre></td></tr><tr><td>secKey</td><td>&#x3C;YOUR-SEC-KEY></td></tr><tr><td>userKey</td><td>&#x3C;YOUR-USER-KEY></td></tr><tr><td>email</td><td>&#x3C;YOUR-EMAIL></td></tr><tr><td>keys</td><td><pre><code>broad-butterfly-4544,patient-term-4545,late-sea-5767
</code></pre></td></tr><tr><td>file</td><td>binary</td></tr><tr><td>getScore</td><td>true</td></tr></tbody></table>

Response body:

```
{
  "broad-butterfly-4544": {
    "entry-id-1": 0.3,
    "entry-id-2": 0.75
  },
  "patient-term-4545": {},
  "late-sea-5767": {
    "entry-id-3": 1.0
  }
}
```

{% endtab %}
{% endtabs %}

## Get similar 3D models and images based on a search model

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/imageSearch?key=<API_KEY>&keys=<API_KEYS>&entryId=<SEARCH_ENTRY_ID>&operation="entrySearch"`

This query allows you to retrieve similar 3D models and image assets across a list of collections that match one of your existing echo3D assets.

#### Query Parameters

<table><thead><tr><th>Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td>key<mark style="color:red;">*</mark></td><td>string</td><td>Your API key.</td></tr><tr><td>secKey<mark style="color:red;">*</mark></td><td>string</td><td>Your Secret key. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>Your email address</td></tr><tr><td>userKey<mark style="color:red;">*</mark></td><td>string</td><td>Your authentication key</td></tr><tr><td>keys<mark style="color:red;">*</mark></td><td>string</td><td><p>A comma separated string of API keys.</p><p></p><p>The collection associated with each API key will be searched through to find assets that match the input search image.</p></td></tr><tr><td>entryId<mark style="color:red;">*</mark></td><td>string</td><td>The entryId of the existing echo3D asset you are finding similar assets for. Must be of type .obj, .glb, or .usdz. </td></tr><tr><td>operation<mark style="color:red;">*</mark></td><td>string</td><td>Defines that we must use the <code>entryId</code>as the search criteria. Should have value "entrySearch". </td></tr><tr><td>threshold</td><td>float</td><td>The minimum similarity score an asset must have to be included in the response. Value must be between 0 and 1, where 0 is least similar and 1 is most similar. When this value is not included, it defaults to 0.5.</td></tr><tr><td>getScore</td><td>boolean</td><td>If true, the similarity score of each asset will be returned in the response.</td></tr></tbody></table>

{% tabs %}
{% tab title="200 Search response" %}
Request:

<table><thead><tr><th width="145">Name</th><th>Value</th></tr></thead><tbody><tr><td>key</td><td><pre><code>late-sea-5767
</code></pre></td></tr><tr><td>secKey</td><td>&#x3C;YOUR-SEC-KEY></td></tr><tr><td>userKey</td><td>&#x3C;YOUR-USER-KEY></td></tr><tr><td>email</td><td>&#x3C;YOUR-EMAIL></td></tr><tr><td>operation</td><td><pre><code>entrySearch
</code></pre></td></tr><tr><td>keys</td><td><pre><code>broad-butterfly-4544,patient-term-4545,late-sea-5767
</code></pre></td></tr><tr><td>entryId</td><td><pre><code>entry-id-2
</code></pre></td></tr></tbody></table>

Response body:

```
{
  "broad-butterfly-4544": [
    "entry-id-1",
    "entry-id-2"
  ],
  "patient-term-4545": [],
  "late-sea-5767": [
    "entry-id-3"
  ]
}
```

{% endtab %}

{% tab title="200 Search response with score" %}
Request:

<table><thead><tr><th width="160">Name</th><th>Value</th></tr></thead><tbody><tr><td>key</td><td><pre><code>late-sea-5767
</code></pre></td></tr><tr><td>secKey</td><td>&#x3C;YOUR-SEC-KEY></td></tr><tr><td>userKey</td><td>&#x3C;YOUR-USER-KEY></td></tr><tr><td>email</td><td>&#x3C;YOUR-EMAIL></td></tr><tr><td>operation</td><td><pre><code>entrySearch
</code></pre></td></tr><tr><td>keys</td><td><pre><code>broad-butterfly-4544,patient-term-4545,late-sea-5767
</code></pre></td></tr><tr><td>entryId</td><td><pre><code>entry-id-2
</code></pre></td></tr><tr><td>getScore</td><td>true</td></tr></tbody></table>

Response body:

```
{
  "broad-butterfly-4544": {
    "entry-id-1": 0.3,
    "entry-id-2": 0.75
  },
  "patient-term-4545": {},
  "late-sea-5767": {
    "entry-id-3": 1.0
  }
}
```

{% endtab %}
{% endtabs %}


# Share Content

Learn how to share content across collections.

There are two main options when sharing content across collections. You can create a complete copy or create a shortcut that references the original. Creating a complete copy will create copies of all the files related to the asset to the other collection, whereas, creating a shortcut will create  a reference to the original asset in the source collection.

## Create a copy

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/shareContent?fromKey=<SOURCE_API_KEY>&toKey=<DEST_API_KEY>&secKey=<SEC_KEY>&entry=<ASSET_ID>&email=<EMAIL>&keepAssetId=<true|false>&overwrite=<true|false>`

Allows you to create a complete copy of an asset from the source collection (fromKey) to the destination collection (toKey).

#### Query Parameters

<table><thead><tr><th width="177">Name</th><th width="137">Type</th><th>Description</th></tr></thead><tbody><tr><td>fromKey<mark style="color:red;">*</mark></td><td>string</td><td>Api Key of the source collection</td></tr><tr><td>toKey<mark style="color:red;">*</mark></td><td>string</td><td>Api Key of the destination collection</td></tr><tr><td>secKey</td><td>string</td><td>Secret key of the source collection. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>entries<mark style="color:red;">*</mark></td><td>string</td><td>A comma separated list of the asset IDs being copied</td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>Your email address</td></tr><tr><td>userKey<mark style="color:red;">*</mark></td><td>string</td><td>Your authentication key</td></tr><tr><td>keepAssetId</td><td>boolean</td><td>Set <code>true</code> to retain the same asset id after it is copied to the new </td></tr><tr><td>overwrite</td><td>boolean</td><td>Set <code>true</code> to overwrite the asset in the case where the destination collection already contains an asset with the same asset id</td></tr></tbody></table>

## Create a shortcut

<mark style="color:blue;">`GET`</mark> `https://api.echo3D.com/shareContent?fromKey=<SOURCE_API_KEY>&toKey=<DEST_API_KEY>&secKey=<SEC_KEY>&entry=<ASSET_ID>&email=<EMAIL>&createShortcut=true`

Allows you to create a reference of an asset from the source collection (fromKey) to the destination collection (toKey).

#### Query Parameters

<table><thead><tr><th width="187">Name</th><th width="176">Type</th><th>Description</th></tr></thead><tbody><tr><td>fromKey<mark style="color:red;">*</mark></td><td>string</td><td>Api Key of the source collection</td></tr><tr><td>toKey<mark style="color:red;">*</mark></td><td>string</td><td>Api Key of the destination collection</td></tr><tr><td>secKey</td><td>string</td><td>Secret key of the source collection. Only if enabled through the <a href="/pages/-M41x3tGykQ1P8zc6MV_#secret-key">Security page</a>.</td></tr><tr><td>entries<mark style="color:red;">*</mark></td><td>string</td><td>A comma separated list of asset IDs</td></tr><tr><td>email<mark style="color:red;">*</mark></td><td>string</td><td>User's email address</td></tr><tr><td>createShortcut</td><td>boolean</td><td>Set <code>true</code> to create a shortcut </td></tr></tbody></table>


# Installation

Learn how to integrate our system with Unity.

You can easily use echo3D as a backend for your [Unity](https://unity3d.com/) project by following these steps:

## Downloading the Unity SDK

Clicking the <img src="/files/T1tOno8QjqqcjN2gEIC3" alt="" data-size="line"> button in the top header bar allows you to directly download the echo3D **Unity SDK**.

<figure><img src="/files/Ri3FQOFUFJh5TOKTEGbs" alt="" width="490"><figcaption></figcaption></figure>

## Opening a Unity Project

Create a new or open an existing project in Unity.

{% hint style="info" %}
**Our latest SDK supports Unity 2020.3 LTS and newer**. Make sure your Unity version is up to date and has the required modules (e.g. Android Build Support, iOS Build Support, etc.) to build an app on your platform of choice.

**Using an Older Version of Unity?** Our legacy SDK is available for download [here](https://assetstore.unity.com/packages/tools/network/echo3d-sdk-189301).

**New to Unity?** Check out the official [Working with Unity](https://docs.unity3d.com/Manual/UnityOverview.html) manual or the full [Unity documentation](https://docs.unity3d.com/Manual/index.html) to get a better understanding of how to get started with Unity.
{% endhint %}

![](/files/IjwEQixQViOBStoY1JLp)

## Integrating the Unity SDK

**Unzip** the downloaded SDK folder and **copy** the folder into your project `Packages` folder.

For example, `YourProject/Packages/co.echo3d.unity`

<figure><img src="/files/jI0D2MZUoEDXh80anoyV" alt=""><figcaption></figcaption></figure>

Open your project or switch to the Unity Editor if it is already open.&#x20;

Unity will automatically detect and import the new package.

![](/files/6o8aK07Pe3PODY1Od84d)

**That's it! 🎉**

## **Video Tutorials**

Here are tutorials that can guide you through the steps shown above.

### Installation and features review&#x20;

{% embed url="<https://www.youtube.com/watch?v=hTNWUN9KZeI>" %}

### Integrating the SDK into an existing project

{% embed url="<https://www.youtube.com/watch?v=E9_rXX8Xcb8&ab_channel=echo3D>" %}


# Using the SDK

Learn how to use our Unity SDK.

## Streaming 3D assets into Unity

Let's start with something simple.

1. Open the `Prefabs` folder within the `echo3D Unity SDK` package folder and add the `Echo3DService` prefab to any scene where you wish to load assets.

![](/files/E3JPxzSnfySiDN1w68rh)

2\. Add the `Echo3DHologram` prefab from the same folder to your scene.&#x20;

This is an empty game object with the `Echo3DHologram.cs` script attached to it.

You can also simply add the `Echo3DHologram.cs` script to any existing game object.

<figure><img src="/files/AJqFY3dgDd9CLIqa5pPH" alt=""><figcaption></figcaption></figure>

3\. In the Inspector View for the game object with the `Echo3DHologram.cs` script, update the `API Key` field with your [API key](/quickstart/get-api-key).

![](/files/6RF9CdL9p3ZMWEukviBA)

Your `API Key` and `Entry ID` can be found in your console:

<figure><img src="/files/uKyqSMN9L5AQAu394LoK" alt=""><figcaption></figcaption></figure>

4\. Type your [Secret Key](/web-console/manage-pages/collections-and-sharing/security#secret-key) as the value for the parameter `secKey` in the file `Packages/co.echo3D.unity/Runtime/Echo3DHologram.cs`.

{% hint style="warning" %}
This is applicable only if you have the [Secret Key](/web-console/manage-pages/collections-and-sharing/security#secret-key) option enabled.
{% endhint %}

![](/files/5q1e7gc8uswU9cGtaDhX)

5\. [Add a 3D model](/quickstart/add-a-3d-model) through the [console](https://console.echo3D.co). Here's how:

{% content-ref url="/pages/-M41tDLv3LlxH4e-G\_ou" %}
[Add a 3D Asset](/quickstart/add-a-3d-model)
{% endcontent-ref %}

![](/files/YAk6dv5pfZ87PdNLKzAI)

6\. Go back to Unity and hit the **Play** button.

The SDK will stream the 3D model into Unity.

![](/files/9pwmq0NhPw7Vopxuas7o)

**All done!** 🎉

### Video Tutorial

Here's a tutorial that can guide you through the steps shown above:

{% embed url="<https://youtu.be/98bebj0g674>" %}

## Viewing the demo scene

The SDK includes a robust demo scene preconfigured to load assets (models, images, and videos) from our platform. Follow these steps to run the scene:

1. In the top menu, click `Window` and then `Unity Package Manager`.
2. Add the scene to your project by importing the package samples via the Unity Package Manager. Under `Packages - echo3D` select `echo3D Unity SDK` and click Import on the right side of the screen.

<figure><img src="/files/1RN2MPrfFhZrRui0VD4e" alt=""><figcaption></figcaption></figure>

2\. A `Samples` folder will be created within your project `Assets`folder. Open the `Echo3DDemo`scene.

<figure><img src="/files/yewN7Ydn2xE6QDcYzuqw" alt=""><figcaption></figcaption></figure>

3\. Press "Play" to run the demo scene. Assets will stream and instantiate within the scene. **Note: An internet connection is required.**&#x20;

<figure><img src="/files/G4pQGr3krAG1r0hI0OAm" alt=""><figcaption></figcaption></figure>

**All done!** 🎉


# Script Settings

Adjust the behavior of your assets. Please review the Readme included with the SDK for additional details.

## Basic Settings

<figure><img src="/files/LGFIGUKjFswKh9Kne4uK" alt=""><figcaption></figcaption></figure>

### Streaming a Subset of Assets

These are a few optional configurations you can leverage in our Unity SDK to stream only some of the assets in your project or query for specific assets.

* Under `Entries` you can note the specific entry IDs (separated by commas) of the [Content Entries](/web-console/manage-pages/content-page) you would like to appear in Unity. Leaving this parameter empty will query for all entries in the project.
* Under `Tags` you can note the specific tag values (separated by commas) of [Content Entries](/web-console/manage-pages/content-page) that include these specific values as tags in their [metadata](/web-console/manage-pages/data-page/global-data-and-metadata).

### Ignore Model Transforms

By default, transform data baked into the model (position, rotation, scale) is applied on load. Enable this setting to ignore baked model transform data, setting all instantiated assets to default transform values (`Vector3.zero` for a local position, `Quaternion.identity` for rotation and `Vector3.One` for scale). Use the transform values found on the root gameobject (the transform of the gameobject that has the`Echo3DHologram.cs` script component attached) to set your preferred position, rotation, and scale within Unity.&#x20;

### Disable Remote Transformations

By default, a `RemoteTransformations.cs` script is attached to all instantiated assets. This script is used to apply changes made to model metadata via the echo3D console while your Unity application is running. When this setting is enabled, holograms will not respond to live metadata changes at runtime.

## Advanced Settings

### Query Only

This setting allows you to use `Echo3DHologram.cs` to make queries against the echo3D API without loading assets. The script will query based on its configuration (`apiKey`, `Entries`, etc) and store response data within its public `queryData` variable but will not instantiate content.&#x20;

### Query URL

For further customization, you can specify your own query URL which will execute and store response data in `queryData`. Other script configurations (`apiKey`, `Entries` , etc ) will be ignored when this value is defined and `Query Only` is enabled.&#x20;

## \[Experimental] Editor Preview

The SDK allows loading assets within the editor (prior to pressing "Play") to assist with scene composition. Please note this feature is still under development and may experience errors when used with complex scenes and assets.&#x20;

1. To flag a hologram that should load in the Editor, check the `Editor Preview` setting in the script instance's inspector:

<figure><img src="/files/F2kglGpRFsAfyjkjUdcY" alt=""><figcaption></figcaption></figure>

2\. Using the top menu bar, select `Load Editor Holograms`. All holograms within your scene that have the `Editor Preview` flag enabled will fetch and load their content.&#x20;

<figure><img src="/files/RYuHkTbunU8CME6DByXP" alt=""><figcaption></figcaption></figure>

3\. To clear holograms, select `Clear Editor Holograms`. All loaded content will be cleared from your scene hierarchy. All instantiated holograms are cleared and reloaded when the scene is run (Pressing "Play").&#x20;

## Video Tutorial

Here's a tutorial that can guide you through the steps shown above:

{% embed url="<https://www.youtube.com/watch?v=hTNWUN9KZeI>" %}


# Transforming Content

Learn how to send real-time updates and control animations with our Unity SDK

## Real-time Updates and Animations

You can go back to the platform to add more 3D models, delete 3D models, add metadata, or change existing metadata associated with your entry and instantly see the changes in Unity even **while the Unity project is running**.

For example, lets [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) with the key `direction` and the value `right`.

![](/files/-MB13Qbgf-9QM9OjxlQG)

This will make the 3D model rotated to the right.

![](/files/-M48FozpdM2Omp0n31Hk)

### Build-in Keywords

The following keys are words the system uses as pre-defined metadata keys to control real-time transformations:

{% hint style="info" %}
Built-in keywords will be suggested through a drop-down list in the console but you can [add](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry) **any key** and **any value**.
{% endhint %}

| Keyword   | Type    | Options                                                                                         | Effect                                                                                                                  |
| --------- | ------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| x         | float   | Any positive or negative number                                                                 | Moves the hologram on the x-axis                                                                                        |
| y         | float   | Any positive or negative number                                                                 | Moves the hologram on the y-axis                                                                                        |
| z         | float   | Any positive or negative number                                                                 | Moves the hologram on the z-axis                                                                                        |
| scale     | float   | Any positive number                                                                             | Grows or shrinks the hologram uniformly                                                                                 |
| direction | string  | "right" or "left"                                                                               | Continuously rotates the model on its center                                                                            |
| xAngle    | float   | Any positive or negative number                                                                 | Rotates the hologram on the x-axis                                                                                      |
| yAngle    | float   | Any positive or negative number                                                                 | Rotates the hologram on the y-axis                                                                                      |
| zAngle    | float   | Any positive or negative number                                                                 | Rotates the hologram on the z-axis                                                                                      |
| shader    | string  | <p>Any string</p><p>Default for OBJ is "Diffuse"</p><p>Default for GLTF/GLB is "glTF/Unlit"</p> | <p>The name of the shader to apply to a model holograms.<br>E.g. use "Legacy Shaders/Diffuse" for iOS/Android apps.</p> |
| mute      | boolean | <p>Either 'true' of 'false'</p><p>Default value is 'false'</p>                                  | Mute the sound of a video hologram                                                                                      |
| height    | integer | Any positive number                                                                             | Set the height of an image hologram or a video hologram                                                                 |
| width     | integer | Any positive number                                                                             | Set the width of an image hologram or a video hologram                                                                  |


# Edit Code

Learn how to add code to your Unity project while getting data from the cloud.

Now that you are able to successfully stream the 3D model into Unity, it's time to make some custom adjustments.

Each asset will be instantiated with a script named `CustomBehaviour.cs` attached. You can edit this script to create any behavior you would like while referencing additional data streamed from the cloud.

## Code Example

From the project's packages folder, open the `/co.echo3d.unity/Runtime/CustomBehaviour.cs` script:

{% code title="CustomBehaviour.cs" %}

```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CustomBehaviour : MonoBehaviour
{
    [HideInInspector]
    public Entry entry;

    /// <summary>
    /// EXAMPLE BEHAVIOUR
    /// Queries the database and names the object based on the result.
    /// </summary>

    // Use this for initialization
    void Start()
    {
        // Add RemoteTransformations script to object and set its entry
        this.gameObject.AddComponent<RemoteTransformations>().entry = entry;

        // ADD YOUR CODE HERE //
        // Qurey additional data to get the name
        string value = "";
        if (entry.getAdditionalData() != null && 
            entry.getAdditionalData().TryGetValue("name", out value))
        {
            // Set name
            this.gameObject.name = value;
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}
```

{% endcode %}

{% hint style="info" %}
&#x20;Note that this is an regular Unity MonoBehaviour with additions to the Start() function.
{% endhint %}

Lines 18-19 attaches a `RemoteTransformations` component to the game object and sets its content entry. This component is in charge of enabling [real-time updates and animations](/unity/using-the-sdk#real-time-updates-and-animations).

```csharp
// Add RemoteTransformations script to object and set its entry
this.gameObject.AddComponent<RemoteTransformations>().entry = entry;
```

You can add any custom code after line 21. An example follows.

## Querying Metadata

Lines 22-28 are an example that queries the entry's metadata for a key called `name`, and if such key exists, set the game object's name to the corresponding value:

```csharp
string value = "";
if (entry.getAdditionalData() != null && 
    entry.getAdditionalData().TryGetValue("name", out value))
{
    // Set name
    this.gameObject.name = value;
}
```

Without the `name` key being set, the default game object's name is the asset filename.

![](/files/-M4HYHjE5Fq3wX77HsHp)

Use the console to [set a metadata](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) entry with the following data:

| key  | value         |
| ---- | ------------- |
| name | empire\_state |

{% hint style="info" %}
Built-in keywords will be suggested through a drop-down list but you can [add](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry) **any key** and **any value** by typing it in the text input field.
{% endhint %}

Run Unity again and notice that the game object name automatically changes.

![](/files/-M4HXzJCLUahi5pb2VON)

**Great work!** 🎉

## Posting Metadata

You can add metadata to the cloud or update existing metadata stored remotely by calling the `UpdateEntryData` function located in the `echo3D.cs` script. This function implements the [Post Metadata to an Entry](/api/data#post-metadata-to-an-entry) API query.

In order to call this function from any other script you can use the Echo3DService instance to call`UpdateEntryData` function with this single line of code:

```csharp
Echo3DService.instance.UpdateEntryData("<ENTRY_ID>", "<DATA>", "<VALUE>");
```

Where `<ENTRY_ID>` is the a specific entry ID you are trying to post metadata too, `<DATA>` is the data key (e.g. `scale`), and `<VALUE>` is the data value (e.g. `2`).

## Subscribing for Metadata Changes

Add the following code to your `Start` function to register an action that will be executed when metadata is received from the cloud.

```csharp
// Define data action
WClient.On(WClient.EventType.DATA_POST_ENTRY.ToString(), (string message) => {
    
    // Parse data
    string[] messageArray = message.Split('|');
    string dataKey = messageArray[2];
    string dataValue = messageArray[3];
    
    // Add you code here
    // myFunction(dataKey, dataValue);
    
});
```


# Adding AR Capabilities

Learn how to add AR capabilities to your cloud-connected Unity project.

Now that you are successfully able to stream 3D content into Unity and know how to make custom adjustments, it's time to add AR capabilities to your project.

Unity provides a framework purpose-built for AR development called [AR Foundation](https://unity.com/unity/features/arfoundation). It allows you to build across multiple mobile and wearable AR devices, such as Android with ARCore and iOS with ARKit.

Before using AR Foundation, make sure that your iOS device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or that your Android device has [ARCore](https://developers.google.com/ar/discover/supported-devices) or [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed.

### 1. Installing AR Foundation

Clone the open-source [Unity + AR Foundation + echo3D](https://github.com/echo3Dco/Unity-ARFoundation-echo3D-example) example project on GitHub and open it in Unity.

### 2. Setup a Simple AR Application

Open the AR Foundation sample scene located in:

`Assets > AR Foundation > Scenes > SimpleAR > SimpleAR`

![](/files/-M6XXDckndNUXAAqpyIM)

In the hierarchy click on the `AR Session Origin` game object.

![](/files/-M6XXlYWuPv6zQRcEJSq)

In the inspector view, look for the `Place on Plane` script and set the `Placed Prefab` to the echo3D prefab in the `Assets > echo3D` folder.

![](/files/-M6XZfe4zkAo8SiK1pL9)

### 3. Set your API Key

Edit the echo3D prefab and set your API key through in the Inspector view.

![](/files/-M6Xj7huqcl5sxLat8YW)

#### Do you want to test the app in Unity before building it?

You can test the connection to echo3D by pressing `Play` to start the app on Unity.&#x20;

Note that the `Game` view will show a black screen - that is expected as the `Game` view tries to access the mobile AR camera which doesn't exists when running on a desktop machine.

Switch to the `Scene` view and drag the echo3D prefab from`Assets > echo3D` into the hierarchy.

If the API key was set correctly you should be able to see 3D assets from the echo3D platform stream into Unity.

Stopping Unity from playing should reset everything.

You are now ready to build the AR app on a mobile device.

### 4. Build and Run the 3D/AR/VR or Spatial Computing Application

Connect your [ARKit](https://developer.apple.com/augmented-reality/arkit/)/[ARCore](https://developers.google.com/ar/discover/supported-devices)-compatible mobile device or AR/VR/Spatial Computing headset to your desktop machine using a USB cable.

Go to `File > Build Settings...` or press `Ctrl+Shift+B`.

![](/files/-M6XfVEQ3Yd01-4XtdYs)

Make sure to set your platform to (either Android, iOS, or Universal Windows Platform (UWP), etc.) by choosing the target platform and pressing the`Switch Platform` button on the bottom right corner.

![](/files/-M6Xh5JLfVF9_Oo9B1zm)

Verify that the `SimpleAR` scene is ticked in the `Scenes in Build` list and click `Build And Run`.

![](/files/-M6XhKMwamUcG2LCwB4a)

### 5. Use your AR Application

First, [add a 3D model](/quickstart/add-a-3d-model) to the platform.

When the application is loaded on your mobile device you might be asked to approve camera access permission.

Move the phone around until a surface is detected.

Tap the screen to place the model on the surface.

The model will steam and render in front of you.

![](/files/-M6XoDXCtBba3Y2fTuvX)

{% hint style="info" %}
If the model is too big or too small, go back to the platform and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to affect its scale. After adding metadata the model should change automatically.&#x20;
{% endhint %}

**You did it! 🎉**


# Troubleshooting

What to do when things don't work as expected with building your Unity app.

## Known Issues

Our team is actively investigating the following issues:

* Building your app for **Universal Windows Platform (UWP)** or **HoloLens 2** might fail.&#x20;

## When I press Play in Unity I see a black screen!

You can test the connection to echo3D by pressing `Play` to start the app on Unity.&#x20;

Note that the `Game` view will show a black screen - **that is expected** as the `Game` view tries to access the mobile AR camera which doesn't exist when running on a desktop machine.

When you build the app on iOS or Android, the app will be able to access the camera.

To test your app, you can switch to the `Scene` view and drag the echo3D prefab into the hierarchy. If the API key was set correctly, you should be able to see 3D assets from the echo3D console stream into Unity.

## I'm getting a Newtonsoft.Json.dll error in Unity!

If you are getting a `"Multiple precompiled assemblies with the same name Newtonsoft.Json.dll"` error in Unity, this issue is most often caused by a conflict with an old version of a default Unity library.&#x20;

![](/files/xFwQd4YRO49p4nmyQW4s)

There are a few ways to fix this error:

1\. If you are beginning a new project, consider using a newer version of Unity. Unity versions 2020.3.30f1 or later will not experience this issue.

2\. Update the "Version Control" unity package in your project to 1.15 or later via the package manager by clicking the arrow next to the package:

![](/files/xVrrQEdsPEwBoSMNIkZm)

3\. If your project will not use Unity Collab or Plastic SCM, you can simply remove the "Version Control" package from your project without issue:

![](/files/7XvTW4ToHiwgh8TnnGiD)

4\. Delete the folder `Assets/echo3D/Libraries/JsonDotNet/Assemblies`.

## I can see the 3D models in Unity but not in the mobile app!

If you are seeing the 3D models in Unity but not in the AR app you build, it might be the case that the models are too big/small to fit the screen. Try scaling them up/down by pinching the screen or by [adding metadata](/unity/transforming-content) (e.g, 1000 or 0.001).

Also, it might be a mobile shader support issue. Try [adding the following metadata](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) to your models in the console:

| Keyword | Value                  |
| ------- | ---------------------- |
| shader  | Legacy Shaders/Diffuse |

Now restart the mobile app.

Also, when using Android make sure to upgrade your mobile OS to Android 8 or higher since in 2021 all security certificates for Android 7 were invalidated thus blocking HTTP requests.

## I can properly see the 3D models in Unity but in the mobile app they lose their colors or completely white/black!

This might be a mobile [shader support](https://docs.unity3d.com/ScriptReference/Shader.Find.html) issue. The shaders used in Unity are not automatically included in the mobile app build.

To resolve the issue:

* Add a folder called `Resources` inside the `Assets/echo3D` folder.
* Copy all shaders you are using into the `Assets/echo3D/Resources` folder.&#x20;

{% hint style="info" %}
For example, when using the the open-source [Unity + AR Foundation + echo3D](https://github.com/echo3Dco/Unity-ARFoundation-echo3D-example) example project, copy all files under`Assets/echo3D/Libraries/glTFast/Runtime/Shader`into the `Assets/echo3D/Resources`folder you created.
{% endhint %}

This will force the shaders to be included in the mobile app build.

Now rebuild and re-run the mobile app.

### Still doesn't work?

When building the app through `Build Settings`, set the [Texture Compression](https://forum.unity.com/threads/black-textures-on-some-devices-android-versions.195328/) to `ETC (default)`.

![](/files/-MZstEM9dXByor-JAw-g)

### Still doesn't work?

Under `Build Settings > Player Settings > Player > Optimization`, check the `Keep Loaded Shaders Alive*` option.

![](/files/-MZsuOZI69Qi4gnDUJPj)

[Another option](https://github.com/KhronosGroup/UnityGLTF/issues/206#issuecomment-406800459) is to add your shader to as a Built-in Shader.&#x20;

Go to`Edit -> Project Settings -> Graphics` and includes your shader under `Build-in Shader-Settings > Always Include Shaders`.

![](/files/-MZt8KiVivswk14dJcno)

Click `Save to asset` to create a ShaderVariant file under the `Assets/Resources` folder.

![](/files/-MZswqSDKw5zSkytiKe_)

You can verify that the ShaderVariant includes your shader through the inspector.

![](/files/-MZsx1b4_z9g-wdfJvdN)

## The model is really big or very small!

Scale the model by pinching the screen with two fingers.

You can also change the size of the model by adding a metadata key named `scale` to the 3D models. See how in the [Data Page](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) section of the documentation.

## The app builds and installs but the phone screen shows up black!

If the build process is successful and the app is running but the phone screen seems black, it might be the case that you need to build the app as 64-bit.

In August 2020, [Google Play Services for AR (ARCore) removed support for 32-bit-only apps on some 64-bit devices](https://developers.google.com/ar/64bit). When you build your app as 32-bit for newer 64-bit devices, the app fails to create an ARCore session and might crash or result in a black screen when attempting to start an AR session.

Unity supports x64 since 2017 LTS.

To build your app as 64-bit, go to `File > Build Settings`. Click `Player Settings`.

![](/files/-MIl27WmEUJ9BJpik1F2)

Navigate to `Player > Android Logo`.&#x20;

![](/files/-MIl2wpPkytbuma288JW)

There under `Other Settings` scroll down and change your *Script Backend* to `IL2CPP`, and you will be able to check the `ARM64` checkbox as active.

![](/files/-MIl3POwJOD7ho_X4ST6)

Now rebuild your app.

## I am getting a compilation error

Using some Unity versions with built-in libraries might conflict with libraries in our Unity SDK.

**Solution:** Delete the `Assets/echoAR/Libraries/JsonDotNet/Assemblies`.

![](/files/4VgbJmMs8xPRMunWKpiV)

## I am getting an Android SDK license error

After adding Android SDKs and support modules to Unity and trying to build your app you might encounter errors in the Unity console similar to:

`Failed to install the following Android SDK packages as some licences have not been accepted.`

The error message should also show the path to the Android SDK. For example:

`Using Android SDK: C:\Program Files\Unity\Hub\Editor\2019.2.14f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK`

**Solution:**

* **Step 1**

Create a file called `repositories.cfg` under `C:\Users\`*`USERNAME`*`\.android` that contains:

```ini
### User Sources for Android SDK Manager
count=0
```

* **Step 2**

Open a CMD terminal with Administrator privileges.&#x20;

Navigate to the Android SDK path and then to `~\tools\bin\`. For example:

`C:\Program Files\Unity\Hub\Editor\2019.2.14f1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\tools\bin\`

Run `./sdkmanager.bat --licenses`

Accept all licenses.

* **Step 3**

Right-click on the Android SDK folder and make sure it is **not set to read-only**.

* **Step 4**

Rebuild the app.

## I am getting a Security Key Key error

Forgetting to set your [Security Key](/web-console/manage-pages/collections-and-sharing/security) in the inspector or using old versions of our Unity SDK might not include the required [Security Key](/web-console/manage-pages/collections-and-sharing/security) with the API calls it makes resulting in an `Error: Security key not found or incorrect` or a `Failed query` errors in the Unity console.

![](/files/qaVp42mZcpIw5Qv3eFmD)

**Solutions**:&#x20;

* Type your [Security Key](/web-console/manage-pages/collections-and-sharing/security#secret-key) as the value for the parameter `secKey` in the script file `Packages/co.echo3D.unity/Runtime/Echo3DHologram.cs`.

<figure><img src="/files/YxC08zvZhd1Vdv40VHfk" alt=""><figcaption></figcaption></figure>

* Disable the [Security Key](/web-console/manage-pages/collections-and-sharing/security#secret-key) through the console. Go to the Collections and Sharing page and then the [Security Tab](/web-console/manage-pages/collections-and-sharing/security), and uncheck the API Token.

## I need to change a 3D model’s material

There are two cases where changing the material on your 3D model in Unity makes sense.

1. You don’t want to use Blender or some other 3D modeling software
2. Your model’s material looks different in Unity than what you see in Blender/your 3D modeling software (or it doesn’t show up at all and your object is white).

Here’s a quick way to get the right material on your 3D object, even if you didn’t create the asset yourself:

{% embed url="<https://www.youtube.com/watch?v=a_VbzVloEgg>" %}

## I need to upload a 3D model from Unity to the cloud

You can export your Unity creation (with the animation, eye movements, etc.) to a 3D model using [FBX Exporter](https://assetstore.unity.com/packages/tools/input-management/fbx-exporter-for-unity-37276), or other real-time exporters that save the game object as 3D file in any of the [supported formats](/web-console/manage-pages/content-page/assets).

\
Then you can then upload that model file generated to our platform [through the console](/quickstart/add-a-3d-model) or [through API](/api/upload) which will automatically create a WebAR experience, convert the model to other 3D formats, and more.

{% embed url="<https://youtu.be/OGwJzTQqkR8>" %}

## I am getting errors relating to ARKit/ARCore!

Unity apps built with AR Foundation require that your device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or [ARCore](https://developers.google.com/ar/discover/supported-devices).

Make sure to have [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed on your Android device.

## I see some Unity error regarding AR Foundation!

Try using Unity 2019.4 to insure no AR Foundation package errors.

## I am getting errors with the Burst compiler that cause my build to fail

This error is caused by the Unity Burst package being unable to find the tools it needs to run. Typically these are components installed with a Visual Studio Tools installer. the build error will include a list of the required components; ensure all components are correctly installed.

## How do I use Unity?

Check out the official [Working with Unity](https://docs.unity3d.com/Manual/UnityOverview.html) manual or the full [Unity documentation](https://docs.unity3d.com/Manual/index.html) to get a better understanding of what you can build in Unity.

{% embed url="<https://docs.unity3d.com/Manual/index.html>" %}

## I am getting some other error.

Let's talk! Ask on [Slack](https://go.echo3D.co/join) or send an email to <support@echo3D.com> and please attach a screenshot of the error you are experiencing.


# Installation

Learn how to stream models into your Unreal application.

The current echo3D Unreal SDK version is alpha 1.0.7 supporting runtime streaming of 3D models, videos, and images from echo3D into your Unreal 4.27 application as procedural static mesh actors. The SDK can be used via both C++ and Blueprints. **Unreal 5 is not yet supported.**

## Downloading the Unreal SDK

1. Log in to the echo3D platform via console.echo3d.com&#x20;
2. Click the <img src="/files/b7fFEwr0p3FRyJ9jd3Lg" alt="" data-size="line"> button in the header to open the SDKs Download list. Select the SDK from the menu to download the **echo3D Unreal SDK**.

<figure><img src="/files/4Tx5sNbbT67ZqYnxSsnV" alt=""><figcaption></figcaption></figure>

1. Unzip the downloaded file contents to a directory of your choice.&#x20;

{% hint style="info" %}
Unreal Engine is a powerful but complex development engine. Prior experience with C++ and/or Unreal is recommended.

If you are new to programming or application development, consider using our platform as a backend for a [Unity](https://unity3d.com/) project instead.
{% endhint %}


# Using the SDK

Getting started with the echo3D Unreal SDK.

## SDK Contents

<figure><img src="/files/mCzehfMOhxpkSf2X1xGQ" alt="Screenshot of unzipped sdk contents"><figcaption></figcaption></figure>

The unzipped SDK contains two items:

* **`echo3D`** : Plugin source files
* **`user_readme.md`**: Readme file containing step by step instructions to install and use the SDK via either C++ or Blueprints

Open the `user_readme.md` file and follow the enclosed instructions to install the plugin into your project and stream assets via C++ and Blueprints.


# Demo Project

Learn how to start building your Unreal application using our demo application.

Our Unreal 4.27 demo application streams several assets into a scene at runtime for quick evaluation with minimal setup.

## Requirements

* Download and install [Unreal Engine 4.27](https://www.unrealengine.com/en-US/download)&#x20;

## Clone the Repository

The public demo repository can be found on [GitHub](https://github.com/echo3Dco/Unreal-echo3D-Demo). Clone the repository to a local directory on your computer.

## Follow the Repository Readme

The `README.md` file contains instructions to run the demo as well as an overview of key actors and blueprints.

## Video Tutorial

{% embed url="<https://www.youtube.com/watch?v=sxzIjRgxDa4>" %}


# Installation

Learn how to add models to your web application built with React, Angular, JavaScript, TypeScript, and more.

Our [NPM package](https://www.npmjs.com/package/echo3d) contains helpful components designed to work with the echo3D platform API.

{% embed url="<https://www.npmjs.com/package/echo3d>" %}

## Installing the package

* Install via `npm i echo3d`:
* Importing `<model-viewer/>`:

If your framework **does not utilize server-side rendering**:&#x20;

Run `npm i @google/model-viewer` and add `import '@google/model-viewer'` to any files that utilize `<Echo/>`

If your framework **does utilize server-side rendering**:

[Issues arise](https://github.com/google/model-viewer/issues/690) when components or pages importing `model-viewer` are rendered server-side. To most reliably resolve this issue for SSR apps, provide  `model-viewer` via a script element in your `_document` file eg: `<script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>`

For **TypeScript apps**:

If you do not have a `globals.d.ts` file, create one within your app `src` folder, add the line `declare module 'echo3d';` and save the file to resolve compiler typing errors.


# Using the Package

Getting started with the echo3D NPM package.

Our NPM package allows you to add 3D models to your website.

## \<Echo/> Component

This package contains only one component, a 3D model viewer built using [google model-viewer](https://modelviewer.dev/).&#x20;

This component can be configured with an `apiKey` and `entryID` to stream and display models from the echo3D platform as well as a direct `src` URL to display local or cloud files. Common `<model-viewer/>` configuration parameters are also exposed.

### Required Parameters

You must provide `src` or both `apiKey` and `entryID`.

`src`: Element will make no query and pass this URL directly to

`apiKey`: Your echo3D project [API key](/quickstart/get-api-key), e.g. `your-key-1234`.

`entryID`: The entry ID of the hologram you would like to display

### Optional Parameters

`className`: The CSS classes that will be applied to the element. If no classes are provided, the component will default to a 600px height viewer.

`securityKey`: provide your security key if it is enabled for your project

`disableZoom`: When defined, disables zoom (camera controls must be enabled)

`cameraOrbit`: The starting focal point of the viewer

`cameraControls`: When defined, camera controls for the viewer are disabled

`autoRotate`: When defined, automatic rotation of the model is disabled

`tapToCenter`: When defined, tap-to-recenter behavior is enabled

## Code Example

```html
<Echo
   apiKey="YOUR-API-KEY"
   entryID="dbe31c16-hero.glb"
/>
```

<figure><img src="/files/GkZq5AsZvpDSmSlhKX0l" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/7GIe4d7bcLycI1fclWbP" alt=""><figcaption></figcaption></figure>


# Deploy Experience

Learn how to use our system with Google Scene Viewer.

[Google Scene Viewer](https://developers.google.com/ar/develop/java/scene-viewer) enables you to view your 3D models on any surface in your environment through a web browser or app.

Before using Google Scene Viewer make sure that your iOS device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or that your Android device has [ARCore](https://developers.google.com/ar/discover/supported-devices) or [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed.

## Adding 3D Content

Add a **model asset** or **image asset** through the platform. You can choose **any type of target**. Here's how:

{% content-ref url="/pages/-M41wQICYWUWeloxCkls" %}
[Add Assets](/web-console/how-to-add-content)
{% endcontent-ref %}

## Launching the Scene Viewer App

### Option 1: Scan a QR code

Once the 3D asset is set, you can view it instantly with Scene Viewer.&#x20;

Click on the ![](/files/skf3YcrMDNgpkCcULHRf) icon and then ![](/files/ab0voMzj4J6ooYqAUo2I)  to show the QR codes.

Make sure the <img src="/files/-M8RgbVbb15dRvAXsp0y" alt="" data-size="original"> tab or <img src="/files/-MTl6--3WMRK26Nn2aNX" alt="" data-size="original"> tab is selected and shows a QR code that can be detected by the camera.

Scan the QR code with your phone's camera app or with a QR reader app.

{% hint style="info" %}
Latest iOS and Android phones are able to read QR code with their default camera apps.
{% endhint %}

Click the pop-up message to get redirected to our website.

![](/files/-M8WmMcq98tp96jmn5Cw)

### Option 2: Go directly to website

Instead of scanning the QR code, you can click the <img src="/files/skf3YcrMDNgpkCcULHRf" alt="" data-size="original"> icon and then ![](/files/LdbKwLUk3wLIPXMdHHRx)to automatically copy a short link to the model into your clipboard.

You can browse directly to the short link:

```
https://go.echo3D.co/<CODE>
```

Alternately, you can also browse directly to:

```
https://api.echo3D.com/webar?key=<YOUR_API_KEY>&entry=<ENTRY_ID>
```

![](/files/VZqzQU7pLyssZbe9MgHf)

## Seeing 3D Content in AR

Click the <img src="/files/-M8RtgG2kuQoYJ9CPgkg" alt="" data-size="original"> button.

Move the phone around until it detects the surface around you. The 3D model should appear on top of the detected surface. You might need to [scale the model](/scene-viewer/transforming-content#scaling-3d-content) to make it fit the screen view.

![](/files/-M8S6cjO9ksng67_VtNU)

## Switching between 3D Content

You can instantly view all 3D assets in a particular project through Scene Viewer.&#x20;

{% hint style="success" %}
Viewing multiple assets is only available on the [Pro](https://www.echo3d.com/pricing) and [Custom](mailto:sales@echo3D.com) plans.
{% endhint %}

Go directly to:

```
https://api.echo3D.com/webar?key=<YOUR_API_KEY>
```

If your project includes more than one 3D asset, a carousel of 3D assets will appear at the bottom of the screen. Set up a configurator by uploading similar models with different theming and configurations.

![](/files/uDINrrqEsCaNtM3aQ8pZ)

Switch between the assets by clicking their thumbnail in the asset carousel.

![](/files/-MVj-8bT4vZ0G3tuhmQP)

{% hint style="info" %}
The carousel of 3D assets can also appear in the AR view but only on Android devices.
{% endhint %}

## Changing the Default AR Mode or Placement

Different AR modes allow for different features (such as occlusion, UI, wall placement, etc.) to take effect in the web AR viewer

If you'd like to change the default AR mode or placement used to view the 3D content, go back to the console and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to change the default mode or placement. After adding metadata, [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app).

The following metadata keys are words the system uses as pre-defined metadata keys to set the default AR mode or placement:

<table><thead><tr><th width="191">Keyword</th><th width="79">Type</th><th width="223">Options</th><th>Effect</th></tr></thead><tbody><tr><td>arMode</td><td>String</td><td><p>Either 'webxr' of 'scene-viewer'.</p><p>Default value is 'webxr'.</p></td><td>Sets the AR mode to the provided mode.</td></tr><tr><td>arPlacement</td><td>String</td><td><p>Either 'floor' or 'wall'.</p><p>Default value is 'floor'.</p></td><td>Sets the AR placement of the surface type on which the 3D model is projected.</td></tr><tr><td>arScale</td><td>String</td><td><p>Either 'auto' or 'fixed'.</p><p>Default value is 'auto'.</p></td><td>Set the AR scale mode which allows you to scale the model by pinching the screen (auto) or disables scaling (fixed).</td></tr><tr><td>shadowIntensity</td><td>String</td><td>A number between '0' to '1'. Default value is '1' for models with 'arPlacement' set as 'floor' and '0' for 'wall'.</td><td>Set the intensity of the shadow around the 3D model that appears.</td></tr><tr><td>shadowSoftness</td><td>String</td><td>A number between '0' to '1'. Default value is '1'.</td><td>Set the softness of the shadow around the 3D model that appears.</td></tr><tr><td>exposure</td><td>String</td><td>A number between '0' to '1'. Default value is '1'.</td><td>Set the intensity of the light emitted of the 3D model that appears.</td></tr><tr><td>environmentImage</td><td>String</td><td>'neutral', 'legacy'. Default value is 'neutral'.</td><td>Set one of two baked-in lighting environments: (1) neutral lighting environment that is evenly lit on all sides (roughly calibrated to render colors at their baseColorMap RGB values), or (2) legacy lighting primarily for frontward viewing.</td></tr><tr><td>minPitch</td><td>Float</td><td>A number between '0' and '180'.</td><td>Set the minimum camera pitch in the 3D preview webpage.</td></tr><tr><td>maxPitch</td><td>Float</td><td>A number between '0' and '180'.</td><td>Set the maximum camera pitch in the 3D preview webpage.</td></tr><tr><td>minYaw</td><td>Float</td><td>A number between '-180' and '180'.</td><td>Set the minimum camera yaw in the 3D preview webpage.</td></tr><tr><td>maxYaw</td><td>Float</td><td>A number between '-180' and '180'.</td><td>Set the maximum camera yaw in the 3D preview webpage.</td></tr><tr><td>minFOV</td><td>Float</td><td>A number between '0' and '180'</td><td>Set the minimum field of view of the camera in the 3D preview webpage, corresponding to maximum zoom-in</td></tr><tr><td>maxFOV</td><td>Float</td><td>A number between '0' and '180'</td><td>Set the maximum field of view of the camera in the 3D preview webpage, corresponding to maximum zoom-out</td></tr></tbody></table>

{% hint style="info" %}
Remember to [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app) after adding metadata with Scene Viewer experiences for the change to take effect.&#x20;
{% endhint %}

![](/files/-MTl7LN1z4XTR5gVGd6m)

## Getting 3D Content based on Location

You can choose to retrieve only 3D assets that include a geolocation target set to a specific location around a specific radius.

{% hint style="success" %}
Viewing assets around a location is available in the [Pro](https://www.echo3d.com/pricing) and [Custom](mailto:sales@echo3D.com) plans.
{% endhint %}

Go directly to:

```
https://api.echo3D.com/webar?key=<YOUR_API_KEY>&location=<LAT>,<LONG>&radius=<RADIUS>
```

Where the query parameters are:

<table><thead><tr><th width="188.33333333333331">Keyword</th><th>Description</th><th>Examples</th></tr></thead><tbody><tr><td>location</td><td>A pair of GPS coordinates in the form of LAT,LONG or a location name that will be converted to GPS coordinates.</td><td><p>40.713054, -74.007228</p><p>New York</p></td></tr><tr><td>radius</td><td>The acceptable distance in miles between the location and the the entry's location. If radius isn't specified, a default 1 mile radius is used.</td><td>0.01</td></tr></tbody></table>

## Password-Protecting Content

You can password-protect WebAR experiences so that users that access the experience will be prompted to enter a password.

If you'd like to password-protect the 3D content, go back to the console and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to set a password. After adding metadata, [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app).

The following key is a word the system uses as pre-defined metadata keys to password-protect content:

| Keyword | Type   | Example     |
| ------- | ------ | ----------- |
| passwd  | String | 1a2B3c4D5e6 |


# Transforming Content

Learn how to move, scale, and rotate 3D content in Scene Viewer.

## Moving 3D Content

Move the model by tapping the screen with **one finger** and moving the finger around the screen.

![](/files/-M8X0NXAXVFtfyja6RTg)

![](/files/-M8Wsc1ERUTwz5-wOQUw)

## Scaling 3D Content

### Using Touch Screen Gestures&#xD;

Scale the model by pinching the screen with **two fingers**.

![](/files/-M8X1KLK2fo0h-M3yQVk)

![](/files/-M8WuDoAyj1-aSdZVIAj)

### Using Metadata

You can use metadata to **persistently** transform 3D content.

If the content is too big or too small, go back to the console and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to affect its transformation. After adding or changing metadata **refresh the browser and relaunch the experiences** for the changes to take effect.

The following keys are words the system uses as pre-defined metadata keys to control transformations:

<table><thead><tr><th width="126">Keyword</th><th width="93">Type</th><th>Options</th><th>Effect</th></tr></thead><tbody><tr><td>scale</td><td>float</td><td>Any positive number. Default value is 1.</td><td>Grows or shrinks the hologram uniformly</td></tr></tbody></table>

{% hint style="info" %}
Refresh the browser and relaunch the experiences after adding metadata with WebAR experiences for the changes to take effect.&#x20;
{% endhint %}

## Rotating 3D Content

### Using Touch Screen Gestures

Rotate the model by placing **two fingers** on the screen and moving them in a circular motion.

![](/files/-M8X1HTvpAfCvAXwdr_c)

You can also use **two thumbs** and move them up and down, each thumb in the opposite direction.

![](/files/-M8WtMDw4IzD3GqOYn2b)

### Using Metadata

You can use metadata to persistently transform 3D content.

If you can [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to further adjust the starting rotation of the model. After adding or changing metadata **refresh the browser and relaunch the experiences** for the changes to take effect.

The following keys are words the system uses as pre-defined metadata keys to control transformations:

<table><thead><tr><th width="125">Keyword</th><th width="79">Type</th><th>Options</th><th>Effect</th></tr></thead><tbody><tr><td>xAngle</td><td>float</td><td><p>Any positive or negative number. </p><p>Default value is 0.</p></td><td>Rotates the model on the x-axis</td></tr><tr><td>yAngle</td><td>float</td><td><p>Any positive or negative number. </p><p>Default value is 0.</p></td><td>Rotates the model on the y-axis</td></tr><tr><td>zAngle</td><td>float</td><td><p>Any positive or negative number. </p><p>Default value is 0.</p></td><td>Rotates the model on the z-axis</td></tr></tbody></table>

{% hint style="info" %}
Remember to [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app) after adding metadata with Scene Viewer experiences for the changes to take effect.&#x20;
{% endhint %}

## Adding Text to 3D Content

You can add [annotations ](/web-console/manage-pages/content-page/annotations)to the model from the Inspector Dialog.

{% hint style="info" %}
Remember to [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app) after adding metadata with Scene Viewer experiences for the changes to take effect.&#x20;
{% endhint %}

![](/files/-MBjl1ROg29E8g86KsEu)

## Controlling 3D Animations

{% hint style="info" %}
Controlling animations requires that you to upload pre-animated 3D assets that have a built-in animations list.
{% endhint %}

If you'd like to control built-in animations of the content, go back to the console and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to control animations. After adding metadata, [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app).

The following keys are words the system uses as pre-defined metadata keys to control built-in animations:

| Keyword             | Type    | Options                                                                                                      | Description                                                                                                       |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- |
| autoplay            | boolean | <p>Either 'true' or 'false'.</p><p>Default value 'true'.</p>                                                 | Play the default animation automatically.                                                                         |
| animationsTrigger   | string  | Either 'click' or 'after'. Default value 'click'.                                                            | Play the next animation by clicking the model or automatically after the previous animation.                      |
| animation\<X>\_name | string  | Any string that matches a name of an existing built-in animation in the asset's pre-defined animations list. | The animation's place in the sequence of the animations that is presented.                                        |
| animation\_loop     | boolean | <p>Either 'true' or 'false'.</p><p>Default value 'false'.</p>                                                | Play the animation once or in a loop. This option is available only if 'animationsTrigger' is not set to 'after'. |

For example:&#x20;

| Key              | Value   |
| ---------------- | ------- |
| animation1\_name | walking |
| animation2\_name | running |

{% hint style="info" %}
Remember to [relaunch the experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app) after adding metadata with Scene Viewer experiences for the changes to take effect.&#x20;
{% endhint %}


# Embed into Website or App

Learn how to embed a Scene Viewer experience to your web page.

You can easily embed the Scene Viewer experience generated and hosted through the platform to any web page.

The web page can be part of a website or integrated into a mobile app.

## Using iframe

In order to embed the Scene Viewer experience, you must declare an `iframe` tag and set its source to the address of the hosted experience. You can use the full URL as the source:

```markup
<iframe src="https://api.echo3D.com/webar?key=<YOUR_API_KEY>&entry=<ENTRY-ID>"/>
```

Or the short shareable link:

```markup
<iframe src="https://go.echo3D.co/<SHORT-CODE>"/>
```

## Code Example

Here is a fully styled HTML page with an embedded Scene Viewer experience:

{% tabs %}
{% tab title="Full URL" %}

```markup
<!DOCTYPE html>
<html>
    <head>
        <title>Ebmedded WebAR Experience through echo3D</title>
        <style>
            #background {
                top: 0;
                left: 0;
                position: fixed;
                width: 100%;
                height: 100%;
                background-color: rgb(0, 45, 100);
                z-index: -1;
            }
            h1 {
                position: relative;
                color: white;
                text-align: center;
                font-size: 5vh;
		            font-family: Arial, Helvetica, sans-serif;
            }
            iframe {
                position: relative;
                width: 100%;
                height: 75vh;
            }
        </style>
    </head>
    <body>
	    <div id="background"></div>
        <h1>Ebmedded WebAR Experience through echo3D</h1>
        <iframe
           src="https://api.echo3D.com/webar?key=<API-KEY>&entry=<ENTRY-ID>"
           title="echo3D WebAR iframe element">
        </iframe>
    </body>
</html>
```

{% endtab %}

{% tab title="Short Link" %}

```markup
<!DOCTYPE html>
<html>
    <head>
        <title>Ebmedded WebAR Experience through echo3D</title>
        <style>
            #background {
                top: 0;
                left: 0;
                position: fixed;
                width: 100%;
                height: 100%;
                background-color: rgb(0, 45, 100);
                z-index: -1;
            }
            h1 {
                position: relative;
                color: white;
                text-align: center;
                font-size: 5vh;
		            font-family: Arial, Helvetica, sans-serif;
            }
            iframe {
                position: relative;
                width: 100%;
                height: 75vh;
            }
        </style>
    </head>
    <body>
	    <div id="background"></div>
        <h1>Ebmedded WebAR Experience through echo3D</h1>
          <iframe
            src="https://go.echo3D.co/<SHORT-CODE>"
            title="echo3D WebAR iframe element">
          </iframe>
    </body>
</html>
```

{% endtab %}
{% endtabs %}


# Add Code

Learn how to add code to your Scene Viewer project.

Now that you are able to embed the Scene Viewer experience generated and hosted through the console, it's time to inject your own scripts into the webpage.

{% hint style="success" %}
Adding scripts into webAR experiences is only available in the [Custom](mailto:sales@echo3D.com) plan.
{% endhint %}

If you'd like to inject your own JavaScript scripts into the webpage, go back to the console and [add metadata](https://docs.echoar.xyz/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to add code to the experience. After adding metadata, [relaunch the experience](https://docs.echoar.xyz/scene-viewer/deploy-experience#launching-the-scene-viewer-app).

The following keys are words the system uses as pre-defined metadata keys to control built-in animations:

| Keyword         | Type   | Options                                                       | Description                                                                      |
| --------------- | ------ | ------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| webarScript\<X> | string | Any string that represents a URL to a remote JavaScript file. | The remote URL of a JavaScript code file that will be injected into the webpage. |
| <p>webarOnClick |        |                                                               |                                                                                  |

</p><p></p><p></p> | string | Any string that matches a name of an existing function to be called upon click. The function must be followed by brackets `()`, either empty or with arguments. | Runs a specific function when clicking the webpage.                              |

For example:

| Key          | Value                                               |
| ------------ | --------------------------------------------------- |
| webScript1   | <https://code.jquery.com/jquery-3.5.0.js>           |
| webScript2   | <https://www.company.me/path-to-javascript-file.js> |
| webarOnClick | createCache()                                       |

Remember to [relaunch the experience](https://docs.echoar.xyz/scene-viewer/deploy-experience#launching-the-scene-viewer-app) after adding metadata with Scene Viewer experiences for the change to take effect.[<br>](https://docs.echoar.xyz/scene-viewer/deploy-experience)


# Troubleshooting

What to do when things don't work as expected with building your Scene Viewer app.

## Scene Viewer isn't working on my phone!

Before using Google Scene Viewer, make sure that your iOS device is compatible with [ARKit](https://developer.apple.com/augmented-reality/arkit/) or that your Android device has [ARCore](https://developers.google.com/ar/discover/supported-devices) or [Google Play Services for AR](https://play.google.com/store/apps/details?id=com.google.ar.core\&hl=en_US) installed.

## I can't see the 3D asset!

### Are you pointing the camera in the right place?

Point your phone to the floor and move your phone around until the camera detected a surface. The 3D asset should appear on the detected surface.

### Is your asset too small/big?

It might be the case that your 3D asset is too small or too big to appear in the camera view.

Scale the model by pinching the screen with two fingers. If that does not work, change the size of the model by adding a metadata key named `scale` to the 3D models. See how to add metadata in the [Data Page](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) section of the documentation.

Now **rescan the QR code** or **refresh** the webpage.

## Occlusion isn't working!

WebXR, which does **not support occlusion**, is the default AR mode set for web-based experiences.

Change the default AR mode to Scene Viewer which **does support occlusion** by adding a metadata key named `arMode` with the value `scene-viewer` to the 3D model. See how to add metadata in the [Data Page](/web-console/manage-pages/data-page/how-to-add-data#1-adding-a-data-entry-1) section of the documentation.

Now **rescan the QR code** to [relaunch the web experience](/scene-viewer/deploy-experience#launching-the-scene-viewer-app).

## I am getting some other error.

Let's talk! Ask on [Slack](https://go.echo3D.co/join) or send an email to <support@echo3D.com> and please attach a screenshot of the error you are experiencing.


# Deploy Experience

Learn how to use our system with AR.js.

[AR.js](https://github.com/AR-js-org/AR.js) is a free open-source library that enables you to view your 3D content through a web browser and supports features like Image Tracking, Location-based AR, and Marker Tracking.

## Adding 3D Content

Add **any type of asset** through the platform. You can choose **any type of target**. Here's how:

{% content-ref url="/pages/-M41wQICYWUWeloxCkls" %}
[Add Assets](/web-console/how-to-add-content)
{% endcontent-ref %}

You can also upload your own image trackers file (`.iset`, `.fset`, or `.fset3`) directly when adding content to the platform. The resulting Content Entry will be considered as an entry with a Surface target but it will have the image tracker embedded for AR.js experiences. Note that when you upload your own image markers the original image that serves as the real-world target will not be stored.

## Launching the AR.js App

### Option 1: Scan a QR code

Once the 3D asset is set you can view it instantly with AR.js.&#x20;

Click on the <img src="/files/c5CcWo669J4ZzeZ22eG5" alt="" data-size="original"> icon to generate and show the QR codes. Choose the "See on an Image" tab.

![](/files/-M8Rco4q2G8Lfa5cLSw2)

Scan the QR code with your phone's camera app or with a QR reader app.

{% hint style="info" %}
Latest iOS and Android phones are able to read QR code with their default camera apps.
{% endhint %}

Click the pop-up message to get redirected to our website. Your browser should open.

{% hint style="warning" %}
You might need to allow camera access. In iOS, we recommend using the Safari browser. In Android, Chrome browser is recommended as the default browser.
{% endhint %}

Your camera should open in the browser.&#x20;

![](/files/-M4Ho43OaTc7jcGqqhyI)

### Option 2: Go directly to website

Instead of scanning the QR code, you can also browse directly to:

```
https://api.echo3D.com/arjs?key=<YOUR_API_KEY>
```

Your camera should open in the browser.&#x20;

## Seeing 3D Content in AR

Now that the camera is running in your browser, follow the instructions based on the type of target you chose to upload previously:

### Surface Target

{% hint style="danger" %}
Surface detection is not supported for AR.js experiences. Instead, you can use a QR marker.
{% endhint %}

Keep the camera pointed to the QR code to see the 3D model appear.

![](/files/-M4Hp0U54KHr2PgRwa25)

### Image Target

Instead of a QR code, you can use your **own images** or generate **image markers** for your AR experience by setting an image target. Your content will appear in AR when the original image or image marker is detected in your camera frame.

After uploading your asset with an image target, our system will:

1. process the image to allow for Natural Feature Tracking (NFT),
2. convert your image to an image marker.

{% hint style="info" %}
The image marker is **different** from the original image and contains a white and black border.
{% endhint %}

View the **original** or **marker** versions of the image by clicking on the image thumbnail on the card.

![](/files/-M4HkWAVO2uebtjKBzpx)

You also can quickly download the generated image marker to your computer by clicking "Download marker" on the content card.

![](/files/-M4HizxQJOIEKAdFNgfu)

Seeing your 3D content on the **image marker** will be available immediately.

Seeing your 3D content on the **original image** will be available once NFT support is ready. Reload your key or refresh your browser to see if the card shows "Image Tracking Ready".&#x20;

![](/files/-MLkVvmablTLZ1tyLnV_)

Another indication that NFT support is ready and that you may use the original image is seeing "Loading, please wait..." before the camera opens.

Keep the camera pointed to the original image or marker to see the 3D content appear.

![](/files/-M4HqnDmkVZENFXWNjZt)

## Capturing the AR Moment

You can snap a picture of the AR scene by clicking the <img src="/files/-MV9jsKvuGEWSix49A8n" alt="" data-size="line"> button at the bottom of the screen.

An image will be captured and saved to your device.

**Share it with others!** 💗

## Password-Protecting Content

You can password-protect AR.js experiences so that users that access the experience will be prompted to enter a password.

If you'd like to password-protect the 3D content, go back to the platform and [add metadata](/web-console/manage-pages/data-page/how-to-add-data#adding-metadata) to set a password. After adding metadata, [relaunch the experience](#launching-the-ar.js-app).

The following key is a word the system uses as pre-defined metadata keys to password-protect content:

| Keyword | Type   | Example     |
| ------- | ------ | ----------- |
| passwd  | String | 1a2B3c4D5e6 |




---

[Next Page](/llms-full.txt/1)

