Skip to content

Studio projects API

Base URL: https://YOUR-SERVER/api. Send your API key in x-api-key where authentication is required. A key also needs the listed permission; your account's access rules still apply.

API guide · All endpoints · OpenAPI JSON

photographyGallery

GET /api/photography/galleries/{id}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyGalleryDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGalleryDto"
        }
      }
    },
    "description": ""
  }
}

photographyApprove

POST /api/photography/galleries/{id}/approve

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyGuestApprovalDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyGuestApprovalDto"
    }
  }
}

Responses

Field definitions: PhotographyGalleryDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGalleryDto"
        }
      }
    },
    "description": ""
  }
}

photographyChoices

PUT /api/photography/galleries/{id}/choices

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyChoicesDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyChoicesDto"
    }
  }
}

Responses

Field definitions: PhotographyGalleryDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGalleryDto"
        }
      }
    },
    "description": ""
  }
}

GET /api/photography/galleries/{id}/logo

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyAccept

POST /api/photography/galleries/{id}/orders/{orderId}/accept

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
orderIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "orderId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyOrderAcceptDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyOrderAcceptDto"
    }
  }
}

Responses

Field definitions: PhotographyGalleryDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGalleryDto"
        }
      }
    },
    "description": ""
  }
}

photographyCheckout

POST /api/photography/galleries/{id}/orders/{orderId}/checkout

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
orderIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "orderId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyCheckoutDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyCheckoutDto"
        }
      }
    },
    "description": ""
  }
}

photographyOutput

GET /api/photography/galleries/{id}/photos/{captureId}/outputs/{outputId}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
captureIdpathYesstring
idpathYesstring
outputIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "captureId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "outputId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyOutputPreview

GET /api/photography/galleries/{id}/photos/{captureId}/outputs/{outputId}/preview

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
captureIdpathYesstring
idpathYesstring
outputIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "captureId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "outputId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyFile

GET /api/photography/galleries/{id}/photos/{captureId}/{kind}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
captureIdpathYesstring
idpathYesstring
kindpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "captureId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "kind",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographySession

POST /api/photography/galleries/{id}/session

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyGallerySessionDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyGallerySessionDto"
    }
  }
}

Responses

Field definitions: PhotographyGallerySessionResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGallerySessionResponseDto"
        }
      }
    },
    "description": ""
  }
}

photographySubmit

POST /api/photography/galleries/{id}/submit

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyWorkflowMutationDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyWorkflowMutationDto"
    }
  }
}

Responses

Field definitions: PhotographyGalleryDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyGalleryDto"
        }
      }
    },
    "description": ""
  }
}

photographyZip

POST /api/photography/galleries/{id}/zip

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyZipDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyZipDto"
    }
  }
}

Responses

Field definitions: PhotographyZipResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyZipResponseDto"
        }
      }
    },
    "description": ""
  }
}

photographyArchive

GET /api/photography/galleries/{id}/zip/{zipId}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
X-Photography-SessionheaderYesstring
idpathYesstring
zipIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "X-Photography-Session",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "zipId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyCallback

POST /api/photography/payments/stripe

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
Stripe-SignatureheaderYesstring
Parameter types, defaults and constraints
[
  {
    "name": "Stripe-Signature",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

{
  "application/json": {
    "schema": {
      "additionalProperties": true,
      "description": "Signed Stripe event JSON. Signature verification requires its unchanged raw bytes.",
      "type": "object"
    }
  }
}

Responses

Field definitions: PhotographyCallbackDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyCallbackDto"
        }
      }
    },
    "description": ""
  }
}

photographyStudioPresets

GET /api/photography/presets

Authentication: API key. Permission: all.

Responses

Field definitions: PhotographyStudioPresetsDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyStudioPresetsDto"
        }
      }
    },
    "description": ""
  }
}

photographySaveStudioPreset

POST /api/photography/presets

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: PhotographyPresetSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyPresetSaveDto"
    }
  }
}

Responses

Field definitions: PhotographyStudioPresetsDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyStudioPresetsDto"
        }
      }
    },
    "description": ""
  }
}

