Hermes API
Media
Upload and manage media assets tied to product records.
Functions
create_upload_sessionPOST /v1/media/uploadscurl -sS -X POST "https://api.hermes-api.dev/v1/media/uploads" \
-H "X-Hermes-Key: $HERMES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "string"
}'Create presigned upload session.
abort_upload_sessionPOST /v1/media/uploads/{upload_id}/abortcurl -sS -X POST "https://api.hermes-api.dev/v1/media/uploads/$UPLOAD_ID/abort" \ -H "X-Hermes-Key: $HERMES_API_KEY"
Abort an upload session.
complete_upload_sessionPOST /v1/media/uploads/{upload_id}/completecurl -sS -X POST "https://api.hermes-api.dev/v1/media/uploads/$UPLOAD_ID/complete" \
-H "X-Hermes-Key: $HERMES_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Complete an upload session and create a Media record.
delete_mediaDELETE /v1/media/{media_id}curl -sS -X DELETE "https://api.hermes-api.dev/v1/media/$MEDIA_ID" \ -H "X-Hermes-Key: $HERMES_API_KEY"
Delete media (best-effort storage delete).
update_mediaPATCH /v1/media/{media_id}curl -sS -X PATCH "https://api.hermes-api.dev/v1/media/$MEDIA_ID" \
-H "X-Hermes-Key: $HERMES_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Update media purpose/order.
list_product_mediaGET /v1/products/{product_id}/mediacurl -sS "https://api.hermes-api.dev/v1/products/$PRODUCT_ID/media" \ -H "X-Hermes-Key: $HERMES_API_KEY"
List media for a product.
Types
Request and response shapes pulled directly from the OpenAPI schema.
ApiError
export type ApiError = {
code?: string | null;
detail?: string | null;
error: string;
fields?: {
[key: string]: string;
} | null;
request_id?: string | null;
};CompleteUploadRequest
export type CompleteUploadRequest = {
etag?: string | null;
sha256?: string | null;
};CompleteUploadResponse
export type CompleteUploadResponse = {
media: Media;
};CreateUploadRequest
export type CreateUploadRequest = {
content_length?: number | null;
content_type?: string | null;
filename: string;
metadata?: {
[key: string]: unknown;
} | null;
product_id?: string | null;
purpose?: null | MediaPurpose;
session_id?: string | null;
sha256?: string | null;
};ListMediaResponse
export type ListMediaResponse = {
items: Array<Media>;
};Media
export type Media = {
content_length?: number | null;
content_type?: string | null;
created_at: string;
filename?: string | null;
media_id: string;
object_key: string;
product_id?: string | null;
purpose?: null | MediaPurpose;
rank?: number | null;
session_id?: string | null;
sha256?: string | null;
updated_at: string;
url: string;
};MediaPurpose
export type MediaPurpose = "product_image" | "hero" | "session_frame";
UpdateMediaRequest
export type UpdateMediaRequest = {
metadata?: {
[key: string]: unknown;
} | null;
purpose?: null | MediaPurpose;
rank?: number | null;
};UploadMethod
export type UploadMethod = "PUT";
UploadSession
export type UploadSession = {
expires_at: string;
headers?: {
[key: string]: string;
} | null;
method: UploadMethod;
object_key: string;
upload_id: string;
upload_url: string;
url?: string | null;
};