{"openapi":"3.1.0","info":{"title":"Dearly Muse Connector","version":"0.1.0"},"security":[{"museApiKey":[]}],"components":{"securitySchemes":{"museApiKey":{"type":"http","scheme":"bearer","description":"An API key minted by POST /v1/api-keys or scripts/create-api-key.js, sent as 'Authorization: Bearer <key>'."}}},"paths":{"/v1/api-keys":{"post":{"operationId":"createApiKey","summary":"Mint an additional API key for this same connected user (rotation)"},"get":{"operationId":"listApiKeys","summary":"List this user's API keys (labels and metadata only, never key values)"}},"/v1/api-keys/{id}":{"delete":{"operationId":"revokeApiKey","summary":"Revoke one of this user's API keys"}},"/v1/people":{"post":{"operationId":"rememberPerson","summary":"Store a person and optional postal address"}},"/v1/occasions":{"post":{"operationId":"rememberOccasion","summary":"Store an occasion; Muse candidates remain inactive"}},"/v1/occasions/{id}/fulfillment-choices":{"get":{"operationId":"getFulfillmentChoices","summary":"Ask whether to send a postcard, flowers, or an occasion-aware gift"}},"/v1/reminders/claim":{"post":{"operationId":"claimDueReminders","summary":"Atomically claim reminders for delivery"}},"/v1/drafts":{"post":{"operationId":"draftGift","summary":"After explicit address confirmation, validate and preview an itemised order quote"}},"/v1/goody/products":{"get":{"operationId":"browseGoodyProducts","summary":"Browse current Goody sandbox products and prices"}},"/v1/goody/products/{id}":{"get":{"operationId":"getGoodyProduct","summary":"Retrieve current Goody product details, variants, restrictions, and imagery"}},"/v1/occasions/{id}/goody-quote":{"post":{"operationId":"quoteGoodyGift","summary":"After explicit address confirmation, calculate Goody costs, tax range, Dearly fee, and total"}},"/v1/occasions/{id}/goody-draft":{"post":{"operationId":"draftGoodyGift","summary":"Create a provider-priced direct-delivery gift draft after address confirmation"}},"/v1/drafts/{id}/previews/{side}.jpg":{"get":{"operationId":"getPostcardPreviewImage","summary":"Use Muse's original photo front or download a rendered back JPEG"}},"/v1/postcard-options":{"post":{"operationId":"savePostcardOptions","summary":"Persist exactly four occasion-aware front options generated by Muse"}},"/v1/postcard-options/{id}/customize":{"post":{"operationId":"customizePostcardFront","summary":"Store a Muse-regenerated front image"}},"/v1/postcard-options/{id}/select":{"post":{"operationId":"selectPostcardFront","summary":"Select a front and edit the back message typography"}},"/v1/drafts/{id}/pay":{"post":{"operationId":"approvePayAndFulfill","summary":"Test-only payment followed by one sandbox fulfilment order"}},"/v1/orders/{id}/status":{"get":{"operationId":"getOrderStatus","summary":"Refresh an order's status from its provider"}},"/v1/orders/{id}/preview":{"get":{"operationId":"getOrderPreview","summary":"Get a short-lived PostGrid PDF preview URL"}},"/v1/orders/{id}/cancel":{"post":{"operationId":"cancelOrder","summary":"Cancel with the provider before recording a refund"}},"/v1/autopilot/rules":{"post":{"operationId":"setAutopilotRule","summary":"Create explicit capped autopilot consent"}},"/v1/action-items":{"get":{"operationId":"getActionItems","summary":"Return failures that Muse should explain to the user"}},"/v1/data-export":{"get":{"operationId":"exportMyData","summary":"Export all user data"}},"/v1/account":{"delete":{"operationId":"deleteMyData","summary":"Delete all user data"}}}}
