API reference overview

The base URL, request and response formats, identifiers, dates and versioning that every endpoint shares.

Updated

Base URL

Every endpoint lives under one base URL, over HTTPS only:

Base URL
https://www.skipshoot.com/api/v1

Every request is authenticated with a secret key in the Authorization header. Authenticate API requests shows how.

Endpoints

MethodPathResourceDoes
GET/meAccountRetrieve your account
GET/productsProductsList all products
GET/scenesScenesList all scenes
POST/scenesScenesCreate a scene
GET/scenes/{id}ScenesRetrieve a scene
POST/rendersRendersCreate renders
GET/renders/{id}RendersRetrieve a render
DELETE/renders/{id}RendersCancel a render

Requests

  • Send request bodies as JSON with Content-Type: application/json. The one exception is uploading a room picture, which may be sent as multipart/form-data.
  • Field names are snake_case, in requests and responses.
  • Fields marked optional can be left out. Unknown fields are ignored.
  • Only Create renders spends credits. It takes an Idempotency-Key, so a retry never charges twice.
  • Each secret key may make 600 requests a minute. See Rate limits.

Responses

Every response is JSON. A successful response wraps what you asked for in a named field (scene, scenes, render, renders, products), so new fields can be added beside it later without breaking your code.

200 OK
{
  "scene": {
    "id": 812,
    "name": "Library",
    "origin": "upload",
    "setting": "indoor",
    "status": "ready",
    "image_url": "https://…",
    "surfaces": [
      {
        "id": "wall_1",
        "name": "Back wall",
        "type": "wall"
      },
      {
        "id": "floor_1",
        "name": "Floor",
        "type": "floor"
      },
      {
        "id": "sofa_1",
        "name": "Sofa",
        "type": "furniture"
      },
      {
        "id": "scene_lighting",
        "name": "Scene lighting",
        "type": "lighting"
      }
    ],
    "created_at": "2026-10-21T14:02:40.000Z"
  }
}

An error carries an HTTP status and an error object with a stable type and a message written for people. Errors and status codes lists every one.

404 Not Found
{
  "error": {
    "type": "not_found",
    "message": "No such scene."
  }
}

Responses are never cached (Cache-Control: no-store), and successful ones carry your rate limit headers.

Identifiers

ObjectIdentifierExample
SceneInteger812
ProductInteger4410
RenderUUID string3f2b8e9a-6c1d-4e7b-9a05-2d8c41f7b6e0
SurfaceString, unique within its scenewall_1

Treat identifiers as opaque. Store them as they come back, and do not build them yourself.

Dates and times

Timestamps such as created_at are ISO 8601 strings in UTC, for example 2026-10-21T14:03:12.000Z. A timestamp the API does not have is null.

Lists

List all products and List all scenes return the whole list in one response. There are no pages to walk through.

Versioning

The version is in the path: /api/v1. Changes that affect integrations are listed in the API changelog, and the OpenAPI specification carries its own version number.

Something these pages do not answer? Email admin@skipshoot.com and we’ll help.