Shootings Endpoints¶
Photo shoot sessions, looks, shots, and outfits.
Overview¶
Shootings¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /shootings/ |
List shootings |
| POST | /shootings/ |
Create shooting |
| GET | /shootings/{id} |
Get shooting |
| PATCH | /shootings/{id} |
Update shooting |
| DELETE | /shootings/{id} |
Delete shooting |
| POST | /shootings/{id}/looks |
Add look to shooting |
Shots¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /shots/ |
List shots |
| GET | /shots/{id} |
Get shot |
| PATCH | /shots/{id} |
Update shot |
| POST | /shots/{id}/generate |
Trigger generation |
| POST | /shots/{id}/approve |
Approve shot |
| POST | /shots/{id}/reject |
Reject shot |
Outfits¶
| Method | Endpoint | Description |
|---|---|---|
| GET | /outfits/ |
List outfits |
| POST | /outfits/ |
Create outfit |
| GET | /outfits/{id} |
Get outfit |
API Reference¶
Sartiq Backend Server - Shootings 0.1.0¶
shootings¶
POST /api/v1/shootings/¶
Create Shooting
Description
Create a new shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
organization_id |
query | No |
Request body
{
"name": "string",
"description": null,
"due_date": "2022-04-13T15:42:05.901Z",
"archived": true,
"season": null,
"collection": null,
"brand": null,
"organization_id": null,
"default_guidelines_id": null
}
Schema of the request body
{
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_date": {
"type": "string",
"format": "date-time",
"title": "Due Date"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"season": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Season"
},
"collection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand"
},
"organization_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Organization Id",
"description": "Organization this shooting belongs to"
},
"default_guidelines_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Guidelines Id",
"description": "Default guidelines preset for this shooting"
}
},
"type": "object",
"required": [
"name",
"due_date"
],
"title": "ShootingCreate",
"description": "Request model for creating a new Shooting."
}
Responses
{
"id": "89d28615-40dc-438a-9d25-5eccd3bc4533",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"description": null,
"due_date": null,
"owner_id": "1cd6d6ca-d5ef-41bd-9e8f-4d5ee1315927",
"organization_id": null,
"archived": true,
"season": null,
"collection": null,
"brand": null,
"default_guidelines_id": null,
"default_guidelines": null,
"shot_status": null,
"status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Due Date"
},
"owner_id": {
"type": "string",
"format": "uuid",
"title": "Owner Id"
},
"organization_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Organization Id"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"season": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Season"
},
"collection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand"
},
"default_guidelines_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Guidelines Id"
},
"default_guidelines": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingGuidelinesPublic"
},
{
"type": "null"
}
]
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingStatus"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"name",
"owner_id"
],
"title": "ShootingPublic",
"description": "Response model for Shooting."
}
GET /api/v1/shootings/¶
Read Shootings
Description
Retrieve all shootings (without looks for performance). Use GET /shootings/{shooting_id} to get a shooting with its looks.
When organization_id query param is provided, returns shootings belonging to that organization. Without organization_id, returns only personal shootings (not belonging to any organization).
The statuses parameter filters shootings by their computed status, which is determined by the minimum (least progressed) status across all shots in all shooting looks.
Available status values: - ShotStatus: PENDING, PROPOSAL, REJECTED, POST_PROD, POST_PROD_REJECTED, REVIEW, APPROVED - ShootingLookStatus: DRAFT, READY - Special: WITHOUT_STATUS (shootings with no looks or shots)
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
limit |
query | integer | 100 | No | |
organization_id |
query | No | |||
skip |
query | integer | 0 | No | |
statuses |
query | No |
Responses
{
"data": [
{
"id": "ecbd4246-827d-456d-a0d2-ea964d127c48",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"description": null,
"due_date": null,
"owner_id": "526f936e-9d69-4e25-b849-f32fc7aa9bce",
"organization_id": null,
"archived": true,
"season": null,
"collection": null,
"brand": null,
"default_guidelines_id": null,
"default_guidelines": null,
"shot_status": null,
"status": null
}
],
"count": 0
}
Schema of the response body
{
"properties": {
"data": {
"items": {
"$ref": "#/components/schemas/ShootingPublic"
},
"type": "array",
"title": "Data"
},
"count": {
"type": "integer",
"title": "Count"
}
},
"type": "object",
"required": [
"data",
"count"
],
"title": "ShootingsPublic",
"description": "Response model for paginated list of Shootings (without looks for performance)."
}
GET /api/v1/shootings/summary¶
Get Shooting Summary
Description
Get summary statistics for shootings.
Returns total products, total shooting looks, and breakdown by computed shot status. The status is determined by the minimum (least progressed) shot status across all shots in each shooting look.
When organization_id query param is provided, returns summary for shootings belonging to that organization. Without organization_id, returns summary only for personal shootings (not belonging to any organization).
If shooting_id is provided, filters to that specific shooting. When both organization_id and shooting_id are provided, the shooting must belong to the specified organization.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
organization_id |
query | No | |||
shooting_id |
query | No |
Responses
{
"total_products": 0,
"total_shooting_looks": 0,
"status_breakdown": [
{
"status": "DRAFT",
"count": 0
}
]
}
Schema of the response body
{
"properties": {
"total_products": {
"type": "integer",
"title": "Total Products"
},
"total_shooting_looks": {
"type": "integer",
"title": "Total Shooting Looks"
},
"status_breakdown": {
"items": {
"$ref": "#/components/schemas/ShootingStatusCount"
},
"type": "array",
"title": "Status Breakdown"
}
},
"type": "object",
"required": [
"total_products",
"total_shooting_looks",
"status_breakdown"
],
"title": "ShootingSummary",
"description": "Summary statistics for shootings."
}
GET /api/v1/shootings/{shooting_id}¶
Read Shooting
Description
Get a shooting by ID with all its details including guidelines and looks.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
organization_id |
query | No | |||
shooting_id |
path | string | No |
Responses
{
"id": "3f471360-af20-4da5-b112-14c76de84424",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"description": null,
"due_date": null,
"owner_id": "e931c486-fe3f-41d6-b363-c0fd6a167da6",
"organization_id": null,
"archived": true,
"season": null,
"collection": null,
"brand": null,
"default_guidelines_id": null,
"default_guidelines": null,
"shot_status": null,
"status": null,
"looks": [
{
"id": "874cb3ba-9b04-4ced-bf5f-49ed8c0c5292",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "1a8e44b0-9b44-4d95-88e8-632a4158f6f4",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "67b44077-6abb-47f5-898e-9001c948f676",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "29ebac83-388a-4437-b6ca-47a7543ac4d1",
"owner_id": "89850881-801a-41ca-9bba-cf4ba8f64a0c",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "162b5e00-53c8-45b8-a504-22506114f419",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "6a5ce113-99e0-4734-8c54-43b37329f5c5",
"shot_id": "1cdd903a-6537-4dc8-a89d-2b7b00ef420c",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "96164e98-466b-4536-97d0-da882aa8117c",
"shot_revision_id": "e459d615-bb61-4b9c-b16a-1ed82bf85e60",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "02049d9b-dbfc-4de9-8d8e-498d473581f0",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "d6026cf3-0b84-49f0-8081-22fa9b7d21da",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "f79e2a2f-6155-4d6f-95e4-45f6f461ef5c",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "9cbf1983-0bed-429c-a058-5197e72ea823",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"aa17a596-6152-4c70-949f-96f63d7c4e38"
],
"outfit_products": [
{
"id": "21c29f35-5123-4f3b-8ef2-af5c917c861c",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "c0a7aade-fbc7-4011-9da7-18489cbcbb4e",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"3a2cf76c-1255-4510-96f2-8d1056e34d1a"
]
}
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Due Date"
},
"owner_id": {
"type": "string",
"format": "uuid",
"title": "Owner Id"
},
"organization_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Organization Id"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"season": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Season"
},
"collection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand"
},
"default_guidelines_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Guidelines Id"
},
"default_guidelines": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingGuidelinesPublic"
},
{
"type": "null"
}
]
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingStatus"
},
{
"type": "null"
}
]
},
"looks": {
"items": {
"$ref": "#/components/schemas/ShootingLookPublic"
},
"type": "array",
"title": "Looks",
"default": []
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"name",
"owner_id"
],
"title": "ShootingDetailPublic",
"description": "Response model for detailed Shooting view."
}
PUT /api/v1/shootings/{shooting_id}¶
Update Shooting
Description
Update a shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shooting_id |
path | string | No |
Request body
{
"name": null,
"description": null,
"due_date": null,
"archived": null,
"season": null,
"collection": null,
"brand": null,
"organization_id": null,
"default_guidelines_id": null
}
Schema of the request body
{
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Due Date"
},
"archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Archived"
},
"season": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Season"
},
"collection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand"
},
"organization_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Organization Id",
"description": "Organization to transfer this shooting to"
},
"default_guidelines_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Guidelines Id",
"description": "Default guidelines preset for this shooting"
}
},
"type": "object",
"title": "ShootingUpdate",
"description": "Request model for updating a Shooting."
}
Responses
{
"id": "03353e13-e88d-4945-8bcf-a1988f5100ca",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"description": null,
"due_date": null,
"owner_id": "6defb93a-ea38-422c-9b60-298f83b6ec40",
"organization_id": null,
"archived": true,
"season": null,
"collection": null,
"brand": null,
"default_guidelines_id": null,
"default_guidelines": null,
"shot_status": null,
"status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"name": {
"type": "string",
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"due_date": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Due Date"
},
"owner_id": {
"type": "string",
"format": "uuid",
"title": "Owner Id"
},
"organization_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Organization Id"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"season": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Season"
},
"collection": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection"
},
"brand": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Brand"
},
"default_guidelines_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Guidelines Id"
},
"default_guidelines": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingGuidelinesPublic"
},
{
"type": "null"
}
]
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingStatus"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"name",
"owner_id"
],
"title": "ShootingPublic",
"description": "Response model for Shooting."
}
DELETE /api/v1/shootings/{shooting_id}¶
Delete Shooting
Description
Delete a shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shooting_id |
path | string | No |
Responses
POST /api/v1/shootings/{shooting_id}/looks¶
Create Shooting Looks
Description
Create a set of looks for a shooting based on the gender-compatible combinations of subjects and products defined in the request. Optionally generates base images for each shot when generate_base_images is True.
Note: Generation records are created and returned immediately, but the actual generation processing starts asynchronously in the background. Poll generation status to check progress.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shooting_id |
path | string | No |
Request body
{
"default_style_id": "b51b578e-7cf6-413e-bca9-d704737debd8",
"generate_outfit": true,
"product_filters": {
"archived": false,
"brand": "Acme",
"enabled": true,
"limit": 100,
"skip": 0
},
"shot_type_ids": [
"381a38e0-ff34-4937-ba76-c1a82f023161",
"d38f1cdc-8ba4-4e38-aa2e-8ec2c7397d2d"
],
"subject_ids": [
"81e4440f-acdf-4483-b8ca-1b0212ca20d1",
"9e33e540-3a6d-456a-a33d-534e4f29be58"
]
}
Schema of the request body
{
"properties": {
"product_ids": {
"anyOf": [
{
"items": {
"type": "string",
"format": "uuid"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Product Ids",
"description": "Simple list of product IDs (use with generate_outfit=True for AI generation)"
},
"product_outfit_configs": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/ProductOutfitConfig"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Product Outfit Configs",
"description": "Per-product outfit configurations (use with generate_outfit=False for manual config)"
},
"product_filters": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Product Filters",
"description": "Product filters matching the read_products endpoint (archived, enabled, brand, brand_collection, demo, search, shot_statuses, gender, product_type, sort_by, sort_order, skip, limit)"
},
"subject_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Subject Ids"
},
"shot_type_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Shot Type Ids"
},
"generate_outfit": {
"type": "boolean",
"title": "Generate Outfit",
"default": false
},
"default_style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Style Id"
},
"default_resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Resolution Preset Id"
},
"default_width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Default Width"
},
"default_height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Default Height"
},
"default_background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Default Background Preset Id"
},
"default_file_format": {
"type": "string",
"title": "Default File Format",
"default": "JPG"
},
"default_instructions": {
"type": "string",
"title": "Default Instructions",
"default": ""
},
"pose_preset_ids": {
"anyOf": [
{
"items": {
"type": "string",
"format": "uuid"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Pose Preset Ids",
"description": "Override the pose presets from guidelines. When provided, these pose presets are baked into every created look instead of those from the shooting's default guidelines."
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id",
"description": "Override the set design from guidelines. When provided, this set design is baked into every created look instead of the one from the shooting's default guidelines."
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookStatus"
},
{
"type": "null"
}
]
},
"generate_base_images": {
"type": "boolean",
"title": "Generate Base Images",
"default": false
},
"unisex_gender_preference": {
"anyOf": [
{
"$ref": "#/components/schemas/ProductGender"
},
{
"type": "null"
}
],
"description": "Controls how UNISEX products are paired with subjects. MALE: pair only with male subjects. FEMALE: pair only with female subjects. UNISEX or None: pair with all subjects (default behavior)."
}
},
"type": "object",
"title": "GenerateShootingLooksRequest",
"description": "Request model for generating ShootingLooks with optional outfit generation via LLM.",
"example": {
"default_style_id": "b51b578e-7cf6-413e-bca9-d704737debd8",
"generate_outfit": true,
"product_filters": {
"archived": false,
"brand": "Acme",
"enabled": true,
"limit": 100,
"skip": 0
},
"shot_type_ids": [
"381a38e0-ff34-4937-ba76-c1a82f023161",
"d38f1cdc-8ba4-4e38-aa2e-8ec2c7397d2d"
],
"subject_ids": [
"81e4440f-acdf-4483-b8ca-1b0212ca20d1",
"9e33e540-3a6d-456a-a33d-534e4f29be58"
]
}
}
Responses
{
"looks": [
{
"id": "bd34bb4a-ab30-4b15-9969-45d48481df73",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "a43b03c5-c8dd-4945-ba8c-b433493c8398",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "b1b83752-eff5-48d6-b566-3288b7a26dd1",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "c1f642d3-5b4e-42bd-b300-9d0a1954aec4",
"owner_id": "957af21d-3f0d-415f-a2c1-7bd1a3a55d09",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "2c3f329d-e023-4646-9c18-9455631bc06a",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "ccdd4aad-a3d8-4dbb-a330-61b96241d639",
"shot_id": "523efc1d-d75f-476b-9465-745efa8f1427",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "66d3ed0f-50ef-4b24-ae8d-f97999efe8d0",
"shot_revision_id": "335c6af2-574b-4366-bc14-3d4ee7aaff40",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "1a863c07-a1e3-4768-98bb-7d006fd79643",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "3049659c-7876-4c9e-b348-3a32e5711474",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "dfe7a711-d775-4fd5-ae1d-f14e726e78d3",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "925396a7-b833-4ec7-9f72-2ee157d6bd74",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"fe04d0d6-ab9d-4add-a688-cfebe88ff117"
],
"outfit_products": [
{
"id": "ddb0cc56-ac44-48a5-83c9-491e48370a90",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "37efc6ff-436f-488d-8914-f17d287d14c0",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"9b6b20c7-ccda-4185-809b-c7dd3fe0669c"
]
}
],
"generation_results": [
{
"shot_id": "7de8ba5e-6135-4bdc-9eab-613167108c3a",
"look_id": "18ae7cb2-aac7-4120-8144-5e51beb23545",
"generation_id": "53a7d3bd-bc03-4c51-8506-99c8a7a64761"
}
],
"total_generations_created": 0
}
Schema of the response body
{
"properties": {
"looks": {
"items": {
"$ref": "#/components/schemas/ShootingLookPublic"
},
"type": "array",
"title": "Looks"
},
"generation_results": {
"items": {
"$ref": "#/components/schemas/GenerationCreationResult"
},
"type": "array",
"title": "Generation Results"
},
"total_generations_created": {
"type": "integer",
"title": "Total Generations Created",
"default": 0
}
},
"type": "object",
"required": [
"looks"
],
"title": "GenerateShootingLooksResponse",
"description": "Response when creating shooting looks with optional generation."
}
GET /api/v1/shootings/{shooting_id}/looks¶
Read Shooting Looks
Description
Get all looks for a shooting with optional filtering.
Filters: - shot_statuses: Filter by computed shot status (minimum status across all shots) - ShotStatus: PENDING, PROPOSAL, REJECTED, POST_PROD, POST_PROD_REJECTED, REVIEW, APPROVED - ShootingLookStatus: DRAFT, READY - Special: WITHOUT_STATUS (looks with no shots) - product_ids: Filter by specific product IDs - product_name: Search by product name (partial match) - product_sku: Search by product SKU (partial match) - product_type: Filter by product type - assignee_ids: Filter by assignee user IDs
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
assignee_ids |
query | No | Filter by assignee user IDs | ||
limit |
query | integer | 100 | No | |
organization_id |
query | No | |||
product_ids |
query | No | |||
product_name |
query | No | Search by product name | ||
product_sku |
query | No | Search by product SKU | ||
product_type |
query | No | |||
shooting_id |
path | string | No | ||
shot_statuses |
query | No | |||
skip |
query | integer | 0 | No |
Responses
{
"data": [
{
"id": "7dcd6734-b78d-4a49-ae8a-59de64347bec",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "725da39c-3f93-439f-a19e-7d94e3034932",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "12f6f7b3-532f-4621-808f-bd2b98b0deb2",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "0238e507-bc6b-438c-a2ff-6cc67c7f815c",
"owner_id": "e44c6957-1f8c-4d7b-ba52-c348253fbc8b",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "6560a1b2-3171-4050-bed7-3d065de6c800",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "1296c3a0-ac69-40be-8f18-fcc5f0ff4ba9",
"shot_id": "5e82a344-634d-4507-bfe7-fcb81a24cba1",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "80b5a69b-0eb9-4223-a198-88e9b347a925",
"shot_revision_id": "808ccccc-f7b7-4bd9-bd6f-cec2b5915f39",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "bed3b388-c2c5-490f-aa22-ddeec71eeb73",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "2ccc48a3-9a70-4203-a3d7-620238583872",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "ff9fcf26-aa15-4d1e-a40a-6319dfa003ac",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "8e2946e4-3c33-4a86-9960-81c389d846bc",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"5f562571-f5ae-4a02-b32e-6f86c7e6fc67"
],
"outfit_products": [
{
"id": "4b0d8284-565f-4e27-9184-0319ed40e362",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "3707c70a-9df0-4034-b8af-1d0cd3f45fb9",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"6ba8d377-b89e-487d-af39-2e7dc58b75f2"
]
}
],
"count": 0
}
Schema of the response body
{
"properties": {
"data": {
"items": {
"$ref": "#/components/schemas/ShootingLookPublic"
},
"type": "array",
"title": "Data"
},
"count": {
"type": "integer",
"title": "Count"
}
},
"type": "object",
"required": [
"data",
"count"
],
"title": "ShootingLooksPublic",
"description": "Response model for paginated list of ShootingLooks."
}
GET /api/v1/shootings/{shooting_id}/looks-summary¶
Read Shooting Looks Summary
Description
Lightweight endpoint to get shooting looks with product info and per-shot status.
Returns look-level data (product name, sku, cover image, outfit info, shot statuses with push status) without loading full revisions, images, or prediction/refine data.
Supports the same filtering as the full /looks endpoint.
When organization_id query param is provided, validates membership and checks access. Without organization_id, membership is resolved automatically if the shooting belongs to an organization the user is a member of.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
assignee_ids |
query | No | Filter by assignee user IDs | ||
limit |
query | integer | 100 | No | |
organization_id |
query | No | |||
product_ids |
query | No | |||
product_name |
query | No | Search by product name | ||
product_sku |
query | No | Search by product SKU | ||
product_type |
query | No | |||
shooting_id |
path | string | No | ||
shot_statuses |
query | No | |||
skip |
query | integer | 0 | No |
Responses
{
"data": [
{
"id": "9fb3addc-eee0-4e13-8994-01ac03c754ed",
"shooting_id": "11c544b3-bec5-461a-959c-6a4213307011",
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"outfit_products_count": 0,
"outfit_generation_status": null,
"shots": [
{
"id": "445307ba-b5eb-4bd7-8711-524eb7d8b4a9",
"shot_type": null,
"status": "PENDING",
"current_revision_id": null,
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"count": 0
}
Schema of the response body
{
"properties": {
"data": {
"items": {
"$ref": "#/components/schemas/ShootingLookSummary"
},
"type": "array",
"title": "Data"
},
"count": {
"type": "integer",
"title": "Count"
}
},
"type": "object",
"required": [
"data",
"count"
],
"title": "ShootingLooksSummaryPublic",
"description": "Response model for paginated list of lightweight ShootingLook summaries."
}
GET /api/v1/shootings/{shooting_id}/draft-summary¶
Get Draft Looks Summary
Description
Get summary of draft looks for a shooting, including count of looks with pending outfit generation.
Returns: - total_draft_looks: Total number of looks in DRAFT status - generating_count: Number of draft looks that have at least one outfit proposal with PENDING status
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
organization_id |
query | No | |||
shooting_id |
path | string | No |
Responses
Schema of the response body
{
"properties": {
"total_draft_looks": {
"type": "integer",
"title": "Total Draft Looks"
},
"generating_count": {
"type": "integer",
"title": "Generating Count"
}
},
"type": "object",
"required": [
"total_draft_looks",
"generating_count"
],
"title": "DraftLooksSummary",
"description": "Response model for draft looks summary with generation status."
}
GET /api/v1/shootings/{shooting_id}/looks/{look_id}¶
Read Shooting Look
Description
Get a specific look for a shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No | ||
organization_id |
query | No | |||
shooting_id |
path | string | No |
Responses
{
"id": "7cb41871-01bb-4ef6-addd-aea82ef0dbd8",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "ddc1d020-c05f-4dfd-926e-e7cf56743599",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "be8fff2c-2d97-4a63-a865-ca634a032cc1",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "eff47e9e-41d3-4c2c-858b-df48d7da1ae8",
"owner_id": "1a1b3f73-4a43-4e80-8f21-0797b2ad80d0",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "e8af4b93-b5ff-4199-9f66-3a504ced8058",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "9f92ad4c-8fd2-4064-b81d-8868958428b3",
"shot_id": "dec60f58-6b4b-420b-91e7-33adc5996158",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "53af764c-d070-46fa-9e0e-55aea15bc8be",
"shot_revision_id": "846d6c9d-7ada-4b7b-be70-68a75cf78223",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "796ec787-7c82-4918-a7a6-9705ab1a4e44",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "f205492c-8d14-4c56-bb6f-675b5598de8a",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "bc285d14-1d84-4177-8ab3-f8c5557f462d",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "74c5cc29-d11b-4f32-bd7b-36a3dead4384",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"71d6de15-a50f-426b-b249-15b8c10cea21"
],
"outfit_products": [
{
"id": "00604e01-29b1-4205-a68f-c564fc6adc13",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "bfe1e28b-48fc-45d7-aba0-2c5334f7db78",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"121b6d2f-d737-4e08-9222-5746106d855f"
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"shooting_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Id"
},
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"subject_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Name"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"product_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Name"
},
"product_sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Sku"
},
"product_cover_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Cover Image Url"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id"
},
"set_design": {
"anyOf": [
{
"$ref": "#/components/schemas/SetDesignPublic"
},
{
"type": "null"
}
]
},
"file_format": {
"type": "string",
"title": "File Format",
"default": "JPG"
},
"status": {
"$ref": "#/components/schemas/ShootingLookStatus"
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"assignee": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"pose_presets": {
"items": {
"$ref": "#/components/schemas/PosePresetPublic"
},
"type": "array",
"title": "Pose Presets",
"default": []
},
"shots": {
"items": {
"$ref": "#/components/schemas/ShotPublic"
},
"type": "array",
"title": "Shots",
"default": []
},
"outfit_proposals": {
"items": {
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
"type": "array",
"title": "Outfit Proposals",
"default": []
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"outfit": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
{
"type": "null"
}
]
},
"outfit_ref_imgs_urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outfit Ref Imgs Urls",
"description": "Get outfit reference image URLs from the selected outfit.",
"readOnly": true
},
"outfit_instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Get outfit instruction from the selected outfit.",
"readOnly": true
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids",
"description": "Get outfit product IDs from the selected outfit (supports both storage mechanisms).",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"shooting_id",
"status",
"outfit_ref_imgs_urls",
"outfit_instruction",
"outfit_product_ids"
],
"title": "ShootingLookPublic",
"description": "Response model for ShootingLook."
}
PUT /api/v1/shootings/{shooting_id}/looks/{look_id}¶
Update Shooting Look
Description
Update a specific look for a shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No | ||
shooting_id |
path | string | No |
Request body
{
"subject_id": null,
"product_id": null,
"outfit_id": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"file_format": null,
"status": null,
"assignee_id": null,
"shot_type_ids": null
}
Schema of the request body
{
"properties": {
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"file_format": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "File Format"
},
"status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"shot_type_ids": {
"anyOf": [
{
"items": {
"type": "string",
"format": "uuid"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Shot Type Ids"
}
},
"type": "object",
"title": "ShootingLookUpdate",
"description": "Request model for updating a ShootingLook.\n\nNote: resolution_preset_id and custom width/height are mutually exclusive.\nSetting one will automatically clear the other during update."
}
Responses
{
"id": "3b5895c8-f8e9-4609-9529-624f90a9c8fb",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "47f69923-11e9-41fb-b20b-81f43a8600c6",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "8633a218-8a00-43de-8ecf-0a705d737201",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "cd893e14-d5d6-4672-a6c0-3b45d4eb0651",
"owner_id": "ebe3b9f8-ec7f-44c8-8232-cb81cb52b808",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "e1ba5941-4b81-425a-adc6-af3478a7721b",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "7763751b-03f7-42b3-bd4b-2816de5cc742",
"shot_id": "8e0166c7-a731-4511-85ed-8d53eb0b3644",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "3c31c843-3c9d-40b1-acf2-f86fd82b6cfc",
"shot_revision_id": "1a228d16-730d-41d2-a43d-e644da627fa9",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "9535eb25-829e-4eef-beb3-67a73f5f61de",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "8a22fb3c-cb88-4752-a453-8b5c66078bf7",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "f6882636-e6f4-4648-95fc-63ce4a741eea",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "2f0e1b20-d946-44f5-93df-3371e61cb9e2",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"7508a9e4-2ad4-46e4-ac2d-c4438f89e17d"
],
"outfit_products": [
{
"id": "f9311191-de74-45f3-a04a-08fe9e26c293",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "6e267c5b-a4be-4306-af67-4a50f9090c1e",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"c5dfd701-99e5-489e-aa7f-022a8808c61e"
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"shooting_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Id"
},
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"subject_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Name"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"product_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Name"
},
"product_sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Sku"
},
"product_cover_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Cover Image Url"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id"
},
"set_design": {
"anyOf": [
{
"$ref": "#/components/schemas/SetDesignPublic"
},
{
"type": "null"
}
]
},
"file_format": {
"type": "string",
"title": "File Format",
"default": "JPG"
},
"status": {
"$ref": "#/components/schemas/ShootingLookStatus"
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"assignee": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"pose_presets": {
"items": {
"$ref": "#/components/schemas/PosePresetPublic"
},
"type": "array",
"title": "Pose Presets",
"default": []
},
"shots": {
"items": {
"$ref": "#/components/schemas/ShotPublic"
},
"type": "array",
"title": "Shots",
"default": []
},
"outfit_proposals": {
"items": {
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
"type": "array",
"title": "Outfit Proposals",
"default": []
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"outfit": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
{
"type": "null"
}
]
},
"outfit_ref_imgs_urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outfit Ref Imgs Urls",
"description": "Get outfit reference image URLs from the selected outfit.",
"readOnly": true
},
"outfit_instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Get outfit instruction from the selected outfit.",
"readOnly": true
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids",
"description": "Get outfit product IDs from the selected outfit (supports both storage mechanisms).",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"shooting_id",
"status",
"outfit_ref_imgs_urls",
"outfit_instruction",
"outfit_product_ids"
],
"title": "ShootingLookPublic",
"description": "Response model for ShootingLook."
}
DELETE /api/v1/shootings/{shooting_id}/looks/{look_id}¶
Delete Shooting Look
Description
Delete a specific look for a shooting.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No | ||
shooting_id |
path | string | No |
Responses
GET /api/v1/shootings/looks/{look_id}¶
Get Shooting Look
Description
Get a ShootingLook by ID.
Returns the look with all its properties and relationships.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No | ||
organization_id |
query | No |
Responses
{
"id": "025c5bb0-d97d-4e03-823f-ebf195f988b6",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "0225a42c-5698-4115-b447-7036606447e6",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "eb0af22b-4f06-47ce-a89e-1b4ac12c4e28",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "080bf786-e6c3-4a4a-8488-72c42c004f4e",
"owner_id": "c35fc5d3-ed55-4d2d-baeb-e9af259cf7b1",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "74ec5682-7fd7-4da8-b5e5-e408944e22ab",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "8558a653-e259-4f68-82c0-21f7da2a2fd3",
"shot_id": "48e246fd-3e37-4659-b667-d0ec73979e48",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "a2370b1d-ea59-4223-ae02-eb77dcb5aefa",
"shot_revision_id": "1b22c4f7-3902-4ed0-899d-f58f2e89a581",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "8b2e073f-79ec-4ca9-b4b3-b257ceb2a453",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "44aa05ab-0006-44a0-a001-4bf08553c034",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "b7b94b93-c52a-40b3-b990-3a070504e403",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "a8bcf3a1-01ff-4fd8-ab21-b5649e8a2f26",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"0c7bf6c9-ca48-4bd3-89c2-f7a315ce27ed"
],
"outfit_products": [
{
"id": "15120161-85fa-4bf9-8977-23a8d754ade6",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "67cf87d0-9aec-4989-b60e-8ec22498ca8c",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"f43114c6-0f28-4c24-b4f9-99f69c4064dc"
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"shooting_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Id"
},
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"subject_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Name"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"product_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Name"
},
"product_sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Sku"
},
"product_cover_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Cover Image Url"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id"
},
"set_design": {
"anyOf": [
{
"$ref": "#/components/schemas/SetDesignPublic"
},
{
"type": "null"
}
]
},
"file_format": {
"type": "string",
"title": "File Format",
"default": "JPG"
},
"status": {
"$ref": "#/components/schemas/ShootingLookStatus"
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"assignee": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"pose_presets": {
"items": {
"$ref": "#/components/schemas/PosePresetPublic"
},
"type": "array",
"title": "Pose Presets",
"default": []
},
"shots": {
"items": {
"$ref": "#/components/schemas/ShotPublic"
},
"type": "array",
"title": "Shots",
"default": []
},
"outfit_proposals": {
"items": {
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
"type": "array",
"title": "Outfit Proposals",
"default": []
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"outfit": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
{
"type": "null"
}
]
},
"outfit_ref_imgs_urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outfit Ref Imgs Urls",
"description": "Get outfit reference image URLs from the selected outfit.",
"readOnly": true
},
"outfit_instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Get outfit instruction from the selected outfit.",
"readOnly": true
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids",
"description": "Get outfit product IDs from the selected outfit (supports both storage mechanisms).",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"shooting_id",
"status",
"outfit_ref_imgs_urls",
"outfit_instruction",
"outfit_product_ids"
],
"title": "ShootingLookPublic",
"description": "Response model for ShootingLook."
}
POST /api/v1/shootings/looks/{look_id}/outfit¶
Create Manual Outfit For Look
Description
Create a manual outfit for a look and set it as the active outfit.
This endpoint: 1. Creates a new outfit with the provided data (manual, not LLM-generated) 2. Sets it as THE outfit for the look (not a proposal) 3. Deletes all existing outfit proposals
The outfit data is provided by the client, unlike LLM-generated outfits which are created asynchronously via the styling service.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No |
Request body
{
"outfit_ref_imgs_urls": null,
"outfit_instruction": null,
"outfit_product_ids": [
"a3deccf5-ca50-4334-a631-d0e36e0f5984"
]
}
Schema of the request body
{
"properties": {
"outfit_ref_imgs_urls": {
"anyOf": [
{
"items": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/components/schemas/MediaInput"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Outfit Ref Imgs Urls"
},
"outfit_instruction": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"title": "Outfit Instruction"
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids"
}
},
"type": "object",
"title": "ManualOutfitCreate",
"description": "Request model for manually creating an outfit for a look (shooting_look_id from path)."
}
Responses
{
"id": "bf414e05-7952-4080-9f17-9835a9139d08",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "2dc5afa2-eef6-47f0-ad7f-701c20ebca1d",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "8c28db4c-f5a2-4adc-bec5-3741ec36c518",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "38393353-915b-4bcb-aa50-cc2ca4e1869e",
"owner_id": "5a3bb3a3-82e0-483d-a899-cb06d5ac9ec5",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "4ab2e081-b75a-4d73-8220-55e025079580",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "3d5fb230-8838-4986-80ed-7e8d178f58a1",
"shot_id": "517a351d-ca91-41ea-a499-a9eb23952b45",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "fcb6d26c-4920-48a3-b874-c7cc86a8de50",
"shot_revision_id": "dd5e94d5-ea76-4337-ac09-53e2d2abf629",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "4662ae8f-c46b-4b87-a531-a6b16679037a",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "2bcc6512-32e4-4433-aaa4-cd13ce6c69f7",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "1012d8f2-782b-40c8-a98f-d3b72356d47e",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "146b8c21-596f-40c3-a1bb-53a91f9a9c99",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"a447175c-bb6f-4305-9474-d457a786bb1d"
],
"outfit_products": [
{
"id": "f394508f-9da1-46fc-a0b3-5636677d54db",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "0485d1cf-fbcf-401b-b7c6-9777642f87ec",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"f7968bd0-1683-4ae0-80d5-58f02c0a6012"
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"shooting_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Id"
},
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"subject_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Name"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"product_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Name"
},
"product_sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Sku"
},
"product_cover_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Cover Image Url"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id"
},
"set_design": {
"anyOf": [
{
"$ref": "#/components/schemas/SetDesignPublic"
},
{
"type": "null"
}
]
},
"file_format": {
"type": "string",
"title": "File Format",
"default": "JPG"
},
"status": {
"$ref": "#/components/schemas/ShootingLookStatus"
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"assignee": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"pose_presets": {
"items": {
"$ref": "#/components/schemas/PosePresetPublic"
},
"type": "array",
"title": "Pose Presets",
"default": []
},
"shots": {
"items": {
"$ref": "#/components/schemas/ShotPublic"
},
"type": "array",
"title": "Shots",
"default": []
},
"outfit_proposals": {
"items": {
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
"type": "array",
"title": "Outfit Proposals",
"default": []
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"outfit": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
{
"type": "null"
}
]
},
"outfit_ref_imgs_urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outfit Ref Imgs Urls",
"description": "Get outfit reference image URLs from the selected outfit.",
"readOnly": true
},
"outfit_instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Get outfit instruction from the selected outfit.",
"readOnly": true
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids",
"description": "Get outfit product IDs from the selected outfit (supports both storage mechanisms).",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"shooting_id",
"status",
"outfit_ref_imgs_urls",
"outfit_instruction",
"outfit_product_ids"
],
"title": "ShootingLookPublic",
"description": "Response model for ShootingLook."
}
POST /api/v1/shootings/looks/{look_id}/finalize-outfit¶
Finalize Look Outfit
Description
Finalize outfit for a shooting look.
This endpoint allows users to complete the outfit configuration for a look by: - Option A: Selecting an existing outfit proposal (by outfit_id) - Option B: Creating a new outfit with provided data
After finalization: 1. The selected/created outfit becomes THE active outfit for the look 2. All other outfit proposals are deleted 3. The look's outfit_id is set to reference the finalized outfit
Mutual Exclusivity: Request must contain EITHER outfit_id OR outfit creation fields, not both.
Authorization: User must own the shooting containing this look.
Args: session: Database session dependency current_user: Authenticated user look_id: UUID of the shooting look to finalize outfit for outfit_in: Request containing either outfit_id or outfit creation fields
Returns: Updated ShootingLook with finalized outfit
Raises: HTTPException 404: If look or outfit not found HTTPException 403: If user doesn't have permission HTTPException 400: If outfit doesn't belong to look or validation fails
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No |
Request body
{
"outfit_id": null,
"outfit_ref_imgs_urls": null,
"outfit_instruction": null,
"outfit_product_ids": null
}
Schema of the request body
{
"properties": {
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id",
"description": "ID of existing outfit proposal to finalize"
},
"outfit_ref_imgs_urls": {
"anyOf": [
{
"items": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/components/schemas/MediaInput"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Outfit Ref Imgs Urls",
"description": "Reference image URLs for new outfit"
},
"outfit_instruction": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Instructions for new outfit"
},
"outfit_product_ids": {
"anyOf": [
{
"items": {
"type": "string",
"format": "uuid"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Outfit Product Ids",
"description": "Product IDs for new outfit"
}
},
"type": "object",
"title": "FinalizeOutfitRequest",
"description": "Request model for finalizing an outfit for a shooting look.\n\nEither select an existing outfit proposal OR create a new outfit (mutually exclusive).\n\n**Option A: Select existing outfit**\n- Provide `outfit_id` to select an outfit from the look's proposals\n\n**Option B: Create new outfit**\n- Provide outfit creation fields (outfit_ref_imgs_urls, outfit_instruction, outfit_product_ids)\n\nThe two options are mutually exclusive - must provide one or the other, but not both."
}
Responses
{
"id": "80bd37f1-a74a-4d13-9db0-0a5323e70d51",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_id": "46971504-a9a9-43c2-888e-7a51a8194579",
"subject_id": null,
"subject_name": null,
"product_id": null,
"product_name": null,
"product_sku": null,
"product_cover_image_url": null,
"style_id": null,
"resolution_preset_id": null,
"width": null,
"height": null,
"background_preset_id": null,
"set_design_id": null,
"set_design": null,
"file_format": "string",
"status": "DRAFT",
"shot_status": null,
"assignee_id": null,
"assignee": null,
"pose_presets": [
{
"id": "5ab8405b-3de7-4fb4-8d8e-59e5bac41364",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"name": "string",
"prompt": null,
"shot_type_id": "afedda1f-8544-4a0c-a04b-707e10fd52b8",
"owner_id": "32713bd8-637a-4102-8a10-09e05b50be9f",
"organization_id": null,
"pose_image_url": null,
"pose_image_media": null
}
],
"shots": [
{
"id": "0d2e00cf-388e-436b-800c-ed1629ecd02a",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "d5835767-8372-4e1d-afe3-960d10235819",
"shot_id": "9263c1e6-47de-4849-8619-1e8fbc2891fc",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "8a47a83e-726a-42ea-89ec-fcf1e1a4d50a",
"shot_revision_id": "f6991a83-9e6e-44c8-b86f-a0d945268cfe",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "ad203b2e-1ebe-42e6-b8c7-26b60fbb63bb",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "a2c56bfa-ebf9-4515-9d2c-b00bb86d2f5a",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"outfit_proposals": [
{
"id": "29828752-db41-49ca-b00c-d4317ffddd74",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"shooting_look_id": "e7c406bb-338d-473f-bc08-94e9fb4dd28f",
"outfit_ref_imgs_urls": [
"string"
],
"outfit_ref_images_media": null,
"outfit_instruction": null,
"outfit_product_ids": [
"c910588e-bf0e-4997-b17f-97c7b4f043a9"
],
"outfit_products": [
{
"id": "ddd27578-c889-464f-8e37-9f5eb00d0cc7",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"sku": null,
"name": "string",
"brand": null,
"master_item_code": null,
"product_family": null,
"product_type": null,
"product_type_id": null,
"gender": "MALE",
"age_class": null,
"placement": null,
"zone": null,
"type": null,
"category": null,
"sleeve_type": null,
"neckline": null,
"closure_type": null,
"fit_type": null,
"length_type": null,
"pattern": null,
"materials": null,
"colour": null,
"season": null,
"year": null,
"style_code": null,
"in_store_date": null,
"theme": null,
"brand_collection": null,
"description": null,
"back_description": null,
"ecommerce_description": null,
"brand_metadata": null,
"cover_image_url": null,
"back_image_url": null,
"reference_images": [
"string"
],
"cover_image_media": null,
"back_image_media": null,
"reference_images_media": null,
"data_image_urls": [
"string"
],
"public": true,
"enabled": true,
"archived": true,
"demo": true,
"is_filler": true,
"owner_id": "9d937329-e93e-4048-b3c3-9f3c0bc91faa",
"organization_id": null,
"shot_status": null,
"shot_status_shooting_look_id": null,
"integration_name": null,
"exports_completed": null,
"exports_total": null,
"shots": [
null
]
}
],
"generation_status": null,
"generation_error": null,
"retry_count": 0
}
],
"outfit_id": null,
"outfit": null,
"outfit_ref_imgs_urls": [
"string"
],
"outfit_instruction": null,
"outfit_product_ids": [
"54c4296b-da8a-492b-a2a9-7fe7088484fc"
]
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"shooting_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Id"
},
"subject_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Subject Id"
},
"subject_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Subject Name"
},
"product_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Product Id"
},
"product_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Name"
},
"product_sku": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Sku"
},
"product_cover_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Product Cover Image Url"
},
"style_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Style Id"
},
"resolution_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Resolution Preset Id"
},
"width": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Width"
},
"height": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Height"
},
"background_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Background Preset Id"
},
"set_design_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Set Design Id"
},
"set_design": {
"anyOf": [
{
"$ref": "#/components/schemas/SetDesignPublic"
},
{
"type": "null"
}
]
},
"file_format": {
"type": "string",
"title": "File Format",
"default": "JPG"
},
"status": {
"$ref": "#/components/schemas/ShootingLookStatus"
},
"shot_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotStatus"
},
{
"type": "null"
}
]
},
"assignee_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Assignee Id"
},
"assignee": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"pose_presets": {
"items": {
"$ref": "#/components/schemas/PosePresetPublic"
},
"type": "array",
"title": "Pose Presets",
"default": []
},
"shots": {
"items": {
"$ref": "#/components/schemas/ShotPublic"
},
"type": "array",
"title": "Shots",
"default": []
},
"outfit_proposals": {
"items": {
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
"type": "array",
"title": "Outfit Proposals",
"default": []
},
"outfit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Outfit Id"
},
"outfit": {
"anyOf": [
{
"$ref": "#/components/schemas/ShootingLookOutfitPublic"
},
{
"type": "null"
}
]
},
"outfit_ref_imgs_urls": {
"items": {
"type": "string"
},
"type": "array",
"title": "Outfit Ref Imgs Urls",
"description": "Get outfit reference image URLs from the selected outfit.",
"readOnly": true
},
"outfit_instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Outfit Instruction",
"description": "Get outfit instruction from the selected outfit.",
"readOnly": true
},
"outfit_product_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Outfit Product Ids",
"description": "Get outfit product IDs from the selected outfit (supports both storage mechanisms).",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"created_at",
"updated_at",
"shooting_id",
"status",
"outfit_ref_imgs_urls",
"outfit_instruction",
"outfit_product_ids"
],
"title": "ShootingLookPublic",
"description": "Response model for ShootingLook."
}
POST /api/v1/shootings/looks/{look_id}/start-generations¶
Start Shooting Look Generations
Description
Start automatic generations for all shot types in a shooting look.
This endpoint triggers the generation workflow for each shot in the look, creating AI-generated images based on the subject's base images and reference images from the outfit. The generations run in the background and the endpoint returns immediately.
Behavior: - For each shot type in the look (excluding "back" view angles), creates generations - Uses the subject's base image matching the shot type as the base image - Uses outfit reference images as style references - Skips shot types with "back" view angle - Skips shot types without a matching base image in the subject - Processing happens asynchronously in the background
Parameters:
- generations_per_shot_type: Number of generations to create per shot type (1-10, default: 1)
Authorization: User must own the shooting containing this look.
Args: session: Database session dependency current_user: Authenticated user look_id: UUID of the shooting look to generate for request_in: Optional request body with generation parameters background_tasks: FastAPI background tasks handler
Returns: StartGenerationsResponse confirming generation was started (generation_ids will be empty)
Raises: HTTPException 404: If look or shooting not found HTTPException 403: If user doesn't have permission
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No |
Request body
Responses
{
"message": "string",
"look_id": "64c68dee-1f85-473c-81a4-82de9cd43f27",
"generation_ids": [
"6116bec2-958a-4a09-8f63-26ed1d2e75a9"
],
"generations_per_shot_type": 0
}
Schema of the response body
{
"properties": {
"message": {
"type": "string",
"title": "Message"
},
"look_id": {
"type": "string",
"format": "uuid",
"title": "Look Id"
},
"generation_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Generation Ids"
},
"generations_per_shot_type": {
"type": "integer",
"title": "Generations Per Shot Type"
}
},
"type": "object",
"required": [
"message",
"look_id",
"generation_ids",
"generations_per_shot_type"
],
"title": "StartGenerationsResponse",
"description": "Response model for start generations endpoint."
}
POST /api/v1/shootings/looks/{look_id}/start-shot-type-generations¶
Start Shot Type Generations
Description
Start generations for a specific shot type in a shooting look.
This endpoint triggers the generation workflow for a single shot type, creating AI-generated images based on the subject's base images and reference images from the outfit. The generations run in the background and the endpoint returns immediately.
Behavior: - Creates generations for the specified shot type only - Uses the subject's base image matching the shot type as the base image - Uses outfit reference images as style references - Skips if shot type has "back" view angle - Skips if no matching base image found in the subject - Processing happens asynchronously in the background
Parameters:
- shot_type_id: UUID of the shot type to generate for
- generations_count: Number of generations to create (1-10, default: 1)
Authorization: User must own the shooting containing this look.
Args: session: Database session dependency current_user: Authenticated user look_id: UUID of the shooting look to generate for request_in: Request body with shot_type_id and generations_count background_tasks: FastAPI background tasks handler
Returns: StartShotTypeGenerationsResponse confirming generation was started
Raises: HTTPException 404: If look, shooting, or shot_type not found HTTPException 403: If user doesn't have permission
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No |
Request body
Schema of the request body
{
"properties": {
"shot_type_id": {
"type": "string",
"format": "uuid",
"title": "Shot Type Id",
"description": "UUID of the shot type to generate for"
},
"generations_count": {
"type": "integer",
"maximum": 10.0,
"minimum": 1.0,
"title": "Generations Count",
"description": "Number of generations to create (1-10)",
"default": 1
}
},
"type": "object",
"required": [
"shot_type_id"
],
"title": "StartShotTypeGenerationsRequest",
"description": "Request model for starting generations for a specific shot type in a look."
}
Responses
{
"message": "string",
"look_id": "7f9f7f3c-defb-4286-ba4c-a405df0b0cdd",
"shot_type_id": "75473315-ce58-4895-9c2a-3bab4a675661",
"generation_ids": [
"17b449f1-4fac-46fa-ae27-9ab473f262f6"
],
"generations_count": 0
}
Schema of the response body
{
"properties": {
"message": {
"type": "string",
"title": "Message"
},
"look_id": {
"type": "string",
"format": "uuid",
"title": "Look Id"
},
"shot_type_id": {
"type": "string",
"format": "uuid",
"title": "Shot Type Id"
},
"generation_ids": {
"items": {
"type": "string",
"format": "uuid"
},
"type": "array",
"title": "Generation Ids"
},
"generations_count": {
"type": "integer",
"title": "Generations Count"
}
},
"type": "object",
"required": [
"message",
"look_id",
"shot_type_id",
"generation_ids",
"generations_count"
],
"title": "StartShotTypeGenerationsResponse",
"description": "Response model for start shot type generations endpoint."
}
shots¶
POST /api/v1/shots/¶
Create Shot
Description
Create a new shot.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No |
Request body
Schema of the request body
{
"properties": {
"shot_type_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shot Type Id"
},
"shooting_look_id": {
"type": "string",
"format": "uuid",
"title": "Shooting Look Id"
}
},
"type": "object",
"required": [
"shooting_look_id"
],
"title": "ShotCreate",
"description": "Schema for creating a Shot"
}
Responses
{
"id": "95ab9591-adb3-45eb-9683-2c1a1cef3ce1",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "5f9e074c-097d-46bf-828d-c551eadad16c",
"shot_id": "2a1ed476-058e-4eab-8539-68e3bf8dc61f",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "f060fda9-b677-4bbd-a34f-0b5f66234905",
"shot_revision_id": "6d9c61bd-8ba0-40e1-b1f1-9ebdf6b565e4",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "7bcdca94-a3d1-48f5-8487-f1ac1886414f",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "9fe8e10e-4d48-48c9-97fb-5ec3e269d1c2",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shooting_look_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shooting Look Id"
},
"shot_type": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotTypePublic"
},
{
"type": "null"
}
]
},
"pose_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Pose Preset Id"
},
"rework_available": {
"type": "integer",
"title": "Rework Available"
},
"rework_used": {
"type": "integer",
"title": "Rework Used"
},
"status": {
"$ref": "#/components/schemas/ShotStatus"
},
"current_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Current Revision Id"
},
"revisions": {
"items": {
"$ref": "#/components/schemas/ShotRevisionPublic"
},
"type": "array",
"title": "Revisions",
"default": []
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
}
},
"type": "object",
"required": [
"id",
"rework_available",
"rework_used",
"status",
"created_at",
"updated_at"
],
"title": "ShotPublic",
"description": "Public schema for Shot"
}
GET /api/v1/shots/¶
List Shots
Description
Get list of shots with filtering options.
When organization_id query param is provided, returns shots belonging to shootings in that organization. Without organization_id, returns only personal shots (from shootings not belonging to any organization).
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
has_generations |
query | No | |||
limit |
query | integer | 100 | No | |
organization_id |
query | No | |||
product_id |
query | No | |||
shooting_id |
query | No | |||
shooting_look_id |
query | No | |||
shot_type |
query | No | |||
skip |
query | integer | 0 | No | |
status |
query | No |
Responses
{
"data": [
{
"id": "596062b9-aa57-4e52-9585-360f9e7c6eb1",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "3a7e9051-e7db-439f-9705-dba11d24a081",
"shot_id": "9950ce4a-fb18-42ba-b223-e1a5cc9204b1",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "7cacccec-9566-46b8-807e-ab26ce118b96",
"shot_revision_id": "a843c3da-0d7d-4552-9ce3-166a8a5e4712",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "7e89db8d-c624-4504-a904-1d1eb824bd1f",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "229c3ffe-588a-4739-9e15-d70d69227574",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
],
"count": 0
}
Schema of the response body
GET /api/v1/shots/{shot_id}¶
Get Shot
Description
Get a specific shot by ID.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shot_id |
path | string | No |
Responses
{
"id": "0942e5be-e4b1-4158-996b-632f0dd03d4d",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "4be3dc03-b473-4a41-b12b-1e695df3f90e",
"shot_id": "71237bc8-a8f9-4ac1-9a0f-cd7f41ca3b2b",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "ab230b84-c07b-4bfe-9f0e-6b88d0cef8ea",
"shot_revision_id": "cd41d73d-c012-4a65-881c-94e5b6362969",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "44ede5f4-e19b-48b9-9ae1-38b0a8c50b6a",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "bc595941-fda0-43df-9ad6-9b891e784409",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shooting_look_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shooting Look Id"
},
"shot_type": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotTypePublic"
},
{
"type": "null"
}
]
},
"pose_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Pose Preset Id"
},
"rework_available": {
"type": "integer",
"title": "Rework Available"
},
"rework_used": {
"type": "integer",
"title": "Rework Used"
},
"status": {
"$ref": "#/components/schemas/ShotStatus"
},
"current_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Current Revision Id"
},
"revisions": {
"items": {
"$ref": "#/components/schemas/ShotRevisionPublic"
},
"type": "array",
"title": "Revisions",
"default": []
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
}
},
"type": "object",
"required": [
"id",
"rework_available",
"rework_used",
"status",
"created_at",
"updated_at"
],
"title": "ShotPublic",
"description": "Public schema for Shot"
}
PUT /api/v1/shots/{shot_id}¶
Update Shot
Description
Update a shot.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shot_id |
path | string | No |
Request body
{
"current_revision_id": null,
"shot_type_id": null,
"rework_available": null,
"rework_used": null
}
Schema of the request body
{
"properties": {
"current_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Current Revision Id"
},
"shot_type_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shot Type Id"
},
"rework_available": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Rework Available"
},
"rework_used": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Rework Used"
}
},
"type": "object",
"title": "ShotUpdate",
"description": "Schema for updating a Shot"
}
Responses
{
"id": "6e4e3f8a-c019-4b7e-b899-1f930685a475",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "21d8f4ad-1a8b-4bba-8457-eb33b0d19427",
"shot_id": "fa0e0c78-ae1e-4ce1-93bb-a7ac3301a643",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "a5d65626-0990-4c1f-8ed9-88428b108284",
"shot_revision_id": "0331f8e8-1d95-4ac4-8c27-b9a69196f618",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "94660f5f-3c93-41a0-a708-630eed38c797",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "b8b8da12-f372-47a5-9cb6-46d88a95e5e4",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shooting_look_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shooting Look Id"
},
"shot_type": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotTypePublic"
},
{
"type": "null"
}
]
},
"pose_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Pose Preset Id"
},
"rework_available": {
"type": "integer",
"title": "Rework Available"
},
"rework_used": {
"type": "integer",
"title": "Rework Used"
},
"status": {
"$ref": "#/components/schemas/ShotStatus"
},
"current_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Current Revision Id"
},
"revisions": {
"items": {
"$ref": "#/components/schemas/ShotRevisionPublic"
},
"type": "array",
"title": "Revisions",
"default": []
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
}
},
"type": "object",
"required": [
"id",
"rework_available",
"rework_used",
"status",
"created_at",
"updated_at"
],
"title": "ShotPublic",
"description": "Public schema for Shot"
}
DELETE /api/v1/shots/{shot_id}¶
Delete Shot
Description
Delete a shot.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shot_id |
path | string | No |
Responses
{
"id": "0ee34bf8-cf38-4b4d-b22d-6abcc40bbc3c",
"shooting_look_id": null,
"shot_type": null,
"pose_preset_id": null,
"rework_available": 0,
"rework_used": 0,
"status": "PENDING",
"current_revision_id": null,
"revisions": [
{
"id": "760a51dd-10c8-4626-a297-afad39ba02c0",
"shot_id": "f3ae0453-0287-4c10-8806-421bda76ce22",
"version": 0,
"notes": null,
"shot_status": null,
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "0d3a11f5-3223-490f-bb8c-f1bc55c79d9b",
"shot_revision_id": "0fd8067e-bf59-4f08-8b1a-5e5fad50e494",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "8bcf1310-eb5f-4e11-bb44-91b46ebb7623",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "b78d461f-9b8b-459f-a4a9-fa4c23acb63a",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
],
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z"
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shooting_look_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Shooting Look Id"
},
"shot_type": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotTypePublic"
},
{
"type": "null"
}
]
},
"pose_preset_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Pose Preset Id"
},
"rework_available": {
"type": "integer",
"title": "Rework Available"
},
"rework_used": {
"type": "integer",
"title": "Rework Used"
},
"status": {
"$ref": "#/components/schemas/ShotStatus"
},
"current_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Current Revision Id"
},
"revisions": {
"items": {
"$ref": "#/components/schemas/ShotRevisionPublic"
},
"type": "array",
"title": "Revisions",
"default": []
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
}
},
"type": "object",
"required": [
"id",
"rework_available",
"rework_used",
"status",
"created_at",
"updated_at"
],
"title": "ShotPublic",
"description": "Public schema for Shot"
}
GET /api/v1/shots/{shot_id}/download¶
Download Shot Revision Image
Description
Download the current revision image with metadata processing.
This endpoint: - Applies user's export configuration (format + metadata adapter) - Returns file with Content-Disposition for browser download - Filename generated by metadata adapter based on platform conventions
The image is processed according to the user's ExportConfiguration: - Format conversion (JPEG, PNG, WebP, AVIF) - Metadata injection (DEFAULT or OVS adapter) - Filename generation (adapter-specific naming conventions)
Args: db: Database session shot_id: Shot UUID current_user: Authenticated user
Returns: FileResponse with processed image and Content-Disposition header
Raises: 404: Shot not found 403: User not authorized 400: No current revision or no image 500: Image processing failed
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shot_id |
path | string | No |
Responses
POST /api/v1/shots/{shot_id}/revision¶
Create Shot Revision
Description
Create a new revision for a shot with flexible image input.
This endpoint supports: - Multiple images per revision - Images from predictions, refines, or manual uploads (presigned URLs) - Sketch images for reference - Explicit status setting
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
shot_id |
path | string | No |
Request body
{
"shot_status": "PENDING",
"previous_revision_id": null,
"notes": null,
"images": [
{
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"image_data": null,
"sketch_image_url": null,
"sketch_image_data": null,
"notes": null,
"autogenerated": null
}
]
}
Schema of the request body
{
"properties": {
"shot_status": {
"$ref": "#/components/schemas/ShotStatus"
},
"previous_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Previous Revision Id"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notes"
},
"images": {
"items": {
"$ref": "#/components/schemas/ShotRevisionImageData"
},
"type": "array",
"title": "Images"
}
},
"type": "object",
"required": [
"shot_status",
"images"
],
"title": "CreateShotRevisionRequest",
"description": "Schema for creating a shot revision via the new unified endpoint.\nSupports multiple images with flexible input formats."
}
Responses
{
"id": "84ecd12f-92a9-4bfe-86b7-b37d1cd99ba8",
"shot_id": "bb785094-2e13-4cf2-9651-4d3840752542",
"version": 0,
"notes": null,
"shot_status": "PENDING",
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "457244e3-1d97-4e4b-a7e6-7da7e82fa499",
"shot_revision_id": "a630bbf8-74bb-46a9-a36f-4b187adfb7a4",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "b856736a-7d0f-45ed-9d09-3c66938baeb3",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "98b04d2d-6a6a-48f6-8311-ae9bb45dc213",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shot_id": {
"type": "string",
"format": "uuid",
"title": "Shot Id"
},
"version": {
"type": "integer",
"title": "Version"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notes"
},
"shot_status": {
"$ref": "#/components/schemas/ShotStatus"
},
"shot_revision_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotRevisionStatus"
},
{
"type": "null"
}
]
},
"owner_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Owner Id"
},
"owner": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"previous_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Previous Revision Id"
},
"images": {
"items": {
"$ref": "#/components/schemas/ShotRevisionImagePublic"
},
"type": "array",
"title": "Images",
"default": []
},
"display_name": {
"type": "string",
"title": "Display Name"
},
"effective_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effective Image Url"
},
"push_records": {
"items": {
"$ref": "#/components/schemas/ExternalImagePushPublic"
},
"type": "array",
"title": "Push Records",
"default": []
},
"push_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Push Status",
"description": "Aggregate push status across all integrations.\n\nReturns: None (no pushes), PENDING, IN_PROGRESS, AWAITING_CONFIRMATION, COMPLETED, or FAILED\nPriority: FAILED > IN_PROGRESS > AWAITING_CONFIRMATION > PENDING > COMPLETED",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"shot_id",
"version",
"shot_status",
"created_at",
"updated_at",
"display_name",
"push_status"
],
"title": "ShotRevisionPublic",
"description": "Public schema for ShotRevision"
}
GET /api/v1/shots/revisions/upload-url¶
Get Revision Upload Url
Description
Get a presigned URL for direct upload of revision images.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
content_type |
query | string | image/jpeg | No | |
filename |
query | string | No | ||
shot_id |
query | string | No |
Responses
GET /api/v1/shots/revisions/{revision_id}¶
Get Revision
Description
Get a specific revision by ID.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
revision_id |
path | string | No |
Responses
{
"id": "ee27ab58-3c15-4682-a363-f2c8937ca25e",
"shot_id": "280ee30a-8237-4a37-afe0-75d9e66cd06c",
"version": 0,
"notes": null,
"shot_status": "PENDING",
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "28389e8f-77e2-4e7f-a41f-a069a3ae99f7",
"shot_revision_id": "2cfb2235-7f8a-412c-8b29-cc4c5bfc45dc",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "f60575b4-975d-4053-8853-ca2165b0fc7e",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "42375fd5-bab0-48d8-b43f-4502b3af317d",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shot_id": {
"type": "string",
"format": "uuid",
"title": "Shot Id"
},
"version": {
"type": "integer",
"title": "Version"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notes"
},
"shot_status": {
"$ref": "#/components/schemas/ShotStatus"
},
"shot_revision_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotRevisionStatus"
},
{
"type": "null"
}
]
},
"owner_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Owner Id"
},
"owner": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"previous_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Previous Revision Id"
},
"images": {
"items": {
"$ref": "#/components/schemas/ShotRevisionImagePublic"
},
"type": "array",
"title": "Images",
"default": []
},
"display_name": {
"type": "string",
"title": "Display Name"
},
"effective_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effective Image Url"
},
"push_records": {
"items": {
"$ref": "#/components/schemas/ExternalImagePushPublic"
},
"type": "array",
"title": "Push Records",
"default": []
},
"push_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Push Status",
"description": "Aggregate push status across all integrations.\n\nReturns: None (no pushes), PENDING, IN_PROGRESS, AWAITING_CONFIRMATION, COMPLETED, or FAILED\nPriority: FAILED > IN_PROGRESS > AWAITING_CONFIRMATION > PENDING > COMPLETED",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"shot_id",
"version",
"shot_status",
"created_at",
"updated_at",
"display_name",
"push_status"
],
"title": "ShotRevisionPublic",
"description": "Public schema for ShotRevision"
}
DELETE /api/v1/shots/revisions/{revision_id}¶
Delete Shot Revision
Description
Delete a shot revision and its associated media resources.
This endpoint: - Detaches media resources for all images (handles file cleanup via MediaResource) - Deletes the specified revision from the database - If deleting the current revision, updates the shot's current_revision_id to the deleted revision's previous_revision_id (or None if there wasn't one)
Constraints: - Cannot delete a revision that is referenced by other revisions as their previous_revision
Args: db: Database session dependency revision_id: UUID of the revision to delete current_user: Current authenticated user media_service: Media resource service for detaching media
Returns: None (204 NO_CONTENT on success)
Raises: HTTPException: 404 if revision not found HTTPException: 403 if user not authorized HTTPException: 409 if business rules prevent deletion (referenced by other revisions) HTTPException: 500 if database error occurs
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
revision_id |
path | string | No |
Responses
POST /api/v1/shots/revisions/{revision_id}/set-current¶
Set Revision As Current
Description
Set a revision as the current revision for the shot.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
revision_id |
path | string | No |
Responses
{
"id": "4e12e421-0484-4a42-b4c5-e0b598801d5a",
"shot_id": "70332771-d770-4ee3-80e9-ba691c27d7ea",
"version": 0,
"notes": null,
"shot_status": "PENDING",
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "607203e6-8fac-4980-bb48-cdadd600feb2",
"shot_revision_id": "4ac60b37-ed71-419e-a8af-51121026fb98",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "13c6bb6e-c8dc-4edf-a6d7-dd86dec8905d",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "d317c657-8394-46d5-8024-6917b9a08084",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shot_id": {
"type": "string",
"format": "uuid",
"title": "Shot Id"
},
"version": {
"type": "integer",
"title": "Version"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notes"
},
"shot_status": {
"$ref": "#/components/schemas/ShotStatus"
},
"shot_revision_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotRevisionStatus"
},
{
"type": "null"
}
]
},
"owner_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Owner Id"
},
"owner": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"previous_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Previous Revision Id"
},
"images": {
"items": {
"$ref": "#/components/schemas/ShotRevisionImagePublic"
},
"type": "array",
"title": "Images",
"default": []
},
"display_name": {
"type": "string",
"title": "Display Name"
},
"effective_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effective Image Url"
},
"push_records": {
"items": {
"$ref": "#/components/schemas/ExternalImagePushPublic"
},
"type": "array",
"title": "Push Records",
"default": []
},
"push_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Push Status",
"description": "Aggregate push status across all integrations.\n\nReturns: None (no pushes), PENDING, IN_PROGRESS, AWAITING_CONFIRMATION, COMPLETED, or FAILED\nPriority: FAILED > IN_PROGRESS > AWAITING_CONFIRMATION > PENDING > COMPLETED",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"shot_id",
"version",
"shot_status",
"created_at",
"updated_at",
"display_name",
"push_status"
],
"title": "ShotRevisionPublic",
"description": "Public schema for ShotRevision"
}
POST /api/v1/shots/revisions/{revision_id}/export¶
Export Revision
Description
Export a revision to external systems (OVS).
Creates export records for each configured external integration and immediately triggers the push to the external service.
Requirements: - Revision must be in APPROVED status - Product must have at least one ExternalProductMapping configured
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
revision_id |
path | string | No |
Responses
{
"revision_id": "d76ac572-003b-43c8-8a54-55938d510c66",
"exports_created": 0,
"exports_skipped": 0,
"message": "string"
}
Schema of the response body
{
"properties": {
"revision_id": {
"type": "string",
"format": "uuid",
"title": "Revision Id"
},
"exports_created": {
"type": "integer",
"title": "Exports Created"
},
"exports_skipped": {
"type": "integer",
"title": "Exports Skipped"
},
"message": {
"type": "string",
"title": "Message"
}
},
"type": "object",
"required": [
"revision_id",
"exports_created",
"exports_skipped",
"message"
],
"title": "ExportRevisionResponse",
"description": "Response for export revision endpoint."
}
POST /api/v1/shots/looks/{look_id}/export¶
Export Look
Description
Export all eligible shots from a look to external systems (OVS).
For each shot in the look: - If the current revision is APPROVED, creates export records for each configured external integration and immediately triggers the push to the external service.
Requirements: - Look must exist and user must have permission - Product must have at least one ExternalProductMapping configured - Only shots with APPROVED status are exported
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
look_id |
path | string | No |
Responses
{
"look_id": "7b20a2d5-81d1-4a85-9f93-6d9ba6ac8f14",
"revisions_processed": 0,
"revisions_skipped": 0,
"exports_created": 0,
"exports_skipped": 0,
"message": "string"
}
Schema of the response body
{
"properties": {
"look_id": {
"type": "string",
"format": "uuid",
"title": "Look Id"
},
"revisions_processed": {
"type": "integer",
"title": "Revisions Processed"
},
"revisions_skipped": {
"type": "integer",
"title": "Revisions Skipped"
},
"exports_created": {
"type": "integer",
"title": "Exports Created"
},
"exports_skipped": {
"type": "integer",
"title": "Exports Skipped"
},
"message": {
"type": "string",
"title": "Message"
}
},
"type": "object",
"required": [
"look_id",
"revisions_processed",
"revisions_skipped",
"exports_created",
"exports_skipped",
"message"
],
"title": "ExportLookResponse",
"description": "Response for export look endpoint."
}
POST /api/v1/shots/revisions/{revision_id}/restore¶
Restore Shot Revision
Description
Restore a shot to a previous revision by deleting all revisions that came after it.
This endpoint: - Finds all revisions that came after the target in the chain - Detaches media resources and deletes those revisions - Sets the target revision as the current revision
Example: Given chain rev1 --> rev2 --> rev3 --> rev4 (current) - Restoring to rev2 deletes rev3 and rev4 - rev2 becomes the new current revision
If the target revision is already current, this is a no-op.
Args: db: Database session dependency revision_id: UUID of the revision to restore to current_user: Current authenticated user media_service: Media resource service for detaching media
Returns: ShotRevisionPublic: The restored revision
Raises: HTTPException: 404 if revision not found HTTPException: 403 if user not authorized HTTPException: 409 if business rules prevent restoration (external references) HTTPException: 500 if database error occurs
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
OAuth2PasswordBearer |
header | string | N/A | No | |
revision_id |
path | string | No |
Responses
{
"id": "eb4ea77c-6d4e-47c6-9bf6-fbee425fb83e",
"shot_id": "47cab502-dede-40e9-8006-73827b2061f6",
"version": 0,
"notes": null,
"shot_status": "PENDING",
"shot_revision_status": null,
"owner_id": null,
"owner": null,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"previous_revision_id": null,
"images": [
{
"id": "c3fe7093-718b-4500-822b-0efbcbfdfc2a",
"shot_revision_id": "733a3404-169f-4cea-91e1-0102e4cf1e85",
"source_type": "PREDICTION",
"prediction_id": null,
"refine_id": null,
"image_url": null,
"sketch_image_url": null,
"image_media": null,
"sketch_image_media": null,
"notes": null,
"autogenerated": true,
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"effective_image_url": null
}
],
"display_name": "string",
"effective_image_url": null,
"push_records": [
{
"id": "ffe1357f-976e-4c42-9b0d-2318bd92353d",
"created_at": "2022-04-13T15:42:05.901Z",
"updated_at": "2022-04-13T15:42:05.901Z",
"integration_id": "c2fa3497-2a8a-463d-9d96-ce5dcc7d5d6f",
"push_status": "PENDING",
"pushed_at": null,
"completed_at": null,
"error_message": null
}
],
"push_status": null
}
Schema of the response body
{
"properties": {
"id": {
"type": "string",
"format": "uuid",
"title": "Id"
},
"shot_id": {
"type": "string",
"format": "uuid",
"title": "Shot Id"
},
"version": {
"type": "integer",
"title": "Version"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Notes"
},
"shot_status": {
"$ref": "#/components/schemas/ShotStatus"
},
"shot_revision_status": {
"anyOf": [
{
"$ref": "#/components/schemas/ShotRevisionStatus"
},
{
"type": "null"
}
]
},
"owner_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Owner Id"
},
"owner": {
"anyOf": [
{
"$ref": "#/components/schemas/UserSummary"
},
{
"type": "null"
}
]
},
"created_at": {
"type": "string",
"format": "date-time",
"title": "Created At"
},
"updated_at": {
"type": "string",
"format": "date-time",
"title": "Updated At"
},
"previous_revision_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Previous Revision Id"
},
"images": {
"items": {
"$ref": "#/components/schemas/ShotRevisionImagePublic"
},
"type": "array",
"title": "Images",
"default": []
},
"display_name": {
"type": "string",
"title": "Display Name"
},
"effective_image_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Effective Image Url"
},
"push_records": {
"items": {
"$ref": "#/components/schemas/ExternalImagePushPublic"
},
"type": "array",
"title": "Push Records",
"default": []
},
"push_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Push Status",
"description": "Aggregate push status across all integrations.\n\nReturns: None (no pushes), PENDING, IN_PROGRESS, AWAITING_CONFIRMATION, COMPLETED, or FAILED\nPriority: FAILED > IN_PROGRESS > AWAITING_CONFIRMATION > PENDING > COMPLETED",
"readOnly": true
}
},
"type": "object",
"required": [
"id",
"shot_id",
"version",
"shot_status",
"created_at",
"updated_at",
"display_name",
"push_status"
],
"title": "ShotRevisionPublic",
"description": "Public schema for ShotRevision"
}
Schemas¶
AgeClass¶
Type: string
BaseImagePublic¶
| Name | Type | Description |
|---|---|---|
image_url |
string | |
shot_type_id |
string(uuid) | |
shot_type_label |
string |
BodyType¶
Type: string
CreateShotRevisionRequest¶
| Name | Type | Description |
|---|---|---|
images |
Array<ShotRevisionImageData> | |
notes |
||
previous_revision_id |
||
shot_status |
ShotStatus |
DefaultShotTypes¶
Type: string
DraftLooksSummary¶
| Name | Type | Description |
|---|---|---|
generating_count |
integer | |
total_draft_looks |
integer |
ExportLookResponse¶
| Name | Type | Description |
|---|---|---|
exports_created |
integer | |
exports_skipped |
integer | |
look_id |
string(uuid) | |
message |
string | |
revisions_processed |
integer | |
revisions_skipped |
integer |
ExportRevisionResponse¶
| Name | Type | Description |
|---|---|---|
exports_created |
integer | |
exports_skipped |
integer | |
message |
string | |
revision_id |
string(uuid) |
ExternalImagePushPublic¶
| Name | Type | Description |
|---|---|---|
completed_at |
||
created_at |
string(date-time) | |
error_message |
||
id |
string(uuid) | |
integration_id |
string(uuid) | |
push_status |
PushStatus | |
pushed_at |
||
updated_at |
string(date-time) |
EyeColor¶
Type: string
FinalizeOutfitRequest¶
| Name | Type | Description |
|---|---|---|
outfit_id |
ID of existing outfit proposal to finalize | |
outfit_instruction |
Instructions for new outfit | |
outfit_product_ids |
Product IDs for new outfit | |
outfit_ref_imgs_urls |
Reference image URLs for new outfit |
Gender¶
Type: string
GenerateShootingLooksRequest¶
| Name | Type | Description |
|---|---|---|
default_background_preset_id |
||
default_file_format |
string | |
default_height |
||
default_instructions |
string | |
default_resolution_preset_id |
||
default_style_id |
||
default_width |
||
generate_base_images |
boolean | |
generate_outfit |
boolean | |
pose_preset_ids |
Override the pose presets from guidelines. When provided, these pose presets are baked into every created look instead of those from the shooting's default guidelines. | |
product_filters |
Product filters matching the read_products endpoint (archived, enabled, brand, brand_collection, demo, search, shot_statuses, gender, product_type, sort_by, sort_order, skip, limit) | |
product_ids |
Simple list of product IDs (use with generate_outfit=True for AI generation) | |
product_outfit_configs |
Per-product outfit configurations (use with generate_outfit=False for manual config) | |
set_design_id |
Override the set design from guidelines. When provided, this set design is baked into every created look instead of the one from the shooting's default guidelines. | |
shot_type_ids |
Array<string(uuid)> | |
status |
||
subject_ids |
Array<string(uuid)> | |
unisex_gender_preference |
Controls how UNISEX products are paired with subjects. MALE: pair only with male subjects. FEMALE: pair only with female subjects. UNISEX or None: pair with all subjects (default behavior). |
GenerateShootingLooksResponse¶
| Name | Type | Description |
|---|---|---|
generation_results |
Array<GenerationCreationResult> | |
looks |
Array<ShootingLookPublic> | |
total_generations_created |
integer |
GenerationCreationResult¶
| Name | Type | Description |
|---|---|---|
generation_id |
string(uuid) | |
look_id |
string(uuid) | |
shot_id |
string(uuid) |
HairColor¶
Type: string
HTTPValidationError¶
| Name | Type | Description |
|---|---|---|
detail |
Array<ValidationError> |
ManualOutfitCreate¶
| Name | Type | Description |
|---|---|---|
outfit_instruction |
||
outfit_product_ids |
Array<string(uuid)> | |
outfit_ref_imgs_urls |
MediaInput¶
| Name | Type | Description |
|---|---|---|
alt_text |
||
caption |
||
color_profile |
||
dominant_color |
||
duration |
||
height |
||
media_resource_id |
||
protected |
boolean | |
url |
||
width |
MediaResourcePublic¶
| Name | Type | Description |
|---|---|---|
alt_text |
||
aspect_ratio |
||
caption |
||
color_profile |
||
content_hash |
string | |
created_at |
string(date-time) | |
dominant_color |
||
duration |
||
extension |
string | |
file_size |
integer | |
height |
||
id |
string(uuid) | |
orientation |
||
protected |
boolean | |
resource_type |
MediaResourceType | |
url |
string | |
width |
MediaResourceType¶
Type: string
Message¶
| Name | Type | Description |
|---|---|---|
message |
string |
OutfitGenerationStatus¶
Type: string
PosePresetPublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
id |
string(uuid) | |
name |
string | |
organization_id |
||
owner_id |
string(uuid) | |
pose_image_media |
||
pose_image_url |
||
prompt |
||
shot_type_id |
string(uuid) | |
updated_at |
string(date-time) |
ProductGender¶
Type: string
ProductOutfitConfig¶
| Name | Type | Description |
|---|---|---|
background_preset_id |
||
file_format |
string | |
height |
||
outfit_instruction |
||
outfit_product_ids |
Array<string(uuid)> | |
outfit_ref_imgs_urls |
||
product_id |
string(uuid) | ID of the product for this configuration |
resolution_preset_id |
||
style_id |
||
width |
ProductPlacement¶
Type: string
ProductPublic¶
| Name | Type | Description |
|---|---|---|
age_class |
||
archived |
boolean | |
back_description |
||
back_image_media |
||
back_image_url |
||
brand |
||
brand_collection |
||
brand_metadata |
||
category |
||
closure_type |
||
colour |
||
cover_image_media |
||
cover_image_url |
||
created_at |
string(date-time) | |
data_image_urls |
Array<string> | |
demo |
boolean | |
description |
||
ecommerce_description |
||
enabled |
boolean | |
exports_completed |
||
exports_total |
||
fit_type |
||
gender |
ProductGender | |
id |
string(uuid) | |
in_store_date |
||
integration_name |
||
is_filler |
boolean | |
length_type |
||
master_item_code |
||
materials |
||
name |
string | |
neckline |
||
organization_id |
||
owner_id |
string(uuid) | |
pattern |
||
placement |
||
product_family |
||
product_type |
||
product_type_id |
||
public |
boolean | |
reference_images |
Array<string> | |
reference_images_media |
||
season |
||
shot_status |
||
shot_status_shooting_look_id |
||
shots |
Array<> | |
sku |
||
sleeve_type |
||
style_code |
||
theme |
||
type |
||
updated_at |
string(date-time) | |
year |
||
zone |
ProductShootingStatus¶
Type: string
PushStatus¶
Type: string
RevisionSource¶
Type: string
SetBaseImagePublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
id |
string(uuid) | |
image_media |
||
image_url |
||
shot_type_id |
string(uuid) | |
subject_id |
string(uuid) | |
updated_at |
string(date-time) |
SetDesignPublic¶
| Name | Type | Description |
|---|---|---|
background_preset_id |
||
base_images |
Array<SetBaseImagePublic> | |
created_at |
string(date-time) | |
description |
||
id |
string(uuid) | |
name |
string | |
organization_id |
||
owner_id |
string(uuid) | |
reference_images |
Array<SetReferenceImagePublic> | |
subject_portraits |
Array<SubjectPortraitPublic> | |
updated_at |
string(date-time) |
SetReferenceImagePublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
id |
string(uuid) | |
image_media |
||
image_url |
||
label |
||
shot_type_id |
string(uuid) | |
updated_at |
string(date-time) |
ShootingCreate¶
| Name | Type | Description |
|---|---|---|
archived |
boolean | |
brand |
||
collection |
||
default_guidelines_id |
Default guidelines preset for this shooting | |
description |
||
due_date |
string(date-time) | |
name |
string | |
organization_id |
Organization this shooting belongs to | |
season |
ShootingDetailPublic¶
| Name | Type | Description |
|---|---|---|
archived |
boolean | |
brand |
||
collection |
||
created_at |
string(date-time) | |
default_guidelines |
||
default_guidelines_id |
||
description |
||
due_date |
||
id |
string(uuid) | |
looks |
Array<ShootingLookPublic> | |
name |
string | |
organization_id |
||
owner_id |
string(uuid) | |
season |
||
shot_status |
||
status |
||
updated_at |
string(date-time) |
ShootingGuidelinesPublic¶
| Name | Type | Description |
|---|---|---|
background_preset_id |
||
created_at |
string(date-time) | |
file_format |
string | |
id |
string(uuid) | |
name |
string | |
organization_id |
||
owner_id |
string(uuid) | |
pose_presets |
Array<PosePresetPublic> | |
resolution_preset_id |
||
set_design |
||
set_design_id |
||
shot_types |
Array<ShotTypePublic> | |
subjects |
Array<SubjectPublic> | |
updated_at |
string(date-time) |
ShootingLookComputedStatus¶
Type: string
ShootingLookOutfitPublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
generation_error |
||
generation_status |
||
id |
string(uuid) | |
outfit_instruction |
||
outfit_product_ids |
Array<string(uuid)> | |
outfit_products |
Array<ProductPublic> | |
outfit_ref_images_media |
||
outfit_ref_imgs_urls |
Array<string> | |
retry_count |
integer | |
shooting_look_id |
string(uuid) | |
updated_at |
string(date-time) |
ShootingLookPublic¶
| Name | Type | Description |
|---|---|---|
assignee |
||
assignee_id |
||
background_preset_id |
||
created_at |
string(date-time) | |
file_format |
string | |
height |
||
id |
string(uuid) | |
outfit |
||
outfit_id |
||
outfit_instruction |
Get outfit instruction from the selected outfit. | |
outfit_product_ids |
Array<string(uuid)> | Get outfit product IDs from the selected outfit (supports both storage mechanisms). |
outfit_proposals |
Array<ShootingLookOutfitPublic> | |
outfit_ref_imgs_urls |
Array<string> | Get outfit reference image URLs from the selected outfit. |
pose_presets |
Array<PosePresetPublic> | |
product_cover_image_url |
||
product_id |
||
product_name |
||
product_sku |
||
resolution_preset_id |
||
set_design |
||
set_design_id |
||
shooting_id |
string(uuid) | |
shot_status |
||
shots |
Array<ShotPublic> | |
status |
ShootingLookStatus | |
style_id |
||
subject_id |
||
subject_name |
||
updated_at |
string(date-time) | |
width |
ShootingLooksPublic¶
| Name | Type | Description |
|---|---|---|
count |
integer | |
data |
Array<ShootingLookPublic> |
ShootingLooksSummaryPublic¶
| Name | Type | Description |
|---|---|---|
count |
integer | |
data |
Array<ShootingLookSummary> |
ShootingLookStatus¶
Type: string
ShootingLookSummary¶
| Name | Type | Description |
|---|---|---|
assignee |
||
assignee_id |
||
created_at |
string(date-time) | |
id |
string(uuid) | |
outfit_generation_status |
||
outfit_products_count |
integer | |
product_cover_image_url |
||
product_id |
||
product_name |
||
product_sku |
||
shooting_id |
string(uuid) | |
shot_status |
||
shots |
Array<ShotSummary> | |
status |
ShootingLookStatus | |
updated_at |
string(date-time) |
ShootingLookUpdate¶
| Name | Type | Description |
|---|---|---|
assignee_id |
||
background_preset_id |
||
file_format |
||
height |
||
outfit_id |
||
product_id |
||
resolution_preset_id |
||
shot_type_ids |
||
status |
||
style_id |
||
subject_id |
||
width |
ShootingPublic¶
| Name | Type | Description |
|---|---|---|
archived |
boolean | |
brand |
||
collection |
||
created_at |
string(date-time) | |
default_guidelines |
||
default_guidelines_id |
||
description |
||
due_date |
||
id |
string(uuid) | |
name |
string | |
organization_id |
||
owner_id |
string(uuid) | |
season |
||
shot_status |
||
status |
||
updated_at |
string(date-time) |
ShootingsPublic¶
| Name | Type | Description |
|---|---|---|
count |
integer | |
data |
Array<ShootingPublic> |
ShootingStatus¶
Type: string
ShootingStatusCount¶
| Name | Type | Description |
|---|---|---|
count |
integer | |
status |
ShootingLookComputedStatus |
ShootingStatusFilter¶
Type: string
ShootingSummary¶
| Name | Type | Description |
|---|---|---|
status_breakdown |
Array<ShootingStatusCount> | |
total_products |
integer | |
total_shooting_looks |
integer |
ShootingUpdate¶
| Name | Type | Description |
|---|---|---|
archived |
||
brand |
||
collection |
||
default_guidelines_id |
Default guidelines preset for this shooting | |
description |
||
due_date |
||
name |
||
organization_id |
Organization to transfer this shooting to | |
season |
ShotCreate¶
| Name | Type | Description |
|---|---|---|
shooting_look_id |
string(uuid) | |
shot_type_id |
ShotPublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
current_revision_id |
||
id |
string(uuid) | |
pose_preset_id |
||
revisions |
Array<ShotRevisionPublic> | |
rework_available |
integer | |
rework_used |
integer | |
shooting_look_id |
||
shot_type |
||
status |
ShotStatus | |
updated_at |
string(date-time) |
ShotRevisionImageData¶
| Name | Type | Description |
|---|---|---|
autogenerated |
||
image_data |
||
image_url |
||
notes |
||
prediction_id |
||
refine_id |
||
sketch_image_data |
||
sketch_image_url |
||
source_type |
RevisionSource |
ShotRevisionImagePublic¶
| Name | Type | Description |
|---|---|---|
autogenerated |
boolean | |
created_at |
string(date-time) | |
effective_image_url |
||
id |
string(uuid) | |
image_media |
||
image_url |
||
notes |
||
prediction_id |
||
refine_id |
||
shot_revision_id |
string(uuid) | |
sketch_image_media |
||
sketch_image_url |
||
source_type |
RevisionSource | |
updated_at |
string(date-time) |
ShotRevisionPublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
display_name |
string | |
effective_image_url |
||
id |
string(uuid) | |
images |
Array<ShotRevisionImagePublic> | |
notes |
||
owner |
||
owner_id |
||
previous_revision_id |
||
push_records |
Array<ExternalImagePushPublic> | |
push_status |
Aggregate push status across all integrations. Returns: None (no pushes), PENDING, IN_PROGRESS, AWAITING_CONFIRMATION, COMPLETED, or FAILED Priority: FAILED > IN_PROGRESS > AWAITING_CONFIRMATION > PENDING > COMPLETED | |
shot_id |
string(uuid) | |
shot_revision_status |
||
shot_status |
ShotStatus | |
updated_at |
string(date-time) | |
version |
integer |
ShotRevisionStatus¶
Type: string
ShotsPublic¶
| Name | Type | Description |
|---|---|---|
count |
integer | |
data |
Array<ShotPublic> |
ShotStatus¶
Type: string
ShotStatusFilter¶
Type: string
ShotSummary¶
| Name | Type | Description |
|---|---|---|
current_revision_id |
||
id |
string(uuid) | |
push_status |
||
shot_type |
||
status |
ShotStatus |
ShotTypeFraming¶
Type: string
ShotTypePublic¶
| Name | Type | Description |
|---|---|---|
core_focus |
boolean | |
created_at |
string(date-time) | |
default_shot_type |
||
file_naming_convention |
||
framing |
ShotTypeFraming | |
id |
string(uuid) | |
margins |
||
name |
string | |
organization_id |
||
owner_id |
||
prompt |
||
prompt_builder_section |
||
public |
boolean | |
reference_image |
||
reference_image_url |
||
shot_type_prompt_instruction |
||
shot_type_ref_image_url |
||
updated_at |
string(date-time) | |
view_angle |
ViewAngle |
ShotUpdate¶
| Name | Type | Description |
|---|---|---|
current_revision_id |
||
rework_available |
||
rework_used |
||
shot_type_id |
StartGenerationsRequest¶
| Name | Type | Description |
|---|---|---|
generations_per_shot_type |
integer | Number of generations to create per shot type (1-10) |
StartGenerationsResponse¶
| Name | Type | Description |
|---|---|---|
generation_ids |
Array<string(uuid)> | |
generations_per_shot_type |
integer | |
look_id |
string(uuid) | |
message |
string |
StartShotTypeGenerationsRequest¶
| Name | Type | Description |
|---|---|---|
generations_count |
integer | Number of generations to create (1-10) |
shot_type_id |
string(uuid) | UUID of the shot type to generate for |
StartShotTypeGenerationsResponse¶
| Name | Type | Description |
|---|---|---|
generation_ids |
Array<string(uuid)> | |
generations_count |
integer | |
look_id |
string(uuid) | |
message |
string | |
shot_type_id |
string(uuid) |
SubjectAgeClass¶
Type: string
SubjectMeasurementsPublic¶
| Name | Type | Description |
|---|---|---|
bust_cm |
||
eye_color |
||
hair_color |
||
height_cm |
||
hips_cm |
||
id |
string(uuid) | |
shoe_eu |
||
waist_cm |
SubjectPortraitPublic¶
| Name | Type | Description |
|---|---|---|
created_at |
string(date-time) | |
id |
string(uuid) | |
image_media |
||
subject_id |
string(uuid) | |
updated_at |
string(date-time) |
SubjectPublic¶
| Name | Type | Description |
|---|---|---|
age_class |
SubjectAgeClass | |
base_images |
Array<BaseImagePublic> | |
body_type |
||
cover_image_media |
||
cover_image_url |
||
created_at |
string(date-time) | |
data_image_urls |
Array<string> | |
data_images_media |
||
description |
||
enabled |
boolean | |
ethnicity |
||
gender |
Gender | |
id |
string(uuid) | |
lora_status |
string | |
lora_trigger |
||
measurements |
||
name |
string | |
negative_prompt |
||
organization_id |
||
owner_id |
string(uuid) | |
portfolio_images_media |
||
portrait_image_media |
||
portrait_image_url |
||
positive_prompt |
||
public |
boolean | |
ready |
boolean | |
slug |
string | |
subject_type |
SubjectType | |
surname |
||
updated_at |
string(date-time) |
SubjectType¶
Type: string
UserSummary¶
| Name | Type | Description |
|---|---|---|
email |
string(email) | |
full_name |
||
id |
string(uuid) |
ValidationError¶
| Name | Type | Description |
|---|---|---|
ctx |
||
input |
||
loc |
Array<> | |
msg |
string | |
type |
string |
ViewAngle¶
Type: string
Security schemes¶
| Name | Type | Scheme | Description |
|---|---|---|---|
| OAuth2PasswordBearer | oauth2 |