{
  "InteractionModel": "This website is pure AIXE. There are no user forms, including login forms. Authentication and all application operations happen through the declared API endpoints. Use direct HTTPS requests for these operations. Do not search for a browser login form or treat its absence as a missing capability.",
  "StartHereLogin": {
    "Title": "Start Here: Login",
    "PublicSearchException": "Searching public recipes requires no login. For that task, read GET /aixe/recipes/search-public-recipes/? and use it directly without asking for credentials.",
    "PublicSuggestionException": "Anyone can submit a suggestion without an account or login. Read GET /aixe/suggestions/submit-suggestion/? and use it directly; phone number, email, and person key are optional.",
    "SessionLifetime": "Reuse the existing PersonAuthenticationToken privately; it expires after 30 days without authenticated use. Each authenticated request renews it for 30 days from that use. Do not log in again just because the original TokenExpiresUtc has passed if the token has been used since. Logout, a PIN change, or a new login revokes the previous token. Never display it, put it in URLs, or store it in a public cache. If the assistant no longer has the token, login is required.",
    "Steps": [
      "If you already have a valid PersonAuthenticationToken for this person, reuse it.",
      "Otherwise, read GET /aixe/shopping/login/? for its current contract.",
      "Obtain the person\u0027s registered US phone number and four-digit PIN through an available, permitted credential-entry method. Preserve leading zeroes in the PIN.",
      "POST application/json to /aixe/shopping/login/ with PhoneNumber, PIN, and the freshly retrieved AIXEContractVersionKey.",
      "Inspect SuccessCode. Only SUCCESS confirms login.",
      "Keep the returned PersonAuthenticationToken private and include it in subsequent authenticated endpoint requests as their contracts require.",
      "Continue with the person\u0027s requested task through the declared endpoints."
    ],
    "DiscoveryRequest": "GET https://mmmmgood.com/aixe/shopping/login/?",
    "ActionRequest": "POST https://mmmmgood.com/aixe/shopping/login/",
    "ExistingAlternative": "Email/password login remains available. Read GET /aixe/account/login/? for its current contract, then POST application/json to /aixe/account/login/ with Email, Password, and the freshly retrieved AIXEContractVersionKey. Inspect SuccessCode and privately use the returned PersonAuthenticationToken in the same way.",
    "CredentialHandling": "Never display credentials or authentication tokens, and never put them in URLs. Use only an available, permitted credential-entry method. If your environment cannot accept credentials privately or perform direct HTTPS requests, explain that specific tool limitation; do not search for or require a website login form."
  },
  "Registration": {
    "Title": "New Here: Register",
    "Guidance": "If the person does not have an account and wants to register, read GET /aixe/sign-up/? for the current contract. Obtain FirstName, their US PhoneNumber, and a four-digit PIN through an available, permitted credential-entry method, preserving leading zeroes. POST application/json to /aixe/sign-up/ with those fields and the freshly retrieved AIXEContractVersionKey. Only SuccessCode SUCCESS confirms registration. Then follow Start Here: Login; registration does not log the person in. Never display credentials or tokens or put them in URLs.",
    "DiscoveryRequest": "GET https://mmmmgood.com/aixe/sign-up/?",
    "ActionRequest": "POST https://mmmmgood.com/aixe/sign-up/"
  },
  "Protocol": "AIXE",
  "Version": "3.03",
  "Site": "MmmmGood",
  "SiteKey": "mmmmgood.com",
  "ProtocolReference": {
    "ProtocolHome": "http://aixeprotocol.com/",
    "CanonicalUsageContract": "http://aixeprotocol.com/usage/?",
    "Whitepaper": "http://aixeprotocol.com/whitepaper/full-spec.html",
    "Inventor": "Gregory Oglethorpe"
  },
  "Purpose": "Create a MmmmGood account, shop with lists and basket totals, save recipes, and manage existing shared lists through your AI assistant.",
  "ProtocolEthos": "AI systems are first-class participants. Use these declared capabilities and their live teaching contracts before scraping human pages.",
  "AuthorizedProtocolUse": "Traversing these endpoints for a human-authorized task is intended use. Respect authentication, user consent, and each capability\u0027s business rules.",
  "Instructions": [
    "Read the endpoint\u0027s GET /endpoint/? contract immediately before each action.",
    "Submit business inputs and the freshly loaded AIXEContractVersionKey in the declared POST JSON body.",
    "Only SuccessCode = SUCCESS means the action completed. HTTP status alone is not the business outcome.",
    "Account creation is followed by login. Protected actions require the resulting PersonAuthenticationToken."
  ],
  "Endpoints": [
    {
      "Endpoint": "/aixe/account/create-account/",
      "Method": "POST",
      "Title": "Create An Account",
      "Purpose": "Create the human account owner for MmmmGood using only first name, last name, email, ZIP code, and password. Use this when the person wants to join and does not already have an account. Returns a public PersonKey for their future kitchen data.",
      "AccessType": "Public",
      "GroupName": "Accounts",
      "DiscoveryRequest": "GET /aixe/account/create-account/?"
    },
    {
      "Endpoint": "/aixe/account/login/",
      "Method": "POST",
      "Title": "Log In",
      "Purpose": "Authenticate an active MmmmGood account using the owner\u0027s email and password. Returns a temporary token so the AI can perform protected account actions on their behalf.",
      "AccessType": "Public",
      "GroupName": "Accounts",
      "DiscoveryRequest": "GET /aixe/account/login/?"
    },
    {
      "Endpoint": "/aixe/account/get-profile/",
      "Method": "POST",
      "Title": "Get My Profile",
      "Purpose": "Retrieve the authenticated account owner\u0027s saved name, email, phone, address, and roles. Use this to confirm the signed-in identity or reuse that person\u0027s own contact details; it cannot read another account.",
      "AccessType": "Authenticated",
      "GroupName": "Accounts",
      "DiscoveryRequest": "GET /aixe/account/get-profile/?"
    },
    {
      "Endpoint": "/aixe/account/logout/",
      "Method": "POST",
      "Title": "Log Out",
      "Purpose": "End the current AIXE session when the human is finished. Invalidates the submitted account token so it can no longer retrieve private account information.",
      "AccessType": "Authenticated",
      "GroupName": "Accounts",
      "DiscoveryRequest": "GET /aixe/account/logout/?"
    },
    {
      "Endpoint": "/aixe/lists/create-list/",
      "Method": "POST",
      "Title": "Create A List",
      "Purpose": "Create a personal list, such as Shopping List, HEB, or Costco. The authenticated creator becomes its sole Admin and can manage settings, share access, or delete it.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/create-list/?"
    },
    {
      "Endpoint": "/aixe/lists/list-lists/",
      "Method": "POST",
      "Title": "Find My Lists",
      "Purpose": "Find lists you own and lists shared with you. Use this before selecting a list for reading, editing, or shopping. Returns a bounded page of summaries with your access role.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/list-lists/?"
    },
    {
      "Endpoint": "/aixe/lists/get-list/",
      "Method": "POST",
      "Title": "Get A List",
      "Purpose": "Read one list that you own or that has been shared with you. Returns the list settings and your role so you can determine which actions are available.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/get-list/?"
    },
    {
      "Endpoint": "/aixe/lists/update-list/",
      "Method": "POST",
      "Title": "Update A List",
      "Purpose": "Rename your list or change its description, checkmark behavior, or display order. Only the list owner with Admin access can change these settings.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/update-list/?"
    },
    {
      "Endpoint": "/aixe/lists/delete-list/",
      "Method": "POST",
      "Title": "Delete A List",
      "Purpose": "Permanently delete a list you own, every item it contains, and its item and sharing links. Use only when the owner intends to remove the whole list and its contents.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/delete-list/?"
    },
    {
      "Endpoint": "/aixe/lists/share-list/",
      "Method": "POST",
      "Title": "Share A List",
      "Purpose": "Give another existing MmmmGood account immediate Contributor access to a list you own. Supply their registered email address. If the account is absent, supply their phone number to send the two-text signup invitation instead.",
      "AccessType": "Authenticated",
      "GroupName": "Lists",
      "DiscoveryRequest": "GET /aixe/lists/share-list/?"
    },
    {
      "Endpoint": "/aixe/list-items/create-item/",
      "Method": "POST",
      "Title": "Add A List Item",
      "Purpose": "Add an item to an owned or shared list, optionally including quantity, unit, notes, and display order.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/create-item/?"
    },
    {
      "Endpoint": "/aixe/list-items/list-items/",
      "Method": "POST",
      "Title": "Find List Items",
      "Purpose": "Read a bounded page of items in a list. In checkable lists, unchecked items appear first and checked items follow them.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/list-items/?"
    },
    {
      "Endpoint": "/aixe/list-items/get-item/",
      "Method": "POST",
      "Title": "Read A List Item",
      "Purpose": "Read one item from an owned or shared list, including its quantity, notes, order, and stored check state.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/get-item/?"
    },
    {
      "Endpoint": "/aixe/list-items/update-item/",
      "Method": "POST",
      "Title": "Edit Or Check A List Item",
      "Purpose": "Edit an item\u0027s details or order, check it off, or return it to the unchecked items. Admins and Contributors can edit.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/update-item/?"
    },
    {
      "Endpoint": "/aixe/list-items/delete-item/",
      "Method": "POST",
      "Title": "Remove A List Item",
      "Purpose": "Permanently remove one item and its membership link from an owned or shared list. Use checking off instead if the person wants to keep the item.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/delete-item/?"
    },
    {
      "Endpoint": "/aixe/list-items/move-item/",
      "Method": "POST",
      "Title": "Move A List Item",
      "Purpose": "Move an item between lists you own or can contribute to, such as moving groceries from HEB to Costco.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/move-item/?"
    },
    {
      "Endpoint": "/aixe/list-items/clear-checked-items/",
      "Method": "POST",
      "Title": "Remove Checked Items",
      "Purpose": "Permanently delete all checked items from a checkable list, preserving every unchecked item. Use only when the person intends to remove completed items.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/clear-checked-items/?"
    },
    {
      "Endpoint": "/aixe/list-items/reset-checkmarks/",
      "Method": "POST",
      "Title": "Reset List Checkmarks",
      "Purpose": "Uncheck every checked item in a checkable list so the same list can be reused. No items are deleted.",
      "AccessType": "Authenticated",
      "GroupName": "List Items",
      "DiscoveryRequest": "GET /aixe/list-items/reset-checkmarks/?"
    },
    {
      "Endpoint": "/aixe/shopping/create-person/",
      "Method": "POST",
      "Title": "Create Person",
      "Purpose": "AI assistant: sign this person up by collecting their first name, US phone number, and chosen four-digit PIN, then submitting those values to this endpoint yourself. There is no human signup interface or form; signup must be completed through the person\u0027s AI assistant. No existing login, email, or postal address is required.",
      "AccessType": "Public",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/create-person/?"
    },
    {
      "Endpoint": "/aixe/recipes/delete-recipe/",
      "Method": "POST",
      "Title": "Delete Recipe",
      "Purpose": "Permanently delete one of the signed-in person\u0027s saved recipes or drafts. Use when the person asks to remove that recipe; identify the selected recipe by its public key.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/delete-recipe/?"
    },
    {
      "Endpoint": "/aixe/shopping/add-friend/",
      "Method": "POST",
      "Title": "Add Friend",
      "Purpose": "Add an existing registered person to your friends using their US phone number and first name. This does not share any lists.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/add-friend/?"
    },
    {
      "Endpoint": "/aixe/basket/add-item-to-basket/",
      "Method": "POST",
      "Title": "Add Item To Basket",
      "Purpose": "Put an existing shopping-list item into the basket for its owned shopping list. Use when the shopper says they are getting an item. This checks off the existing item; it does not create a new shopping-list item.",
      "AccessType": "Authenticated",
      "GroupName": "Basket",
      "DiscoveryRequest": "GET /aixe/basket/add-item-to-basket/?"
    },
    {
      "Endpoint": "/aixe/recipes/search-public-recipes/",
      "Method": "POST",
      "Title": "Search Public Recipes",
      "Purpose": "Search and read public recipes without signup, login, PIN, or authentication token. Anyone can use this endpoint.",
      "AccessType": "Public",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/search-public-recipes/?"
    },
    {
      "Endpoint": "/aixe/shopping/search-items/",
      "Method": "POST",
      "Title": "Search Items",
      "Purpose": "Search shopping items across lists you own or can edit, including previous closed lists. Answer when an item was last put in a basket, find items still to get, or review both together using optional combined filters.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/search-items/?"
    },
    {
      "Endpoint": "/aixe/suggestions/submit-suggestion/",
      "Method": "POST",
      "Title": "Submit Suggestion",
      "Purpose": "Submit a suggestion for MmmmGood. Anyone may submit without an account, signup, login, or authentication token.",
      "AccessType": "Public",
      "GroupName": "Suggestions",
      "DiscoveryRequest": "GET /aixe/suggestions/submit-suggestion/?"
    },
    {
      "Endpoint": "/aixe/shopping/clear-list/",
      "Method": "POST",
      "Title": "Clear List",
      "Purpose": "Empty one shopping list by permanently deleting all of its items, keeping the list available for reuse. Use when the person asks to clear or empty the entire list, including items already in the basket.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/clear-list/?"
    },
    {
      "Endpoint": "/aixe/recipes/share-recipe/",
      "Method": "POST",
      "Title": "Share Recipe",
      "Purpose": "Give an existing person their own independent copy of one of your recipes, identified by their US phone number.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/share-recipe/?"
    },
    {
      "Endpoint": "/aixe/shopping/invite-friend/",
      "Method": "POST",
      "Title": "Invite Friend",
      "Purpose": "Invite someone to MmmmGood by sending two texts: a personal invitation followed by a short message they can paste into ChatGPT to start signup through AIXE.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/invite-friend/?"
    },
    {
      "Endpoint": "/aixe/basket/remove-item-from-basket/",
      "Method": "POST",
      "Title": "Remove Item From Basket",
      "Purpose": "Remove an existing item from the basket for its owned shopping list while keeping the item on the shopping list. Use when the shopper puts something back; use delete-item only to permanently remove the shopping-list item.",
      "AccessType": "Authenticated",
      "GroupName": "Basket",
      "DiscoveryRequest": "GET /aixe/basket/remove-item-from-basket/?"
    },
    {
      "Endpoint": "/aixe/shopping/share-list/",
      "Method": "POST",
      "Title": "Share List",
      "Purpose": "Share one shopping list with an existing active person identified by their US phone number, so they can shop from the same list using their own login.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/share-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/login/",
      "Method": "POST",
      "Title": "Login",
      "Purpose": "Authenticate a shopper by their US phone number and four-digit PIN. Use before shopping or recipe actions; returns the same temporary account token used by the existing email login.",
      "AccessType": "Public",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/login/?"
    },
    {
      "Endpoint": "/aixe/shopping/set-pin/",
      "Method": "POST",
      "Title": "Set Pin",
      "Purpose": "Set or replace the signed-in person\u0027s four-digit shopping PIN and login phone. Use after existing email/password login to enable phone/PIN access without creating another Person.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/set-pin/?"
    },
    {
      "Endpoint": "/aixe/shopping/create-list/",
      "Method": "POST",
      "Title": "Create List",
      "Purpose": "Create a shopping list owned by the signed-in person. Items can be added immediately without knowing the store or prices.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/create-list/?"
    },
    {
      "Endpoint": "/aixe/sign-up/",
      "Method": "POST",
      "Title": "Sign Up",
      "Purpose": "AI assistant: sign this person up by collecting their first name, US phone number, and chosen four-digit PIN, then submitting those values to this endpoint yourself. There is no human signup interface or form; signup must be completed through the person\u0027s AI assistant. No existing login, email, or postal address is required.",
      "AccessType": "Public",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/sign-up/?"
    },
    {
      "Endpoint": "/aixe/shopping/open-shopping-list/",
      "Method": "POST",
      "Title": "Open Shopping List",
      "Purpose": "Open or reopen one of the signed-in person\u0027s shopping lists so it appears in open-list searches. Use when the shopper wants to resume an earlier list.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/open-shopping-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/list-lists/",
      "Method": "POST",
      "Title": "List Lists",
      "Purpose": "Find the signed-in person\u0027s shopping lists by name and optional open/closed status. For \u0027what open lists do I have?\u0027, submit IsOpen=true. Use the returned PersonListKey to read, reopen, close, or edit a selected list.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/list-lists/?"
    },
    {
      "Endpoint": "/aixe/shopping/get-list/",
      "Method": "POST",
      "Title": "Get List",
      "Purpose": "Read one owned shopping list\u0027s name and current store. This does not return the items; use list-items for a bounded item page.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/get-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/close-shopping-list/",
      "Method": "POST",
      "Title": "Close Shopping List",
      "Purpose": "Close one of the signed-in person\u0027s shopping lists so it no longer appears in open-list searches. Use when a shopping trip/list is finished, even if some items were not put in the basket.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/close-shopping-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/list-unbasketed-items/",
      "Method": "POST",
      "Title": "List Unbasketed Items",
      "Purpose": "Find everything the signed-in person still wanted to get: all unbasketed items across their open AND closed shopping lists. Use when starting a new list and recalling items left unbought on earlier trips. Each result identifies the original list and item.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/list-unbasketed-items/?"
    },
    {
      "Endpoint": "/aixe/shopping/update-list/",
      "Method": "POST",
      "Title": "Update List",
      "Purpose": "Rename an owned shopping list or set/change its current store and optional branch. Use when the shopper says where they are shopping.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/update-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/add-item-to-shopping-list/",
      "Method": "POST",
      "Title": "Add Item To Shopping List",
      "Purpose": "Add an item to an owned shopping list with only its name. Optional quantity, basket status, price, brand, location, and UPC can be supplied now or later.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/add-item-to-shopping-list/?"
    },
    {
      "Endpoint": "/aixe/shopping/list-items/",
      "Method": "POST",
      "Title": "List Items",
      "Purpose": "Find a bounded page of items in one owned shopping list. Filter to items in the basket, items still to get, or search item names. Each item includes its recorded store and aisle when known.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/list-items/?"
    },
    {
      "Endpoint": "/aixe/shopping/get-item/",
      "Method": "POST",
      "Title": "Get Item",
      "Purpose": "Read one item in an owned shopping list, including quantity, price, basket state, brand, historical store/branch/aisle, and optional UPC.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/get-item/?"
    },
    {
      "Endpoint": "/aixe/shopping/update-item/",
      "Method": "POST",
      "Title": "Update Item",
      "Purpose": "Edit a shopping item, mark it in the basket, uncheck it, or record/correct quantity, price, brand, store, aisle, and UPC. Missing prices never prevent checking off an item.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/update-item/?"
    },
    {
      "Endpoint": "/aixe/shopping/delete-item/",
      "Method": "POST",
      "Title": "Delete Item",
      "Purpose": "Permanently remove one item from an owned shopping list. Use when the person asks to delete it; use update-item to check it off when it should be kept.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/delete-item/?"
    },
    {
      "Endpoint": "/aixe/shopping/basket-total/",
      "Method": "POST",
      "Title": "Basket Total",
      "Purpose": "Calculate what is currently in the basket and its known cost for one owned shopping list. Use for \u0027what does my basket cost?\u0027 and disclose unpriced items rather than treating them as free.",
      "AccessType": "Authenticated",
      "GroupName": "Shopping",
      "DiscoveryRequest": "GET /aixe/shopping/basket-total/?"
    },
    {
      "Endpoint": "/aixe/recipes/add-recipe/",
      "Method": "POST",
      "Title": "Add Recipe",
      "Purpose": "Save a recipe draft for the signed-in person using only the dish name. Description, ingredients, steps, servings, and timings can be added now or later.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/add-recipe/?"
    },
    {
      "Endpoint": "/aixe/recipes/list-recipes/",
      "Method": "POST",
      "Title": "List Recipes",
      "Purpose": "Find a bounded page of the signed-in person\u0027s saved recipes by optional dish-name search. Returns summaries; use get-recipe for ingredients and cooking instructions.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/list-recipes/?"
    },
    {
      "Endpoint": "/aixe/recipes/get-recipe/",
      "Method": "POST",
      "Title": "Get Recipe",
      "Purpose": "Retrieve one of the signed-in person\u0027s saved recipes, including ingredients, preparation steps, servings, and timings. Other people\u0027s recipes are inaccessible.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/get-recipe/?"
    },
    {
      "Endpoint": "/aixe/recipes/update-recipe/",
      "Method": "POST",
      "Title": "Update Recipe",
      "Purpose": "Edit one of the signed-in person\u0027s saved recipe drafts or completed recipes. Omitted fields are preserved so ingredients or instructions can be supplied in separate conversations.",
      "AccessType": "Authenticated",
      "GroupName": "Saved Recipes",
      "DiscoveryRequest": "GET /aixe/recipes/update-recipe/?"
    }
  ]
}