{"openapi":"3.1.0","info":{"title":"Particular Pages","version":"1.0.0","description":"Create a monthly personal or family magazine. Share only context the user explicitly selected. Do not send full conversation history, browsing URLs, credentials, sensitive traits, or another adult's private context. Personal notes require separate print consent. Creating checkout does not charge the user; they complete the linked Stripe checkout. Preserve the returned magazine capability privately. Do not expose it in chat or URLs. Purchases require an explicit user request."},"servers":[{"url":"https://particularpages.com/api/muse/v1"}],"security":[{"PartnerKey":[]}],"components":{"securitySchemes":{"PartnerKey":{"type":"http","scheme":"bearer","description":"Server-side partner key registered by the operator."},"MagazineToken":{"type":"apiKey","in":"header","name":"X-Magazine-Token","description":"Revocable capability returned once when a magazine is created."}}},"paths":{"/catalog":{"get":{"operationId":"getMagazineCatalog","summary":"Get formats, prices, styles, and purchasing availability","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}},"/magazines":{"post":{"operationId":"createPersonalMagazine","summary":"Create a draft from explicitly shared interests and aesthetic choices","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["individual","family"]},"theme":{"type":"string","enum":["edition","fieldwork","signal"]},"title":{"default":"A world of your own","type":"string","minLength":1,"maxLength":80},"readers":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":40},"ageBand":{"default":"adult","type":"string","enum":["adult","13-17","9-12","6-8","3-5"]},"interests":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"exclusions":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"readingStyle":{"default":"balanced","type":"string","enum":["balanced","deep","quick","practical"]},"personalNote":{"default":"","type":"string","maxLength":1000},"printablePersonal":{"default":false,"type":"boolean"},"shareInterests":{"default":false,"type":"boolean"}},"required":["name","ageBand","interests","exclusions","readingStyle","personalNote","printablePersonal","shareInterests"],"additionalProperties":false}},"consent":{"type":"boolean","const":true},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["mode","theme","title","readers","consent","requestId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"201":{"description":"Created. Store the IDs and magazineToken privately. The token is returned once.","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string"},"magazineToken":{"type":"string"},"readers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}}},"required":["id","magazineToken","readers"],"additionalProperties":false}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}},"/magazines/{magazineId}":{"get":{"operationId":"getMagazineStatus","summary":"View the draft and issue status","security":[{"PartnerKey":[],"MagazineToken":[]}],"parameters":[{"name":"magazineId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}},"/magazines/{magazineId}/context":{"post":{"operationId":"shareMagazineContext","summary":"Push the reader's explicitly approved interests and current goals","security":[{"PartnerKey":[],"MagazineToken":[]}],"parameters":[{"name":"magazineId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"readerId":{"type":"string"},"requestId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"consent":{"type":"boolean","const":true},"interests":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":80}},"goals":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","maxLength":200}},"printableNotes":{"default":[],"maxItems":5,"type":"array","items":{"type":"string","maxLength":500}},"printConsent":{"default":false,"type":"boolean"}},"required":["readerId","requestId","consent","interests","goals","printableNotes","printConsent"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}},"/magazines/{magazineId}/checkout":{"post":{"operationId":"createMagazineCheckout","summary":"After the user asks to buy, create a secure Stripe Checkout link","security":[{"PartnerKey":[],"MagazineToken":[]}],"parameters":[{"name":"magazineId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cadence":{"type":"string","enum":["monthly","single"]},"purchaseRequested":{"type":"boolean","const":true}},"required":["cadence","purchaseRequested"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}},"/magazines/{magazineId}/revoke":{"post":{"operationId":"revokeMagazineAccess","summary":"Revoke this magazine capability at the user's request","security":[{"PartnerKey":[],"MagazineToken":[]}],"parameters":[{"name":"magazineId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid input or consent"},"401":{"description":"Invalid credential"},"403":{"description":"Reader permission required"},"409":{"description":"State changed or request already used"},"503":{"description":"A required service is not configured"}}}}}}