Read your private shoots

GET /api/photography/shoots

Authentication: API key. Permission: all.

Responses

Field definitions: PhotographyWorkspaceDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkspaceDto"
        }
      }
    },
    "description": ""
  }
}

Save your shoots using the loaded revision

PUT /api/photography/shoots

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: PhotographyWorkspaceSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyWorkspaceSaveDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkspaceDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkspaceDto"
        }
      }
    },
    "description": ""
  }
}

Read your private studio branding

GET /api/photography/shoots/branding

Authentication: API key. Permission: all.

Responses

Field definitions: PhotographyBrandDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyBrandDto"
        }
      }
    },
    "description": ""
  }
}

Save private studio branding with the workspace revision

PUT /api/photography/shoots/branding

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: PhotographyBrandSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyBrandSaveDto"
    }
  }
}

Responses

Field definitions: PhotographyBrandDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyBrandDto"
        }
      }
    },
    "description": ""
  }
}

List your eligible unlocked studio logo images

GET /api/photography/shoots/branding/logos

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
cursorqueryNostring
Parameter types, defaults and constraints
[
  {
    "name": "cursor",
    "required": false,
    "in": "query",
    "schema": {
      "minLength": 1,
      "maxLength": 500,
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyLogoCandidatesDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyLogoCandidatesDto"
        }
      }
    },
    "description": ""
  }
}

View an eligible owned logo thumbnail without original metadata

GET /api/photography/shoots/branding/logos/{id}/thumbnail

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
variantqueryNostring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "variant",
    "required": false,
    "in": "query",
    "schema": {
      "default": "original",
      "type": "string",
      "enum": [
        "original",
        "light",
        "dark"
      ]
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

Preview a watermark using the production font metrics and renderer

POST /api/photography/shoots/branding/preview

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: PhotographyRenditionPreviewDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyRenditionPreviewDto"
    }
  }
}

Responses

{
  "201": {
    "description": ""
  }
}

Read a page of unlocked shoot photos

GET /api/photography/shoots/{id}/photos

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
cursorqueryNostring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "cursor",
    "required": false,
    "in": "query",
    "schema": {
      "minLength": 1,
      "maxLength": 500,
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyPhotosDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyPhotosDto"
        }
      }
    },
    "description": ""
  }
}

Rate or reject an owned photo in your shoot

PATCH /api/photography/shoots/{id}/rating

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyRatingDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyRatingDto"
    }
  }
}

Responses

{
  "204": {
    "description": ""
  }
}

photographySite

GET /api/photography/site

Authentication: API key. Permission: all.

Responses

Field definitions: PhotographySiteDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographySiteDto"
        }
      }
    },
    "description": ""
  }
}

photographySaveSite

PUT /api/photography/site

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: PhotographySiteSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographySiteSaveDto"
    }
  }
}

Responses

Field definitions: PhotographySiteDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographySiteDto"
        }
      }
    },
    "description": ""
  }
}

photographyPublicSite

GET /api/photography/studios/{ownerId}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
ownerIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "ownerId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyPublicSiteDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyPublicSiteDto"
        }
      }
    },
    "description": ""
  }
}

GET /api/photography/studios/{ownerId}/logo

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
ownerIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "ownerId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyPublicPhoto

GET /api/photography/studios/{ownerId}/photos/{shootId}/{captureId}

Authentication: No API key required. Permission: Public.

Parameters

NameWhereRequiredDescription
captureIdpathYesstring
ownerIdpathYesstring
shootIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "captureId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "ownerId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "shootId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

photographyList

GET /api/photography/workflows

Authentication: API key. Permission: all.

Responses

Field definitions: PhotographyWorkflowListDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowListDto"
        }
      }
    },
    "description": ""
  }
}

photographyGet

GET /api/photography/workflows/{id}

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Responses

Field definitions: PhotographyWorkflowDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyApproval

POST /api/photography/workflows/{id}/approvals

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyApprovalDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyApprovalDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyAssembly

PUT /api/photography/workflows/{id}/assembly

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyAssemblyDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyAssemblyDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyRetryCapture

