{"openapi":"3.1.0","info":{"title":"OAuth Media Metadata","version":"1.0.0"},"paths":{"/api/v1/media/{country_code}/changes":{"get":{"tags":["media"],"summary":"BE-01 — Delta des médias d'un pays (offline-first, cursor-based, cloisonné pays)","description":"INV-1/INV-2 : le pays vient du PATH (scellé par le bord Academy depuis le JWT) ;\nla réponse ne contient JAMAIS d'autre pays. Curseur invalide → 422.","operationId":"list_media_changes_api_v1_media__country_code__changes_get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2","title":"Country Code"},"description":"ISO 3166-1 alpha-2"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Curseur opaque (vide = bootstrap)","title":"Since"},"description":"Curseur opaque (vide = bootstrap)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":200,"title":"Limit"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/batch":{"post":{"tags":["media"],"summary":"Batch list media for multiple entity codes","operationId":"batch_list_api_v1_media__country_code__batch_post","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/resolve-localized":{"post":{"tags":["media"],"summary":"Resolve localized media with fallback (S2S protected)","operationId":"resolve_localized_api_v1_media__country_code__resolve_localized_post","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveLocalizedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveLocalizedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/resolve":{"post":{"tags":["media"],"summary":"Resolve media_codes to full URLs (S2S protected)","operationId":"resolve_api_v1_media__country_code__resolve_post","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/resolve-served":{"post":{"tags":["media"],"summary":"Resolve media to its SERVED version: enriched if it exists, else the original (S2S protected)","description":"Le gardien renvoie TOUJOURS la version enrichie quand elle existe, sinon le BRUT (fallback).\nAucun remplacement : original et enrichi coexistent (NO-DELETE).","operationId":"resolve_served_api_v1_media__country_code__resolve_served_post","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveServedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaResolveServedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/{code}/{media_code}/stream":{"get":{"tags":["media"],"summary":"Stream a stored media blob through media-metadata (S2S protected)","operationId":"stream_media_blob_api_v1_media__country_code___code___media_code__stream_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"media_code","in":"path","required":true,"schema":{"type":"string","title":"Media Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["media"],"summary":"Stream a stored media blob through media-metadata (S2S protected)","operationId":"stream_media_blob_api_v1_media__country_code___code___media_code__stream_get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"media_code","in":"path","required":true,"schema":{"type":"string","title":"Media Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/exists":{"post":{"tags":["media"],"summary":"Pré-check dédup : ce contenu (content_hash) existe-t-il déjà ? (S2S, hint réseau)","description":"Pré-check de déduplication par contenu (porteur 2026-06-10). Réponse VOLONTAIREMENT\nminimale : ``{exists}`` SEULEMENT — jamais media_code / propriétaire / qui-l'a (vie\nprivée : c'est un hint d'optimisation réseau, PAS un oracle d'identité). N'AUTORISE RIEN :\nla dédup FAISANT AUTORITÉ reste le hash recalculé SERVEUR dans /media-upload. Fail-open\n(toute erreur → exists=False, le client uploadera normalement).","operationId":"media_exists_api_v1_media__country_code__exists_post","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 (cosmétique : la dédup est cross-country DANS le tenant)","title":"Country Code"},"description":"ISO 3166-1 alpha-2 (cosmétique : la dédup est cross-country DANS le tenant)"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaExistsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaExistsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/{code}/presign-upload":{"post":{"tags":["media"],"summary":"Mint a HMAC upload token for client-side PUT to /media-upload (S2S protected)","operationId":"presign_upload_api_v1_media__country_code___code__presign_upload_post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignUploadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/{code}/upload":{"post":{"tags":["media"],"summary":"Upload a file to MinIO and register metadata (S2S protected)","operationId":"upload_api_v1_media__country_code___code__upload_post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_api_v1_media__country_code___code__upload_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/{code}":{"post":{"tags":["media"],"summary":"Register media metadata for an entity (S2S protected)","operationId":"register_api_v1_media__country_code___code__post","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRegisterRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaRegisterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["media"],"summary":"List all media for an entity (optionally filter by type or context)","operationId":"list_entity_media_api_v1_media__country_code___code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"media_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by media type (image, video, youtube...)","title":"Media Type"},"description":"Filter by media type (image, video, youtube...)"},{"name":"source_context","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source context (profile_photo, cover...)","title":"Source Context"},"description":"Filter by source context (profile_photo, cover...)"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["media"],"summary":"Delete all media for an entity (S2S protected)","operationId":"delete_all_api_v1_media__country_code___code__delete","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/{country_code}/{code}/{media_code}":{"get":{"tags":["media"],"summary":"Get full details for a single media","operationId":"get_media_detail_api_v1_media__country_code___code___media_code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"media_code","in":"path","required":true,"schema":{"type":"string","title":"Media Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["media"],"summary":"Enrich media metadata (S2S protected)","operationId":"enrich_api_v1_media__country_code___code___media_code__patch","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"media_code","in":"path","required":true,"schema":{"type":"string","title":"Media Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaEnrichRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaEnrichResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["media"],"summary":"Delete a single media (S2S protected)","operationId":"delete_one_api_v1_media__country_code___code___media_code__delete","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"media_code","in":"path","required":true,"schema":{"type":"string","title":"Media Code"}},{"name":"country_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country code","title":"Country Code"},"description":"ISO 3166-1 alpha-2 country code"},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/topology/{intent}":{"get":{"tags":["flow"],"summary":"Topologie d'un intent (dim_media_step)","operationId":"topology_api_v1_flow_topology__intent__get","parameters":[{"name":"intent","in":"path","required":true,"schema":{"type":"string","title":"Intent"}},{"name":"pipeline_version","in":"query","required":false,"schema":{"type":"string","default":"v1","title":"Pipeline Version"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs":{"post":{"tags":["flow"],"summary":"Créer un run (READY) — dédup enqueue initial","operationId":"create_run_api_v1_flow_runs_post","parameters":[{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["flow"],"summary":"Lister les runs (monitoring/usine) — filtres statut/pays/consumer/subject_ref","operationId":"list_runs_api_v1_flow_runs_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"country_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"}},{"name":"consumer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Consumer"}},{"name":"subject_ref","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Ref"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/ready":{"get":{"tags":["flow"],"summary":"Runs READY d'un consommateur (source du producteur de stream)","operationId":"ready_api_v1_flow_ready_get","parameters":[{"name":"consumer","in":"query","required":false,"schema":{"type":"string","default":"media-process","title":"Consumer"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}":{"get":{"tags":["flow"],"summary":"État d'un run + ses steps","operationId":"get_run_api_v1_flow_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}/status":{"patch":{"tags":["flow"],"summary":"Transition de statut du run","operationId":"set_status_api_v1_flow_runs__run_id__status_patch","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}/steps/{step_code}":{"put":{"tags":["flow"],"summary":"Upsert état d'une étape","operationId":"upsert_step_api_v1_flow_runs__run_id__steps__step_code__put","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step_code","in":"path","required":true,"schema":{"type":"string","title":"Step Code"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}/events":{"post":{"tags":["flow"],"summary":"Log explicite (SUCCESS/FAILED) pour l'UI","operationId":"log_event_api_v1_flow_runs__run_id__events_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}/relaunch":{"post":{"tags":["flow"],"summary":"Relancer = NOUVEAU run (immuable) qui reprend au step en panne","operationId":"relaunch_api_v1_flow_runs__run_id__relaunch_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelaunchIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/editorial/launch":{"post":{"tags":["flow-editorial"],"summary":"Porte du bus : ouvre 1 run editorial_publication (READY) au « Ready »","operationId":"editorial_launch_api_v1_flow_editorial_launch_post","parameters":[{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditorialLaunchIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/flow/runs/{run_id}/handoff":{"post":{"tags":["flow-editorial"],"summary":"J6 — passe le run au consumer du prochain step (routage par step)","operationId":"handoff_api_v1_flow_runs__run_id__handoff_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/resolve-by-set":{"post":{"tags":["flow-editorial"],"summary":"N cellules ({run_id} ou {cell_codes}) → tous leurs médias","operationId":"resolve_by_set_api_v1_media_resolve_by_set_post","parameters":[{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveBySetIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/localize":{"post":{"tags":["media-jobs"],"summary":"Create a localize job (image text translation per locale)","operationId":"create_localize_api_v1_media_jobs_localize_post","parameters":[{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocalizeJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/generate":{"post":{"tags":["media-jobs"],"summary":"Create an image generation job from a prompt","operationId":"create_generate_api_v1_media_jobs_generate_post","parameters":[{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/{job_code}":{"get":{"tags":["media-jobs"],"summary":"Get job run status","operationId":"get_job_api_v1_media_jobs__job_code__get","parameters":[{"name":"job_code","in":"path","required":true,"schema":{"type":"string","minLength":4,"title":"Job Code"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/{job_code}/steps":{"get":{"tags":["media-jobs"],"summary":"List job steps with details","operationId":"list_steps_api_v1_media_jobs__job_code__steps_get","parameters":[{"name":"job_code","in":"path","required":true,"schema":{"type":"string","minLength":4,"title":"Job Code"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStepsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/{job_code}/events":{"get":{"tags":["media-jobs"],"summary":"List job events (observability log)","operationId":"list_events_api_v1_media_jobs__job_code__events_get","parameters":[{"name":"job_code","in":"path","required":true,"schema":{"type":"string","minLength":4,"title":"Job Code"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/{job_code}/cancel":{"post":{"tags":["media-jobs"],"summary":"Cancel a running job (best effort — stops on next step boundary)","operationId":"cancel_job_api_v1_media_jobs__job_code__cancel_post","parameters":[{"name":"job_code","in":"path","required":true,"schema":{"type":"string","minLength":4,"title":"Job Code"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-jobs/{job_code}/rerun":{"post":{"tags":["media-jobs"],"summary":"Retry failed steps of a job","operationId":"rerun_job_api_v1_media_jobs__job_code__rerun_post","parameters":[{"name":"job_code","in":"path","required":true,"schema":{"type":"string","minLength":4,"title":"Job Code"}},{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media-upload/{upload_token}":{"put":{"tags":["media-upload"],"summary":"Receive blob from client (authenticated by HMAC upload_token)","operationId":"upload_proxy_api_v1_media_upload__upload_token__put","parameters":[{"name":"upload_token","in":"path","required":true,"schema":{"type":"string","minLength":20,"description":"HMAC-signed token from /presign-upload","title":"Upload Token"},"description":"HMAC-signed token from /presign-upload"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadProxyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/skills":{"get":{"tags":["skills"],"summary":"List all registered skills","operationId":"list_skills_api_v1_skills_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/skills/{name}":{"get":{"tags":["skills"],"summary":"Get detail for one skill","operationId":"get_skill_api_v1_skills__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/media/semantic":{"post":{"tags":["search"],"summary":"Cosine-similarity search over MediaMetadata.embedding_vector (S2S protected)","operationId":"search_semantic_api_v1_search_media_semantic_post","parameters":[{"name":"X-Tenant-Code","in":"header","required":false,"schema":{"type":"string","description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row.","default":"SMATFLOW","title":"X-Tenant-Code"},"description":"Tenant identifier (defaults to SMATFLOW). Used as the first partition key on every media-metadata row."},{"name":"x-service-api-key","in":"header","required":true,"schema":{"type":"string","description":"Service-to-service API key","title":"X-Service-Api-Key"},"description":"Service-to-service API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"tags":["meta"],"summary":"API home","operationId":"home__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"tags":["system"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"tags":["system"],"summary":"Health Ready","operationId":"health_ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/version":{"get":{"tags":["system"],"summary":"Version","operationId":"version_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_upload_api_v1_media__country_code___code__upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"File to upload"},"source_app":{"type":"string","title":"Source App","description":"Application that owns the media"},"source_context":{"type":"string","title":"Source Context","description":"Usage context (profile_photo, cover_image...)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags","description":"Comma-separated tags"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"},"start_pipeline":{"type":"boolean","title":"Start Pipeline","default":false}},"type":"object","required":["file","source_app","source_context"],"title":"Body_upload_api_v1_media__country_code___code__upload_post"},"CreateRunIn":{"properties":{"intent":{"type":"string","title":"Intent"},"subject_ref":{"type":"string","title":"Subject Ref"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"pipeline_version":{"type":"string","title":"Pipeline Version","default":"v1"},"consumer":{"type":"string","title":"Consumer","default":"media-process"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},"type":"object","required":["intent","subject_ref","country_code"],"title":"CreateRunIn"},"EditorialLaunchIn":{"properties":{"publication_id":{"type":"string","minLength":1,"title":"Publication Id"},"cell_codes":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Cell Codes"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"},"set_transcripts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Set Transcripts"}},"type":"object","required":["publication_id","cell_codes","country_code"],"title":"EditorialLaunchIn"},"EventIn":{"properties":{"step_code":{"type":"string","title":"Step Code"},"kind":{"type":"string","title":"Kind"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["step_code","kind"],"title":"EventIn"},"GenerateJobRequest":{"properties":{"source_app":{"type":"string","title":"Source App"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"prompt":{"type":"string","minLength":4,"title":"Prompt"},"aspect":{"type":"string","title":"Aspect","default":"1:1"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"}},"type":"object","required":["source_app","country_code","prompt"],"title":"GenerateJobRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobCreationResponse":{"properties":{"job_code":{"type":"string","title":"Job Code"},"steps_total":{"type":"integer","title":"Steps Total"},"status":{"type":"string","title":"Status"}},"type":"object","required":["job_code","steps_total","status"],"title":"JobCreationResponse"},"JobEventSummary":{"properties":{"event_order":{"type":"integer","title":"Event Order"},"event_code":{"type":"string","title":"Event Code"},"event_kind":{"type":"string","title":"Event Kind"},"message":{"type":"string","title":"Message"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["event_order","event_code","event_kind","message"],"title":"JobEventSummary"},"JobEventsResponse":{"properties":{"job_code":{"type":"string","title":"Job Code"},"events":{"items":{"$ref":"#/components/schemas/JobEventSummary"},"type":"array","title":"Events"}},"type":"object","required":["job_code","events"],"title":"JobEventsResponse"},"JobStatusResponse":{"properties":{"job_code":{"type":"string","title":"Job Code"},"source_app":{"type":"string","title":"Source App"},"job_family":{"type":"string","title":"Job Family"},"job_kind":{"type":"string","title":"Job Kind"},"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"country_code":{"type":"string","title":"Country Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"target_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Locale"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"steps_total":{"type":"integer","title":"Steps Total"},"steps_completed":{"type":"integer","title":"Steps Completed"},"steps_failed":{"type":"integer","title":"Steps Failed"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["job_code","source_app","job_family","job_kind","status","country_code","steps_total","steps_completed","steps_failed"],"title":"JobStatusResponse"},"JobStepSummary":{"properties":{"step_order":{"type":"integer","title":"Step Order"},"step_code":{"type":"string","title":"Step Code"},"step_kind":{"type":"string","title":"Step Kind"},"status":{"type":"string","title":"Status"},"source_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Media Code"},"target_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Locale"},"localized_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Localized Media Code"},"used_local_cache":{"type":"boolean","title":"Used Local Cache","default":false},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"file_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Bytes"},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["step_order","step_code","step_kind","status"],"title":"JobStepSummary"},"JobStepsResponse":{"properties":{"job_code":{"type":"string","title":"Job Code"},"steps":{"items":{"$ref":"#/components/schemas/JobStepSummary"},"type":"array","title":"Steps"}},"type":"object","required":["job_code","steps"],"title":"JobStepsResponse"},"LocalizeItem":{"properties":{"source_media_code":{"type":"string","title":"Source Media Code","description":"media_code of the source image"},"target_locale":{"type":"string","maxLength":8,"minLength":2,"title":"Target Locale"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context","description":"Hint injected into the provider prompt"}},"type":"object","required":["source_media_code","target_locale"],"title":"LocalizeItem"},"LocalizeJobRequest":{"properties":{"source_app":{"type":"string","title":"Source App","description":"Caller application (smatflow-site, workshop, …)"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"source_locale":{"type":"string","maxLength":8,"minLength":2,"title":"Source Locale","default":"fr"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Triggered By"},"items":{"items":{"$ref":"#/components/schemas/LocalizeItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["source_app","country_code","items"],"title":"LocalizeJobRequest"},"MediaBatchRequest":{"properties":{"codes":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Codes"},"media_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Type"},"source_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Context"}},"type":"object","required":["codes"],"title":"MediaBatchRequest","description":"POST /api/v1/media/{country_code}/batch"},"MediaBatchResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"items":{"items":{"$ref":"#/components/schemas/MediaBatchResponseItem"},"type":"array","title":"Items"}},"type":"object","required":["country_code","items"],"title":"MediaBatchResponse"},"MediaBatchResponseItem":{"properties":{"code":{"type":"string","title":"Code"},"media":{"items":{"$ref":"#/components/schemas/MediaSummary"},"type":"array","title":"Media"}},"type":"object","required":["code","media"],"title":"MediaBatchResponseItem"},"MediaDeleteResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Code"},"deleted":{"type":"boolean","title":"Deleted"},"message":{"type":"string","title":"Message","default":"ok"}},"type":"object","required":["country_code","code","deleted"],"title":"MediaDeleteResponse"},"MediaDetailResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"type":"string","title":"Media Code"},"media_type":{"type":"string","title":"Media Type"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bucket"},"object_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Key"},"url":{"type":"string","title":"Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"file_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size Bytes"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"source_app":{"type":"string","title":"Source App"},"source_context":{"type":"string","title":"Source Context"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"},"is_public":{"type":"boolean","title":"Is Public"},"upload_status":{"type":"string","title":"Upload Status"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"datakey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Datakey"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["country_code","code","media_code","media_type","url","source_app","source_context","is_public","upload_status"],"title":"MediaDetailResponse"},"MediaEnrichRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"}},"type":"object","title":"MediaEnrichRequest","description":"PATCH /api/v1/media/{country_code}/{code}/{media_code}"},"MediaEnrichResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"type":"string","title":"Media Code"},"updated":{"type":"boolean","title":"Updated"},"message":{"type":"string","title":"Message","default":"Media metadata updated"}},"type":"object","required":["country_code","code","media_code","updated"],"title":"MediaEnrichResponse"},"MediaExistsRequest":{"properties":{"content_hash":{"type":"string","minLength":32,"title":"Content Hash","description":"sha256 hexdigest des octets (sans préfixe 'sha256:')"}},"type":"object","required":["content_hash"],"title":"MediaExistsRequest"},"MediaExistsResponse":{"properties":{"exists":{"type":"boolean","title":"Exists","description":"True si le contenu existe déjà (dans ce tenant)"}},"type":"object","required":["exists"],"title":"MediaExistsResponse"},"MediaListResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"total":{"type":"integer","title":"Total"},"media":{"items":{"$ref":"#/components/schemas/MediaSummary"},"type":"array","title":"Media"}},"type":"object","required":["country_code","code","total","media"],"title":"MediaListResponse"},"MediaRegisterRequest":{"properties":{"source_app":{"type":"string","title":"Source App","description":"Application that owns the media (universe, civicperson, academy...)"},"source_context":{"type":"string","title":"Source Context","description":"Usage context (profile_photo, cover_image, illustration...)"},"media_type":{"type":"string","title":"Media Type","description":"Type: image, video, audio, document, youtube, vimeo, external_link"},"url":{"type":"string","title":"Url","description":"Full URL to access the media"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bucket"},"object_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Object Key"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"file_size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size Bytes"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Seconds"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_public":{"type":"boolean","title":"Is Public","default":true},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"}},"type":"object","required":["source_app","source_context","media_type","url"],"title":"MediaRegisterRequest","description":"POST /api/v1/media/{country_code}/{code}"},"MediaRegisterResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"type":"string","title":"Media Code"},"status":{"type":"string","title":"Status"},"url":{"type":"string","title":"Url"},"created":{"type":"boolean","title":"Created"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"},"message":{"type":"string","title":"Message","default":"Media metadata registered"}},"type":"object","required":["country_code","code","media_code","status","url","created"],"title":"MediaRegisterResponse"},"MediaResolveLocalizedRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MediaResolveLocalizedRequestItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"MediaResolveLocalizedRequest"},"MediaResolveLocalizedRequestItem":{"properties":{"media_code":{"type":"string","title":"Media Code","description":"Source media_code to resolve from"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Entity code (optional if derivable from media_code)"},"locale_code":{"type":"string","title":"Locale Code","description":"Requested target locale"},"fallback_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Locale","description":"Fallback locale when target locale is unavailable","default":"fr"}},"type":"object","required":["media_code","locale_code"],"title":"MediaResolveLocalizedRequestItem"},"MediaResolveLocalizedResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"resolved":{"items":{"$ref":"#/components/schemas/MediaResolvedLocalizedItem"},"type":"array","title":"Resolved"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"}},"type":"object","required":["country_code","resolved","not_found"],"title":"MediaResolveLocalizedResponse"},"MediaResolveRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MediaResolveRequestItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"MediaResolveRequest"},"MediaResolveRequestItem":{"properties":{"code":{"type":"string","title":"Code","description":"Entity code (partition key)"},"media_codes":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Media Codes","description":"List of media_codes to resolve"}},"type":"object","required":["code","media_codes"],"title":"MediaResolveRequestItem"},"MediaResolveResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"resolved":{"items":{"$ref":"#/components/schemas/MediaResolvedItem"},"type":"array","title":"Resolved"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"}},"type":"object","required":["country_code","resolved","not_found"],"title":"MediaResolveResponse"},"MediaResolveServedRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MediaResolveServedRequestItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"MediaResolveServedRequest"},"MediaResolveServedRequestItem":{"properties":{"code":{"type":"string","title":"Code","description":"Entity code / slug (partition key)"},"media_code":{"type":"string","title":"Media Code","description":"media_code de la version ORIGINALE (brut)"}},"type":"object","required":["code","media_code"],"title":"MediaResolveServedRequestItem"},"MediaResolveServedResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"resolved":{"items":{"$ref":"#/components/schemas/MediaResolvedServedItem"},"type":"array","title":"Resolved"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"}},"type":"object","required":["country_code","resolved","not_found"],"title":"MediaResolveServedResponse"},"MediaResolvedItem":{"properties":{"media_code":{"type":"string","title":"Media Code"},"url":{"type":"string","title":"Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"media_type":{"type":"string","title":"Media Type"},"is_public":{"type":"boolean","title":"Is Public"}},"type":"object","required":["media_code","url","media_type","is_public"],"title":"MediaResolvedItem"},"MediaResolvedLocalizedItem":{"properties":{"media_code":{"type":"string","title":"Media Code"},"requested_locale":{"type":"string","title":"Requested Locale"},"resolved_locale":{"type":"string","title":"Resolved Locale"},"fallback_applied":{"type":"boolean","title":"Fallback Applied"},"resolved_media_code":{"type":"string","title":"Resolved Media Code"},"url":{"type":"string","title":"Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"media_type":{"type":"string","title":"Media Type"},"is_public":{"type":"boolean","title":"Is Public"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["media_code","requested_locale","resolved_locale","fallback_applied","resolved_media_code","url","media_type","is_public"],"title":"MediaResolvedLocalizedItem"},"MediaResolvedServedItem":{"properties":{"media_code":{"type":"string","title":"Media Code"},"served_media_code":{"type":"string","title":"Served Media Code"},"served_version":{"type":"string","title":"Served Version"},"fallback_applied":{"type":"boolean","title":"Fallback Applied"},"url":{"type":"string","title":"Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"media_type":{"type":"string","title":"Media Type"},"is_public":{"type":"boolean","title":"Is Public"}},"type":"object","required":["media_code","served_media_code","served_version","fallback_applied","url","media_type","is_public"],"title":"MediaResolvedServedItem"},"MediaSummary":{"properties":{"media_code":{"type":"string","title":"Media Code"},"media_type":{"type":"string","title":"Media Type"},"url":{"type":"string","title":"Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"source_context":{"type":"string","title":"Source Context"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"},"is_public":{"type":"boolean","title":"Is Public"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["media_code","media_type","url","source_context","is_public"],"title":"MediaSummary"},"MediaUploadProxyResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"type":"string","title":"Media Code"},"url":{"type":"string","title":"Url"},"checksum":{"type":"string","title":"Checksum"},"size_bytes":{"type":"integer","title":"Size Bytes"},"mime_type":{"type":"string","title":"Mime Type"},"bucket":{"type":"string","title":"Bucket"},"object_key":{"type":"string","title":"Object Key"},"deduplicated":{"type":"boolean","title":"Deduplicated","description":"True if existing media was reused (same SHA256)","default":false}},"type":"object","required":["country_code","code","media_code","url","checksum","size_bytes","mime_type","bucket","object_key"],"title":"MediaUploadProxyResponse"},"MediaUploadResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"media_code":{"type":"string","title":"Media Code"},"status":{"type":"string","title":"Status"},"url":{"type":"string","title":"Url"},"bucket":{"type":"string","title":"Bucket"},"object_key":{"type":"string","title":"Object Key"},"file_size_bytes":{"type":"integer","title":"File Size Bytes"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"checksum":{"type":"string","title":"Checksum"},"created":{"type":"boolean","title":"Created"},"locale_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Locale Code"},"source_locale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Locale"},"variant_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Role"},"origin_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Media Code"},"fallback_media_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fallback Media Code"},"variant_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant Group Code"},"message":{"type":"string","title":"Message","default":"Media uploaded and registered"}},"type":"object","required":["country_code","code","media_code","status","url","bucket","object_key","file_size_bytes","checksum","created"],"title":"MediaUploadResponse"},"PresignUploadRequest":{"properties":{"filename":{"type":"string","maxLength":255,"minLength":1,"title":"Filename"},"mime_type":{"type":"string","title":"Mime Type","description":"audio/mpeg, image/png, etc."},"size_bytes":{"type":"integer","exclusiveMinimum":0.0,"title":"Size Bytes","description":"Expected blob size"},"source_app":{"type":"string","title":"Source App","description":"Calling application (academy, agora, etc.)"},"source_context":{"type":"string","title":"Source Context","description":"Usage context (agora-cell, profile_photo...)"},"ttl_seconds":{"anyOf":[{"type":"integer","maximum":86400.0,"minimum":60.0},{"type":"null"}],"title":"Ttl Seconds","description":"Token TTL (default 15 min)","default":900},"start_pipeline":{"type":"boolean","title":"Start Pipeline","description":"Crée la tâche P1 (transcript) sur ce brut à la consommation","default":false},"client_media_guid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Media Guid","description":"GUID client définitif (capture_guid) pour l'idempotence du média"}},"type":"object","required":["filename","mime_type","size_bytes","source_app","source_context"],"title":"PresignUploadRequest","description":"POST /api/v1/media/{country_code}/{code}/presign-upload"},"PresignUploadResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code","default":"SMATFLOW"},"country_code":{"type":"string","title":"Country Code"},"code":{"type":"string","title":"Code"},"upload_url":{"type":"string","title":"Upload Url","description":"Full URL where the client PUTs the blob"},"upload_token":{"type":"string","title":"Upload Token","description":"Opaque HMAC token (embedded in upload_url)"},"required_headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Required Headers","description":"Required HTTP headers for the PUT request (e.g. Content-Type)"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["country_code","code","upload_url","upload_token","expires_at"],"title":"PresignUploadResponse"},"RelaunchIn":{"properties":{"resumed_from_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resumed From Step"}},"type":"object","title":"RelaunchIn"},"ResolveBySetIn":{"properties":{"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"cell_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cell Codes"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"}},"type":"object","title":"ResolveBySetIn"},"SearchFilters":{"properties":{"media_type":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Media Type"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"source_app":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source App"}},"type":"object","title":"SearchFilters"},"SearchResultItem":{"properties":{"media_code":{"type":"string","title":"Media Code"},"score":{"type":"number","title":"Score"},"media_type":{"type":"string","title":"Media Type"},"code":{"type":"string","title":"Code"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"ai_description_excerpt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Description Excerpt"},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["media_code","score","media_type","code"],"title":"SearchResultItem"},"SemanticSearchRequest":{"properties":{"query_text":{"type":"string","maxLength":2000,"minLength":1,"title":"Query Text"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"entity_codes":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":100},{"type":"null"}],"title":"Entity Codes"},"filters":{"anyOf":[{"$ref":"#/components/schemas/SearchFilters"},{"type":"null"}]},"top_k":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Top K","default":20},"min_score":{"type":"number","maximum":1.0,"minimum":-1.0,"title":"Min Score","default":0.0}},"type":"object","required":["query_text","country_code"],"title":"SemanticSearchRequest"},"SemanticSearchResponse":{"properties":{"tenant_code":{"type":"string","title":"Tenant Code"},"country_code":{"type":"string","title":"Country Code"},"query_text":{"type":"string","title":"Query Text"},"model":{"type":"string","title":"Model"},"results":{"items":{"$ref":"#/components/schemas/SearchResultItem"},"type":"array","title":"Results"},"scanned":{"type":"integer","title":"Scanned"},"scored":{"type":"integer","title":"Scored"},"returned":{"type":"integer","title":"Returned"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["tenant_code","country_code","query_text","model","results","scanned","scored","returned","latency_ms"],"title":"SemanticSearchResponse"},"StatusIn":{"properties":{"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status"],"title":"StatusIn"},"StepIn":{"properties":{"status":{"type":"string","title":"Status"},"output_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Ref"},"attempt":{"type":"integer","title":"Attempt","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status"],"title":"StepIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}