Hermes API

Media

Upload and manage media assets tied to product records.

Functions

create_upload_sessionPOST /v1/media/uploads
curl -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}/abort
curl -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}/complete
curl -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}/media
curl -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;
};