POST /api/photography/workflows/{id}/captures/{captureId}/retry-processing

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
captureIdpathYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "captureId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyWorkflowMutationDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyWorkflowMutationDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyIntake

POST /api/photography/workflows/{id}/intake

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyIntakeDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyIntakeDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyOrder

POST /api/photography/workflows/{id}/orders

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyOrderCreateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyOrderCreateDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyPayment

POST /api/photography/workflows/{id}/orders/{orderId}/payment

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
orderIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "orderId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyPaymentDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyPaymentDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographySavePreset

POST /api/photography/workflows/{id}/presets

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyPresetSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyPresetSaveDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyApplyPreset

POST /api/photography/workflows/{id}/presets/{presetId}/apply

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
presetIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "presetId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyWorkflowMutationDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyWorkflowMutationDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyPublish

POST /api/photography/workflows/{id}/publish

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyPublicationDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyPublicationDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyInvite

POST /api/photography/workflows/{id}/recipients

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyRecipientCreateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyRecipientCreateDto"
    }
  }
}

Responses

Field definitions: PhotographyInvitationDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyInvitationDto"
        }
      }
    },
    "description": ""
  }
}

photographyRecipient

PATCH /api/photography/workflows/{id}/recipients/{recipientId}

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
recipientIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "recipientId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyRecipientUpdateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyRecipientUpdateDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyRetry

POST /api/photography/workflows/{id}/retry

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyWorkflowMutationDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyWorkflowMutationDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

photographyApplyStudioPreset

POST /api/photography/workflows/{id}/studio-presets/{presetId}/apply

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
presetIdpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "presetId",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: PhotographyStudioPresetApplyDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/PhotographyStudioPresetApplyDto"
    }
  }
}

Responses

Field definitions: PhotographyWorkflowDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/PhotographyWorkflowDto"
        }
      }
    },
    "description": ""
  }
}

Download a Studio bundle

GET /api/studio/bundles/exports/{id}/download

The finished file of one of your own exports. It is reachable by no other route and is deleted when it expires.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

Upload a Studio bundle

POST /api/studio/bundles/uploads

Checks the archive against every bundle limit and verifies its manifest and project document before anything is kept. Returns what the import will relink, keep and report missing.

Authentication: API key. Permission: all.

Request body

Required. A Studio bundle to import

Field definitions: StudioBundleUploadCreateDto

{
  "multipart/form-data": {
    "schema": {
      "$ref": "#/components/schemas/StudioBundleUploadCreateDto"
    }
  }
}

Responses

Field definitions: StudioBundleUploadDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioBundleUploadDto"
        }
      }
    },
    "description": ""
  }
}

Discard an uploaded Studio bundle

DELETE /api/studio/bundles/uploads/{id}

Deletes the uploaded file now rather than when it expires.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "204": {
    "description": ""
  }
}

Get an uploaded Studio bundle

GET /api/studio/bundles/uploads/{id}

The review of an uploaded bundle, recomputed for your library as it is now.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: StudioBundleUploadDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioBundleUploadDto"
        }
      }
    },
    "description": ""
  }
}

Download a Studio export kept with its project

GET /api/studio/exports/{id}/download

The file of a published export that uses media shared with you. Available only while every source is still available to you; a result in your library is downloaded like any other photo or video.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

List Studio projects

GET /api/studio/projects

One shelf of the project library. The active shelf holds projects you own and projects shared with a space you belong to; the archive and the trash hold your own only.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
queryqueryNoCase-insensitive part of the name
shelfqueryNoWhich shelf to list; `active` when omitted
skipqueryNointeger
sortqueryNo
takequeryNointeger
Parameter types, defaults and constraints

Field definitions: StudioProjectShelf, StudioProjectSort

