{"openapi":"3.1.0","info":{"title":"SecureFlow License","description":"API privée d’émission et de vérification des packs `.hqpack` / licences `.hqlic`.\n\nAuthentification admin : header `Authorization: Bearer <ADMIN_TOKEN>`.\n\nStripe (à terme) : `GET /v1/stripe/status`, `POST /v1/stripe/webhook`.\n\nInterface : [`/admin`](/admin) · Swagger : [`/docs`](/docs)","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["meta"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}}},"/v1/sign":{"post":{"tags":["license"],"summary":"Sign Payload","operationId":"sign_payload_v1_sign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/licences":{"post":{"tags":["license"],"summary":"Create Licence","operationId":"create_licence_v1_licences_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceCreateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/instances/activate":{"post":{"tags":["license"],"summary":"Activate Instance","operationId":"activate_instance_v1_instances_activate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/verify":{"post":{"tags":["license"],"summary":"Verify","description":"Vérification publique (pubkey) — pas de token admin requis.","operationId":"verify_v1_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/catalog":{"get":{"tags":["license"],"summary":"Catalog List","operationId":"catalog_list_v1_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogListOut"}}}}}},"post":{"tags":["license"],"summary":"Catalog Publish","operationId":"catalog_publish_v1_catalog_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogPublishIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/catalog/{pack_id}":{"get":{"tags":["license"],"summary":"Catalog Get","operationId":"catalog_get_v1_catalog__pack_id__get","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/dashboard":{"get":{"tags":["admin"],"summary":"Dashboard","operationId":"dashboard_v1_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardOut"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/licences":{"get":{"tags":["admin"],"summary":"List Licences","operationId":"list_licences_v1_admin_licences_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(active|expired|revoked)$"},{"type":"null"}],"title":"Status"}},{"name":"packId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Packid"}},{"name":"instanceId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instanceid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LicenceItemOut"},"title":"Response List Licences V1 Admin Licences Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/licences/{licence_id}":{"get":{"tags":["admin"],"summary":"Get Licence","operationId":"get_licence_v1_admin_licences__licence_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"licence_id","in":"path","required":true,"schema":{"type":"string","title":"Licence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/licences/{licence_id}/revoke":{"post":{"tags":["admin"],"summary":"Revoke Licence","operationId":"revoke_licence_v1_admin_licences__licence_id__revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"licence_id","in":"path","required":true,"schema":{"type":"string","title":"Licence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenceItemOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/instances/{instance_id}/coverage":{"get":{"tags":["admin"],"summary":"Instance Coverage","description":"Meilleure licence par pack pour une instance (liée + wildcards).","operationId":"instance_coverage_v1_admin_instances__instance_id__coverage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverageOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/instances":{"get":{"tags":["admin"],"summary":"List Instances","operationId":"list_instances_v1_admin_instances_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/InstanceOut"},"type":"array","title":"Response List Instances V1 Admin Instances Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/instances/{instance_id}":{"patch":{"tags":["admin"],"summary":"Update Instance","operationId":"update_instance_v1_admin_instances__instance_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"instance_id","in":"path","required":true,"schema":{"type":"string","title":"Instance Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceUpdateIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstanceOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stripe/status":{"get":{"tags":["stripe"],"summary":"Stripe Status","operationId":"stripe_status_v1_stripe_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stripe Status V1 Stripe Status Get"}}}}}}},"/v1/stripe/webhook":{"post":{"tags":["stripe"],"summary":"Stripe Webhook","description":"Réception des événements Stripe.\n\nÉvénements cibles (à terme) :\n- checkout.session.completed → émettre .hqlic liées à metadata.instance_id\n- customer.subscription.deleted / invoice.payment_failed → révoquer","operationId":"stripe_webhook_v1_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Stripe Webhook V1 Stripe Webhook Post"}}}}}}}},"components":{"schemas":{"ActivateIn":{"properties":{"instanceId":{"type":"string","maxLength":64,"minLength":4,"title":"Instanceid"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"packIds":{"items":{"type":"string"},"type":"array","title":"Packids"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"}},"type":"object","required":["instanceId"],"title":"ActivateIn"},"ActivateOut":{"properties":{"instanceId":{"type":"string","title":"Instanceid"},"licences":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Licences"}},"type":"object","required":["instanceId","licences"],"title":"ActivateOut"},"CatalogListOut":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CatalogOut"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CatalogListOut"},"CatalogOut":{"properties":{"packId":{"type":"string","title":"Packid"},"version":{"type":"integer","title":"Version"},"title":{"type":"string","title":"Title","default":""},"kind":{"type":"string","title":"Kind","default":"referentiel"},"tier":{"type":"string","title":"Tier","default":"free"},"publishedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publishedat"},"pack":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pack"}},"type":"object","required":["packId","version"],"title":"CatalogOut"},"CatalogPublishIn":{"properties":{"pack":{"additionalProperties":true,"type":"object","title":"Pack"}},"type":"object","required":["pack"],"title":"CatalogPublishIn"},"CoverageItemOut":{"properties":{"packId":{"type":"string","title":"Packid"},"status":{"type":"string","title":"Status"},"licenceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licenceid"},"issuedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuedat"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"},"wildcard":{"type":"boolean","title":"Wildcard","default":false},"instanceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instanceid"}},"type":"object","required":["packId","status"],"title":"CoverageItemOut"},"CoverageOut":{"properties":{"instanceId":{"type":"string","title":"Instanceid"},"items":{"items":{"$ref":"#/components/schemas/CoverageItemOut"},"type":"array","title":"Items"}},"type":"object","required":["instanceId","items"],"title":"CoverageOut"},"DashboardOut":{"properties":{"licencesTotal":{"type":"integer","title":"Licencestotal"},"licencesActive":{"type":"integer","title":"Licencesactive"},"licencesExpired":{"type":"integer","title":"Licencesexpired"},"licencesRevoked":{"type":"integer","title":"Licencesrevoked"},"licencesWildcard":{"type":"integer","title":"Licenceswildcard"},"instancesTotal":{"type":"integer","title":"Instancestotal"},"byPack":{"items":{"$ref":"#/components/schemas/PackStat"},"type":"array","title":"Bypack"},"recentLicences":{"items":{"$ref":"#/components/schemas/LicenceItemOut"},"type":"array","title":"Recentlicences"}},"type":"object","required":["licencesTotal","licencesActive","licencesExpired","licencesRevoked","licencesWildcard","instancesTotal","byPack","recentLicences"],"title":"DashboardOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"app":{"type":"string","title":"App"}},"type":"object","required":["status","app"],"title":"HealthOut"},"InstanceOut":{"properties":{"instanceId":{"type":"string","title":"Instanceid"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"activatedAt":{"type":"string","title":"Activatedat"},"licenceCount":{"type":"integer","title":"Licencecount","default":0},"activeLicenceCount":{"type":"integer","title":"Activelicencecount","default":0}},"type":"object","required":["instanceId","activatedAt"],"title":"InstanceOut"},"InstanceUpdateIn":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"InstanceUpdateIn"},"LicenceCreateIn":{"properties":{"packId":{"type":"string","title":"Packid","description":"Identifiant du pack (.hqpack)"},"instanceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instanceid","description":"Null = licence wildcard"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat","description":"ISO date ou datetime, null = sans expiration"}},"type":"object","required":["packId"],"title":"LicenceCreateIn"},"LicenceItemOut":{"properties":{"id":{"type":"string","title":"Id"},"packId":{"type":"string","title":"Packid"},"instanceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instanceid"},"issuedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuedat"},"expiresAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiresat"},"status":{"type":"string","title":"Status"},"createdAt":{"type":"string","title":"Createdat"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["id","packId","instanceId","status","createdAt","payload"],"title":"LicenceItemOut"},"LicenceOut":{"properties":{"id":{"type":"string","title":"Id"},"licence":{"additionalProperties":true,"type":"object","title":"Licence"}},"type":"object","required":["id","licence"],"title":"LicenceOut"},"PackStat":{"properties":{"packId":{"type":"string","title":"Packid"},"total":{"type":"integer","title":"Total"},"active":{"type":"integer","title":"Active"}},"type":"object","required":["packId","total","active"],"title":"PackStat"},"SignIn":{"properties":{"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["payload"],"title":"SignIn","description":"Objet pack ou licence à signer (sans sig, ou sig ignoré)."},"SignOut":{"properties":{"signed":{"additionalProperties":true,"type":"object","title":"Signed"}},"type":"object","required":["signed"],"title":"SignOut"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyIn":{"properties":{"pack":{"additionalProperties":true,"type":"object","title":"Pack"},"licence":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Licence"},"instanceId":{"type":"string","title":"Instanceid","default":""}},"type":"object","required":["pack"],"title":"VerifyIn"},"VerifyOut":{"properties":{"ok":{"type":"boolean","title":"Ok"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["ok"],"title":"VerifyOut"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"AdminBearer":{"type":"http","scheme":"bearer","bearerFormat":"ADMIN_TOKEN","description":"Token admin (`ADMIN_TOKEN` / docker/.env)"}}}}