{"openapi":"3.1.0","info":{"title":"Manifestory","version":"1.0.0","description":"Access to the user's Manifestory journey: a 30-day manifestation practice with one goal, a daily affirmation and action, a daily check-in, and an evidence log. Every response includes `speech`, a short plain-text summary to read aloud verbatim.","termsOfService":"https://manifestory.app/terms-of-service/","contact":{"name":"Manifestory","url":"https://manifestory.app","email":"info@vedastack.com"},"x-logo":{"url":"https://api.manifestory.app/icon.png"},"x-muse":{"company":"VedaStack LLC","supportEmail":"info@vedastack.com","websiteUrl":"https://manifestory.app","privacyPolicyUrl":"https://manifestory.app/privacy-policy/","termsUrl":"https://manifestory.app/terms-of-service/","termsOfServiceUrl":"https://manifestory.app/terms-of-service/","auth":"apiKey","docsUrl":"https://api.manifestory.app/llms.txt","iconUrl":"https://api.manifestory.app/icon.png","examplePrompts":["What's my affirmation and action for today?","How's my manifestation journey going?","I did today's action and I feel great — check me in.","Log that I saw 11:11 today as a synchronicity.","Read me my recent evidence."]}},"externalDocs":{"description":"Guide for AI assistants","url":"https://api.manifestory.app/llms.txt"},"servers":[{"url":"https://api.manifestory.app"}],"security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal access token from Manifestory → Settings → AI assistants (starts with mfy_)."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"paths":{"/v1/me":{"get":{"operationId":"getConnection","summary":"Check the Manifestory connection and what it can do","description":"Verifies the access token and returns this connection's access level (read, or read_write for check-ins and evidence) and whether the user has an active journey. Use it to test the connection after setup, or when the user asks what their Manifestory connection can do.","responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/today":{"get":{"operationId":"getToday","summary":"Get today's affirmation, action and check-in status","description":"Returns today's step of the user's 30-day manifestation journey: day number, affirmation, quote, the one action for today and whether it is done, whether the user has checked in, the moon phase and their current streak. Call this first whenever the user asks about today, for open-ended questions like \"what can you tell me?\" or \"how am I doing today?\", and before checking in — check-in requires the `date` returned here.","responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/journey":{"get":{"operationId":"getJourney","summary":"Get progress on the current 30-day journey","description":"Returns the user's manifestation (their goal), which day they are on, how many actions they have completed, how often they have checked in, how their feelings have trended, how much evidence they have logged, their current streak, and each of the last seven days of the journey, newest first — every calendar day, including days the user never opened the app (whether they checked in, did the action and how they felt). Use for \"how am I doing?\" and for questions about recent days, like \"did I do my action yesterday?\".","responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/evidence":{"get":{"operationId":"listEvidence","summary":"List recent evidence on the current journey","description":"Evidence is what the user notices that shows their manifestation unfolding: wins, synchronicities (e.g. repeating numbers, meaningful coincidences), signs, and other moments. Newest first.","parameters":[{"name":"limit","in":"query","required":false,"description":"How many entries to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"How many entries to return."}}],"responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}},"post":{"operationId":"addEvidence","summary":"Add an evidence entry to the user's journey","description":"Logs something the user noticed that shows their manifestation unfolding. Use type `synchronicity` for meaningful coincidences and repeating numbers (e.g. 11:11), `sign` for symbolic signs, `win` for progress or good news, `other` otherwise. Send an Idempotency-Key header so a retried request is not logged twice.","x-requires-scope":"read_write","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional. Any unique string per logical request (max 100 chars). Retries are safe with or without it: repeated requests are not duplicated.","schema":{"type":"string","maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":200,"description":"What happened, in the user's words."},"type":{"type":"string","enum":["win","synchronicity","sign","other"],"default":"win","description":"Kind of evidence."}},"required":["text"],"additionalProperties":false}}}},"responses":{"201":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/coaching":{"get":{"operationId":"getCoachingInsight","summary":"Read one of the user's coaching insights (week one, two, three, or the full journey)","description":"Coaching insights are short personal write-ups Manifestory gives at days 7, 14, 21 and 30. Pass `milestone` (7, 14, 21 or 30) for a specific one; omit it for the most recent. The response always lists all four with their status — available, ready_in_app (reached but not yet revealed in the app), locked (needs a subscription) or upcoming — so you can tell the user which ones they can hear. Insights are revealed in the app, not here.","parameters":[{"name":"milestone","in":"query","required":false,"description":"Which insight: 7, 14, 21 or 30. Omit for the latest.","schema":{"type":"integer","minimum":7,"maximum":30,"description":"Which insight: 7, 14, 21 or 30. Omit for the latest."}}],"responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/card":{"get":{"operationId":"getArcanaCard","summary":"Get the user's Arcana card for this journey","description":"Each journey the user draws one card from the Manifestory Arcana, a deck of 22 qualities (Nerve, Stillness, Clearing…), and carries it for all 30 days. Returns the card, what it gives and costs, its daily practice and the personal reflection written for this user. Cards are drawn and turned over in the app; a card that hasn't been turned over stays hidden here too.","responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/moon":{"get":{"operationId":"getMoonCalendar","summary":"Get the moon phases across the rest of the journey","description":"Manifestory aligns each journey day with the moon. Returns today's phase and the upcoming new, first-quarter, full and last-quarter moons that fall within the journey, with their dates and journey day numbers. Use for questions like \"when is the next full moon in my journey?\".","responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}},"/v1/today/check-in":{"post":{"operationId":"checkIn","summary":"Check in for today: record whether today's action is done and how the user feels","description":"Records the user's daily check-in. First call getToday and pass its `date` — if the day has rolled over since, this returns 409 with the new day's action instead of checking in the wrong day. A day can only be checked in once and a check-in cannot be changed afterwards: repeating the same check-in returns success (duplicate: true), a different answer returns 409. Safe to retry. Only send `note` if the user dictated one; it is private and can never be read back through this API.","x-requires-scope":"read_write","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional. Any unique string per logical request (max 100 chars). Retries are safe with or without it: repeated requests are not duplicated.","schema":{"type":"string","maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","format":"date","description":"Today's date: pass the `date` from getToday. Check-ins can only be recorded for today; past and future days are refused, so don't offer to backdate."},"action_completed":{"type":"boolean","description":"Whether the user did today's action."},"feeling":{"type":"string","enum":["positive","negative","neutral","not_sure"],"description":"How the user feels about their manifestation today. not_sure means they are unsure."},"note":{"type":"string","maxLength":1000,"description":"Optional journal note, in the user's words."}},"required":["date","action_completed","feeling"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success. Includes `speech`.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"401":{"description":"Missing, invalid, revoked or expired token.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"403":{"description":"Token is read-only, or the membership is inactive.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"409":{"description":"Journey not active, day has changed, or already checked in. Read `speech` to the user.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}},"429":{"description":"Rate limited (30 requests per minute per token). Wait Retry-After seconds, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Machine-readable error code."},"message":{"type":"string"},"speech":{"type":"string","description":"Plain-text explanation to read to the user."}}}}}}}}}}}