GlossiDocs
Open Glossi

Build with the Glossi API

Use the Glossi API when another application should control model intake, project creation, rendering, status, cancellation, or signed output retrieval. Start with one product and one accepted template before expanding the integration.

Prerequisites

Before you begin, you'll need:

  1. A Glossi account with an active workspace
  2. An API key (created in Workspace Settings → API Keys)
  3. A tool for making HTTP requests (Postman, cURL, or your programming language of choice)

Get Your API Key

  1. Log in to Glossi
  2. Go to SettingsWorkspaceAPI Keys
  3. Click Create API Key
  4. Give it a name (e.g., "n8n Integration")
  5. Copy your API key immediately - you won't be able to see it again!

Your API key looks like this:

glsi_xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Important Keep your API key secret. Don't commit it to version control or share it publicly.


Authentication

Include your API key in the X-API-Key header for all requests:

curl https://api.glossi.io/api/v1/models \
  -H "X-API-Key: glsi_xxxxxxxxxx_xxxxx"

To verify a key and see which workspace it belongs to:

curl https://api.glossi.io/api/v1/me \
  -H "X-API-Key: glsi_xxxxxxxxxx_xxxxx"
{
  "workspace": { "id": "uuid", "name": "My Workspace" },
  "apiKey": { "name": "My key", "expiresAt": null }
}

Choose Your Workflow

Glossi offers three ways to use the API:

Automations

Connect a supported external folder to a monitored Glossi workflow. This is the better surface when a folder or workspace event already represents production intent and your team does not need to own the orchestration code.

Best for:

  • Recurring production workflows (e.g. SolidWorks → renders)
  • Repeated model-to-output workflows with bounded polling and run history
  • Teams that want a visual production graph and connected delivery

View Automations Guide →

Simple Workflow

The Jobs endpoint combines everything into a single workflow - upload models, create projects, and render in one streamlined process.

Best for:

  • Automation tools like n8n or Zapier
  • Batch processing multiple models
  • When you want Glossi to handle the orchestration

View Simple Workflow Guide →

Complete Workflow

Individual endpoints give you full control over each step - create models, upload files, create projects, and trigger renders separately.

Best for:

  • Custom integrations
  • When you need fine-grained control
  • Building your own orchestration logic

View Complete Workflow Guide →


Quick Comparison

FeatureAutomationsSimple WorkflowComplete Workflow
API calls needed1 (setup)48+
OrchestrationConfigured node graphGlossi-managedIntegration-managed
File handlingAuto-detect from folderUpload via APIUpload via API
Progress trackingDashboard + APIBuilt-inPoll each step
Best forProduction workflowsAutomation toolsCustom integrations

Populate the Library

Beyond models, the API can fill the rest of a workspace library: import models from public URLs, upload props and decals, and bring in PBR materials from texture files (with a helper that groups a folder of textures by name).

View Library Import Guide →


Webhooks

Receive signed notifications for supported state changes. Webhook delivery is not currently durable or exactly once, so production consumers should reconcile current state through the API.

View Webhooks Guide →


Base URL

All API requests should be made to:

https://api.glossi.io/api/v1

A machine-readable OpenAPI specification is available at https://api.glossi.io/api/v1/openapi.json (no API key required). You can import it into Postman or use it to generate a typed client.

Retry Writes Safely with Idempotency Keys

Every POST endpoint accepts an optional Idempotency-Key header (any string up to 255 characters — a UUID works well):

curl -X POST https://api.glossi.io/api/v1/jobs \
  -H "X-API-Key: glsi_xxxxxxxxxx_xxxxx" \
  -H "Idempotency-Key: 00000000-0000-4000-8000-000000000000" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

How it behaves:

  • Retrying the same request (same key, same endpoint, same body) returns the original response instead of creating duplicate work. Keys are scoped to your workspace and expire after 24 hours.
  • Reusing a key with a different endpoint or body returns 422 IDEMPOTENCY_KEY_REUSED.
  • Sending a duplicate while the original request is still in flight returns 409 IDEMPOTENCY_CONFLICT — wait briefly and retry.
  • Server errors (5xx) are not cached, so a failed request can be safely retried with the same key.

One caveat: a replayed response is returned verbatim, so a retried POST /jobs or POST /models returns the original signed upload URLs, which expire 1 hour after the first request.

Idempotency does not make every distributed side effect exactly once. Keep your own request record and verify the returned resource state.


Error Handling

All errors follow a consistent format:

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Model name is required"
  }
}

Common Error Codes

CodeHTTP StatusDescription
MISSING_API_KEY401No API key provided
INVALID_API_KEY401API key is invalid, revoked, or expired
VALIDATION_ERROR400Request body is invalid
INVALID_STATUS400Operation isn't valid for the resource's current status
FILE_NOT_UPLOADED400Confirmed a model upload but no file was found at the upload location
GEO_RESTRICTED403Access denied from your location (workspace geo-restriction)
IP_RESTRICTED403Access denied from your network (workspace IP allow-list)
PLAN_LIMIT_REACHED403Workspace has reached plan limits
IDEMPOTENCY_CONFLICT409A request with this idempotency key is still in flight
MODEL_FILE_TOO_LARGE413Model file exceeds the 1 GB upload limit
IDEMPOTENCY_KEY_REUSED422Idempotency key was already used with a different request
MODEL_NOT_FOUND404Model ID doesn't exist
PROJECT_NOT_FOUND404Project ID doesn't exist
TEMPLATE_NOT_FOUND404Template ID doesn't exist
JOB_NOT_FOUND404Job ID doesn't exist
RENDER_JOB_NOT_FOUND404Render job ID doesn't exist
INTERNAL_ERROR500Something went wrong on our end

Need Help?

  • Support: Contact us at support@glossi.io
  • Community: Join our Discord for questions and updates

On this page