[
  {
    "name": "query",
    "required": false,
    "in": "query",
    "description": "Case-insensitive part of the name",
    "schema": {
      "maxLength": 200,
      "type": "string"
    }
  },
  {
    "name": "shelf",
    "required": false,
    "in": "query",
    "description": "Which shelf to list; `active` when omitted",
    "schema": {
      "$ref": "#/components/schemas/StudioProjectShelf"
    }
  },
  {
    "name": "skip",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 0,
      "maximum": 9007199254740991,
      "default": 0,
      "type": "integer"
    }
  },
  {
    "name": "sort",
    "required": false,
    "in": "query",
    "schema": {
      "$ref": "#/components/schemas/StudioProjectSort"
    }
  },
  {
    "name": "take",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 1,
      "maximum": 200,
      "default": 50,
      "type": "integer"
    }
  }
]

Responses

Field definitions: StudioProjectListResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectListResponseDto"
        }
      }
    },
    "description": ""
  }
}

Create a Studio project

POST /api/studio/projects

Creates an empty project owned by you and hands the write lease to the given editor instance. An initial document, when given, is saved as revision 1.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: StudioProjectCreateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectCreateDto"
    }
  }
}

Responses

Field definitions: StudioProjectDetailDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDetailDto"
        }
      }
    },
    "description": ""
  }
}

Empty the Studio trash

POST /api/studio/projects/trash/empty

Deletes every project in your Studio trash for good, with its history and comments. Media in your library is never touched.

Authentication: API key. Permission: all.

Responses

Field definitions: StudioProjectTrashEmptyResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectTrashEmptyResponseDto"
        }
      }
    },
    "description": ""
  }
}

Delete a Studio project

DELETE /api/studio/projects/{id}

Moves the project to the trash, where it can be restored until its retention runs out; with `permanent`, deletes it, its history and its comments now. Owner only. Media in your library is never touched, and finished jobs keep their lineage.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
permanentqueryNoDelete for good instead of moving to the trash. Library media is never touched either way.
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "permanent",
    "required": false,
    "in": "query",
    "description": "Delete for good instead of moving to the trash. Library media is never touched either way.",
    "schema": {
      "type": "boolean"
    }
  }
]

Responses

{
  "204": {
    "description": ""
  }
}

Get a Studio project

GET /api/studio/projects/{id}

The project with its head document. A reviewer receives the document only when every source it references is available to them; otherwise it is withheld.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: StudioProjectDetailDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDetailDto"
        }
      }
    },
    "description": ""
  }
}

Update a Studio project

PUT /api/studio/projects/{id}

Rename the project, set the shared space whose members may review it, archive it or bring it back, or choose a library item as its poster. Owner only.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectUpdateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectUpdateDto"
    }
  }
}

Responses

Field definitions: StudioProjectDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDto"
        }
      }
    },
    "description": ""
  }
}

List Studio review comments

GET /api/studio/projects/{id}/comments

Comments pinned to the timeline, oldest first.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
skipqueryNointeger
takequeryNointeger
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "skip",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 0,
      "maximum": 9007199254740991,
      "default": 0,
      "type": "integer"
    }
  },
  {
    "name": "take",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 1,
      "maximum": 200,
      "default": 50,
      "type": "integer"
    }
  }
]

Responses

Field definitions: StudioCommentListResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioCommentListResponseDto"
        }
      }
    },
    "description": ""
  }
}

Add a Studio review comment

POST /api/studio/projects/{id}/comments

Owner and reviewers may comment. The time is an exact fraction of seconds. No lease is needed.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioCommentCreateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioCommentCreateDto"
    }
  }
}

Responses

Field definitions: StudioCommentDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioCommentDto"
        }
      }
    },
    "description": ""
  }
}

Remove a Studio review comment

DELETE /api/studio/projects/{id}/comments/{commentId}

The author or the project owner may remove a comment.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
commentIdpathYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "commentId",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

{
  "204": {
    "description": ""
  }
}

Update a Studio review comment

PUT /api/studio/projects/{id}/comments/{commentId}

The author edits the text; the author or the owner resolves or reopens it.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
commentIdpathYesstring
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "commentId",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioCommentUpdateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioCommentUpdateDto"
    }
  }
}

Responses

Field definitions: StudioCommentDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioCommentDto"
        }
      }
    },
    "description": ""
  }
}

Duplicate a Studio project

POST /api/studio/projects/{id}/duplicate

