{"openapi":"3.1.0","info":{"title":"Fraglet Server","description":"Centralised API for storing, managing, and discovering fraglets.","version":"1.0.0"},"paths":{"/.well-known/fraglets":{"get":{"summary":"Get Metadata","operationId":"get_metadata__well_known_fraglets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerMetadata"}}}}}}},"/api/turnstile-config":{"get":{"tags":["registration"],"summary":"Turnstile Config","description":"Return the Turnstile site key for the frontend widget.","operationId":"turnstile_config_api_turnstile_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/register":{"post":{"tags":["registration"],"summary":"Register","description":"Register as a developer and receive an API key.","operationId":"register_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets":{"post":{"tags":["fraglets"],"summary":"Create Fraglet","operationId":"create_fraglet_api_v1_fraglets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/fraglets/{fraglet_id}":{"patch":{"tags":["fraglets"],"summary":"Update Fraglet","operationId":"update_fraglet_api_v1_fraglets__fraglet_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["fraglets"],"summary":"Get Fraglet","operationId":"get_fraglet_api_v1_fraglets__fraglet_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}},{"name":"include_embedding","in":"query","required":false,"schema":{"type":"boolean","description":"Include the embedding vector in the response","default":false,"title":"Include Embedding"},"description":"Include the embedding vector in the response"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fraglets"],"summary":"Delete Fraglet","operationId":"delete_fraglet_api_v1_fraglets__fraglet_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/batch":{"post":{"tags":["fraglets"],"summary":"Get Fraglets Batch","operationId":"get_fraglets_batch_api_v1_fraglets_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_embedding","in":"query","required":false,"schema":{"type":"boolean","description":"Include embedding vectors in the response","default":false,"title":"Include Embedding"},"description":"Include embedding vectors in the response"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletBatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/discover":{"get":{"tags":["fraglets"],"summary":"Discover Fraglets","operationId":"discover_fraglets_api_v1_fraglets_discover_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Filter by domain identifier","title":"Domain"},"description":"Filter by domain identifier"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/{fraglet_id}/share-link":{"post":{"tags":["fraglets"],"summary":"Create Share Link","description":"Return a signed share-link capability for a fraglet the caller owns.\nAnyone with the resulting URL can view and adapt the fraglet, but the\noriginal remains under the creator's control — adaptations create new\nprivate fraglets in the recipient's account.","operationId":"create_share_link_api_v1_fraglets__fraglet_id__share_link_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/{fraglet_id}/shared":{"get":{"tags":["fraglets"],"summary":"Get Shared Fraglet","description":"Fetch a fraglet via a signed share-link capability. No developer\nauthentication required. Returns 404 on any signature mismatch to\navoid leaking fraglet existence.","operationId":"get_shared_fraglet_api_v1_fraglets__fraglet_id__shared_get","parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}},{"name":"s","in":"query","required":true,"schema":{"type":"string","description":"Share-link signature","title":"S"},"description":"Share-link signature"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/{fraglet_id}/associate":{"post":{"tags":["associations"],"summary":"Associate With Fraglet","operationId":"associate_with_fraglet_api_v1_fraglets__fraglet_id__associate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/AssociationBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["associations"],"summary":"Disassociate From Fraglet","operationId":"disassociate_from_fraglet_api_v1_fraglets__fraglet_id__associate_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}},{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Principal ID to disassociate (for multi-user developer accounts)","title":"Principal"},"description":"Principal ID to disassociate (for multi-user developer accounts)"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me/fraglets":{"get":{"tags":["associations"],"summary":"List My Fraglets","operationId":"list_my_fraglets_api_v1_users_me_fraglets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by domain","title":"Domain"},"description":"Filter by domain"},{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by principal (opaque end-user ID scoped to this developer)","title":"Principal"},"description":"Filter by principal (opaque end-user ID scoped to this developer)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FragletListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/associations/claim":{"post":{"tags":["associations"],"summary":"Claim Principal","description":"Migrate associations from one principal to another under this developer.\n\nUsed when an anonymous session user logs in — transfers their session-based\nfraglet associations to their authenticated user principal.","operationId":"claim_principal_api_v1_associations_claim_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/jackets":{"post":{"tags":["jackets"],"summary":"Create Jacket","operationId":"create_jacket_api_v1_jackets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/jackets/discover":{"get":{"tags":["jackets"],"summary":"Discover Jackets","operationId":"discover_jackets_api_v1_jackets_discover_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/mine":{"get":{"tags":["jackets"],"summary":"List My Jackets","operationId":"list_my_jackets_api_v1_jackets_mine_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by principal (opaque end-user ID scoped to this developer)","title":"Principal"},"description":"Filter by principal (opaque end-user ID scoped to this developer)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}":{"get":{"tags":["jackets"],"summary":"Get Jacket","operationId":"get_jacket_api_v1_jackets__jacket_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["jackets"],"summary":"Update Jacket","operationId":"update_jacket_api_v1_jackets__jacket_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jackets"],"summary":"Delete Jacket","operationId":"delete_jacket_api_v1_jackets__jacket_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}/fraglets":{"post":{"tags":["jackets"],"summary":"Add Fraglets","operationId":"add_fraglets_api_v1_jackets__jacket_id__fraglets_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketFragletModify"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jackets"],"summary":"Remove Fraglets","operationId":"remove_fraglets_api_v1_jackets__jacket_id__fraglets_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketFragletModify"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}/associate":{"post":{"tags":["jackets"],"summary":"Associate With Jacket","operationId":"associate_with_jacket_api_v1_jackets__jacket_id__associate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/JacketAssociationBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jackets"],"summary":"Disassociate From Jacket","operationId":"disassociate_from_jacket_api_v1_jackets__jacket_id__associate_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}},{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Principal ID to disassociate (for multi-user developer accounts)","title":"Principal"},"description":"Principal ID to disassociate (for multi-user developer accounts)"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}/adapt":{"post":{"tags":["jackets"],"summary":"Adapt Jacket","operationId":"adapt_jacket_api_v1_jackets__jacket_id__adapt_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/JacketAdaptBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JacketResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}/refresh":{"post":{"tags":["jackets"],"summary":"Refresh Jacket Snapshot","operationId":"refresh_jacket_snapshot_api_v1_jackets__jacket_id__refresh_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}},{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Principal ID for the association to refresh","title":"Principal"},"description":"Principal ID for the association to refresh"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jackets/{jacket_id}/resolve":{"post":{"tags":["jackets"],"summary":"Resolve Jacket","operationId":"resolve_jacket_api_v1_jackets__jacket_id__resolve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"jacket_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Jacket Id"}},{"name":"principal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Principal ID for follow/snapshot resolution","title":"Principal"},"description":"Principal ID for follow/snapshot resolution"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/{fraglet_id}/grants":{"post":{"tags":["grants"],"summary":"Create Grant","description":"Grant a developer read access to a selective fraglet.","operationId":"create_grant_api_v1_fraglets__fraglet_id__grants_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["grants"],"summary":"List Grants","description":"List all grants for a fraglet. Only the creator can view grants.","operationId":"list_grants_api_v1_fraglets__fraglet_id__grants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fraglets/{fraglet_id}/grants/{target_developer_id}":{"delete":{"tags":["grants"],"summary":"Revoke Grant","description":"Revoke a developer's read access to a selective fraglet.","operationId":"revoke_grant_api_v1_fraglets__fraglet_id__grants__target_developer_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"fraglet_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fraglet Id"}},{"name":"target_developer_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Target Developer Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AssociationBody":{"properties":{"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Opaque end-user identifier scoped to the calling developer"}},"type":"object","title":"AssociationBody"},"ClaimBody":{"properties":{"from_principal":{"type":"string","maxLength":255,"title":"From Principal","description":"The principal ID to migrate associations from"},"to_principal":{"type":"string","maxLength":255,"title":"To Principal","description":"The principal ID to migrate associations to"}},"type":"object","required":["from_principal","to_principal"],"title":"ClaimBody"},"EmbeddingInfo":{"properties":{"model":{"type":"string","title":"Model"},"dimensions":{"type":"integer","title":"Dimensions"}},"type":"object","required":["model","dimensions"],"title":"EmbeddingInfo"},"FragletBatchRequest":{"properties":{"ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"title":"Ids"}},"type":"object","required":["ids"],"title":"FragletBatchRequest"},"FragletCreate":{"properties":{"title":{"type":"string","maxLength":100,"title":"Title"},"brief":{"type":"string","maxLength":500,"title":"Brief"},"detail":{"type":"string","maxLength":5000,"title":"Detail"},"additional":{"type":"object","title":"Additional"},"category":{"type":"string","maxLength":100,"title":"Category"},"tags":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Tags"},"domain":{"type":"string","title":"Domain"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"visibility":{"type":"string","title":"Visibility","default":"private"},"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Opaque end-user identifier scoped to the calling developer"}},"type":"object","required":["title","brief","detail","category","domain"],"title":"FragletCreate"},"FragletListResponse":{"properties":{"fraglets":{"items":{"$ref":"#/components/schemas/FragletResponse"},"type":"array","title":"Fraglets"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["fraglets","total","limit","offset"],"title":"FragletListResponse"},"FragletResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"title":{"type":"string","title":"Title"},"brief":{"type":"string","title":"Brief"},"detail":{"type":"string","title":"Detail"},"additional":{"anyOf":[{"type":"object"},{"items":{},"type":"array"}],"title":"Additional"},"category":{"type":"string","title":"Category"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"domain":{"type":"string","title":"Domain"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"visibility":{"type":"string","title":"Visibility"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"embedding":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Embedding"}},"type":"object","required":["id","title","brief","detail","additional","category","tags","domain","parent_id","visibility","created_at"],"title":"FragletResponse"},"FragletUpdate":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Title"},"brief":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Brief"},"detail":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Detail"},"additional":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Additional"},"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Category"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Tags"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"}},"type":"object","title":"FragletUpdate"},"GrantCreate":{"properties":{"developer_id":{"type":"string","format":"uuid","title":"Developer Id","description":"Developer to grant read access to"},"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Principal ID of the user creating the grant"}},"type":"object","required":["developer_id"],"title":"GrantCreate"},"GrantListResponse":{"properties":{"grants":{"items":{"$ref":"#/components/schemas/GrantResponse"},"type":"array","title":"Grants"}},"type":"object","required":["grants"],"title":"GrantListResponse"},"GrantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"fraglet_id":{"type":"string","format":"uuid","title":"Fraglet Id"},"developer_id":{"type":"string","format":"uuid","title":"Developer Id"},"granted_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","fraglet_id","developer_id","granted_by","created_at"],"title":"GrantResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JacketAdaptBody":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Opaque end-user identifier scoped to the calling developer"}},"type":"object","title":"JacketAdaptBody"},"JacketAssociationBody":{"properties":{"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Opaque end-user identifier scoped to the calling developer"},"follow":{"type":"boolean","title":"Follow","description":"If true, always read from the original jacket's current composition. If false (default), snapshot the composition at association time.","default":false}},"type":"object","title":"JacketAssociationBody"},"JacketCreate":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"visibility":{"type":"string","title":"Visibility","default":"private"},"fraglet_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"title":"Fraglet Ids"},"principal_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Principal Id","description":"Opaque end-user identifier scoped to the calling developer"}},"type":"object","required":["name"],"title":"JacketCreate"},"JacketFragletModify":{"properties":{"fraglet_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Fraglet Ids"}},"type":"object","required":["fraglet_ids"],"title":"JacketFragletModify"},"JacketListResponse":{"properties":{"jackets":{"items":{"$ref":"#/components/schemas/JacketResponse"},"type":"array","title":"Jackets"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["jackets","total","limit","offset"],"title":"JacketListResponse"},"JacketResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"visibility":{"type":"string","title":"Visibility"},"parent_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"fraglet_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Fraglet Ids"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"}},"type":"object","required":["id","name","description","visibility","parent_id","created_at","updated_at"],"title":"JacketResponse"},"JacketUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"}},"type":"object","title":"JacketUpdate"},"RegistrationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"org":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Org"},"website":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Website"},"turnstile_token":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Turnstile Token"}},"type":"object","required":["email","name"],"title":"RegistrationRequest"},"RegistrationResponse":{"properties":{"developer_id":{"type":"string","format":"uuid","title":"Developer Id"},"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["developer_id","api_key"],"title":"RegistrationResponse"},"ServerMetadata":{"properties":{"version":{"type":"string","title":"Version"},"embedding":{"$ref":"#/components/schemas/EmbeddingInfo"},"domains":{"items":{"type":"string"},"type":"array","title":"Domains"},"api_base":{"type":"string","title":"Api Base"}},"type":"object","required":["version","embedding","domains","api_base"],"title":"ServerMetadata"},"ShareLinkResponse":{"properties":{"fraglet_id":{"type":"string","format":"uuid","title":"Fraglet Id"},"sig":{"type":"string","title":"Sig"}},"type":"object","required":["fraglet_id","sig"],"title":"ShareLinkResponse","description":"Signed capability for a fraglet's share link. Clients combine the\nsignature with the fraglet id to build URLs of the form\n`/f/<id>?s=<sig>`. Anyone with the link can view and adapt the fraglet."},"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"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}