Creates a new project of yours whose first version is this project as it is now. The copy is not shared for review. Owner only.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectDuplicateDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectDuplicateDto"
    }
  }
}

Responses

Field definitions: StudioProjectDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDto"
        }
      }
    },
    "description": ""
  }
}

List the files imported into a Studio project

GET /api/studio/projects/{id}/imports

Every file kept with one of your projects, with its type, size and checksum.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: StudioProjectImportDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "items": {
            "$ref": "#/components/schemas/StudioProjectImportDto"
          },
          "type": "array"
        }
      }
    },
    "description": ""
  }
}

Import a file into a Studio project

POST /api/studio/projects/{id}/imports

Keeps a recording, sound, image, short video, SVG or Lottie graphic, caption file (.srt or .vtt) or .cube LUT with the project rather than the library. The type is read from the bytes; an SVG with scripts is refused, external subresources of a graphic are counted, and a caption file or LUT must be well formed throughout. The same id and file again answers the stored import.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "type": "string"
    }
  }
]

Request body

Required. A file to import into the project

Field definitions: StudioProjectImportCreateDto

{
  "multipart/form-data": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectImportCreateDto"
    }
  }
}

Responses

Field definitions: StudioProjectImportDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectImportDto"
        }
      }
    },
    "description": ""
  }
}

Read a file imported into a Studio project

GET /api/studio/projects/{id}/imports/{importId}/file

The bytes of a file kept with one of your projects, for the editor to play or show.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesProject id
importIdpathYesImport id
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "description": "Project id",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "importId",
    "required": true,
    "in": "path",
    "description": "Import id",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "type": "string"
    }
  }
]

Responses

{
  "200": {
    "content": {
      "application/octet-stream": {
        "schema": {
          "format": "binary",
          "type": "string"
        }
      }
    },
    "description": ""
  }
}

Acquire or renew the write lease

POST /api/studio/projects/{id}/lease

One editor instance writes at a time. The holder renews with the same call; a free or lapsed lease is taken; a live lease held elsewhere is refused with `409` unless `takeover` is set explicitly.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectLeaseRequestDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectLeaseRequestDto"
    }
  }
}

Responses

Field definitions: StudioProjectLeaseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectLeaseDto"
        }
      }
    },
    "description": ""
  }
}

Release the write lease

POST /api/studio/projects/{id}/lease/release

Gives the lease back so another editor instance can take it without waiting for it to lapse.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectLeaseRequestDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectLeaseRequestDto"
    }
  }
}

Responses

{
  "204": {
    "description": ""
  }
}

Restore a Studio project revision

POST /api/studio/projects/{id}/restore

Appends a new revision with the content of an earlier one. History is never rewritten; the restore is itself a revision.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectRestoreDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectRestoreDto"
    }
  }
}

Responses

Field definitions: StudioProjectSaveResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectSaveResponseDto"
        }
      }
    },
    "description": ""
  }
}

Queue a Studio clip source reversal

POST /api/studio/projects/{id}/reverse-conform

Owner-only local source reversal bound to a stored revision and the requesting editor lease.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioReverseConformEnqueueDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioReverseConformEnqueueDto"
    }
  }
}

Responses

Field definitions: StudioReverseConformQueuedDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioReverseConformQueuedDto"
        }
      }
    },
    "description": ""
  }
}

Apply a completed Studio clip source reversal

POST /api/studio/projects/{id}/reverse-conform/apply

Rechecks ownership, current source access, lease and the original revision before relinking the clip. Newer edits are never overwritten.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioReverseConformApplyDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioReverseConformApplyDto"
    }
  }
}

Responses

Field definitions: StudioProjectSaveResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectSaveResponseDto"
        }
      }
    },
    "description": ""
  }
}

List Studio project history

GET /api/studio/projects/{id}/revisions

Revisions newest first, without their documents.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
skipqueryNointeger
takequeryNointeger
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "skip",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 0,
      "maximum": 9007199254740991,
      "default": 0,
      "type": "integer"
    }
  },
  {
    "name": "take",
    "required": false,
    "in": "query",
    "schema": {
      "minimum": 1,
      "maximum": 200,
      "default": 50,
      "type": "integer"
    }
  }
]

Responses

Field definitions: StudioProjectHistoryResponseDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectHistoryResponseDto"
        }
      }
    },
    "description": ""
  }
}

Save a Studio project revision

POST /api/studio/projects/{id}/revisions

Autosave. Stores the complete document as the next revision when `expectedRevision` is the head and the caller holds the lease. The same `requestKey` with the same document replays the earlier result; an unchanged document writes nothing.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Request body

Required.

Field definitions: StudioProjectSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioProjectSaveDto"
    }
  }
}

Responses

Field definitions: StudioProjectSaveResponseDto

{
  "201": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectSaveResponseDto"
        }
      }
    },
    "description": ""
  }
}

Get a Studio project revision

GET /api/studio/projects/{id}/revisions/{revision}

One historical revision with its document, under the same review rule as the head.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
revisionpathYesinteger
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "revision",
    "required": true,
    "in": "path",
    "schema": {
      "minimum": 1,
      "maximum": 9007199254740991,
      "type": "integer"
    }
  }
]

Responses

Field definitions: StudioProjectRevisionDetailDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectRevisionDetailDto"
        }
      }
    },
    "description": ""
  }
}

Compare two Studio project revisions

GET /api/studio/projects/{id}/revisions/{revision}/diff

What changed between `against` and this revision, as graph paths and counts. No graph values are returned.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
againstqueryYesThe earlier revision to compare with
idpathYesstring
revisionpathYesinteger
Parameter types, defaults and constraints
[
  {
    "name": "against",
    "required": true,
    "in": "query",
    "description": "The earlier revision to compare with",
    "schema": {
      "minimum": 1,
      "maximum": 9007199254740991,
      "type": "integer"
    }
  },
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  },
  {
    "name": "revision",
    "required": true,
    "in": "path",
    "schema": {
      "minimum": 1,
      "maximum": 9007199254740991,
      "type": "integer"
    }
  }
]

Responses

Field definitions: StudioProjectDiffDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDiffDto"
        }
      }
    },
    "description": ""
  }
}

Restore a Studio project from the trash

POST /api/studio/projects/{id}/trash/restore

Brings a trashed project back to the shelf it was on. Owner only.

Authentication: API key. Permission: all.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-7[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: StudioProjectDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioProjectDto"
        }
      }
    },
    "description": ""
  }
}

Get a restored version for Studio

GET /api/studio/restored-versions/{id}

An accepted restoration of one of your photos or videos as a Studio media bin entry: the media id a clip of it carries, its size and length, and whether it can be placed now. A discarded, expired or Locked one says so; someone else’s is not found.

Authentication: API key. Permission: asset.edit.get.

Parameters

NameWhereRequiredDescription
idpathYesstring
Parameter types, defaults and constraints
[
  {
    "name": "id",
    "required": true,
    "in": "path",
    "schema": {
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
      "type": "string"
    }
  }
]

Responses

Field definitions: StudioRestoredVersionDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioRestoredVersionDto"
        }
      }
    },
    "description": ""
  }
}

Get your Studio workspace layout

GET /api/studio/workspace

The editor layout you last saved, or nulls when you have none. Only ever your own.

Authentication: API key. Permission: all.

Responses

Field definitions: StudioWorkspaceDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioWorkspaceDto"
        }
      }
    },
    "description": ""
  }
}

Save your Studio workspace layout

PUT /api/studio/workspace

Replaces your stored editor layout. The layout is stored as JSON and returned as the same value (key order and spacing are not kept), up to 256 KiB.

Authentication: API key. Permission: all.

Request body

Required.

Field definitions: StudioWorkspaceSaveDto

{
  "application/json": {
    "schema": {
      "$ref": "#/components/schemas/StudioWorkspaceSaveDto"
    }
  }
}

Responses

Field definitions: StudioWorkspaceDto

{
  "200": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/StudioWorkspaceDto"
        }
      }
    },
    "description": ""
  }
}