{
  "openapi": "3.1.0",
  "info": {
    "title": "IronQ Cut tools",
    "version": "1.1.0",
    "description": "Free tools for anyone losing weight who wants to keep their muscle and strength. No account or key needed. Every response carries a plain-language `summary` to read to the person. Not medical advice. To read a person's own IronQ workout log, use the MCP connector at https://ironq.app/mcp/me (sign-in required); setup for every assistant is at https://ironq.app/connect.",
    "contact": {
      "name": "IronQ",
      "url": "https://ironq.app/connect",
      "email": "hello@ironq.app"
    },
    "termsOfService": "https://ironq.app/terms"
  },
  "servers": [
    {
      "url": "https://ironq.app"
    }
  ],
  "paths": {
    "/api/cut/plan": {
      "post": {
        "operationId": "createCutPlan",
        "summary": "Build a weight-loss plan that protects strength",
        "description": "Rate of loss, daily protein target, weekly training structure, what to watch, and a plan code the person can claim in the IronQ app. Use whenever someone wants to lose weight without losing muscle.",
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "target_weight_lb",
                  "training_days_per_week",
                  "training_experience"
                ],
                "properties": {
                  "weight_lb": {
                    "type": "number",
                    "description": "Current body weight, pounds."
                  },
                  "weight_kg": {
                    "type": "number",
                    "description": "Current body weight, kilograms, if pounds are not to hand."
                  },
                  "target_weight_lb": {
                    "type": "number",
                    "description": "Goal weight, pounds."
                  },
                  "target_weight_kg": {
                    "type": "number",
                    "description": "Goal weight, kilograms."
                  },
                  "training_days_per_week": {
                    "type": "integer",
                    "minimum": 2,
                    "maximum": 7
                  },
                  "training_experience": {
                    "type": "string",
                    "enum": [
                      "beginner",
                      "intermediate",
                      "advanced"
                    ]
                  },
                  "height_in": {
                    "type": "number"
                  },
                  "height_cm": {
                    "type": "number"
                  },
                  "age": {
                    "type": "integer"
                  },
                  "body_fat_pct": {
                    "type": "number",
                    "description": "Only if actually measured."
                  },
                  "target_date": {
                    "type": "string",
                    "description": "Deadline, YYYY-MM-DD. The plan says so if it is unrealistic."
                  },
                  "medication_status": {
                    "type": "string",
                    "enum": [
                      "yes",
                      "no",
                      "undisclosed"
                    ],
                    "description": "Using a prescription weight-loss medication? Omit if not asked. Never give dosing advice."
                  },
                  "source": {
                    "type": "string",
                    "description": "Which assistant sent this: chatgpt, claude, gemini, grok, muse. Optional."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The plan.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The plan in plain words. Read this to the person."
                    },
                    "plan_code": {
                      "type": "string",
                      "description": "Short code the person can enter in the IronQ app."
                    },
                    "protein_target_g": {
                      "type": "integer"
                    },
                    "training_days": {
                      "type": "integer"
                    },
                    "weeks_min": {
                      "type": "number"
                    },
                    "weeks_max": {
                      "type": "number"
                    },
                    "plan": {
                      "type": "object",
                      "description": "The full structured plan."
                    },
                    "web_url": {
                      "type": "string"
                    },
                    "disclaimer": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "422": {
            "description": "A required field is missing; summary says which.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Too many requests this hour.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/cut/protein": {
      "post": {
        "operationId": "calculateProteinTarget",
        "summary": "Daily protein range while losing weight",
        "description": "A daily protein range for someone losing weight who wants to keep muscle, and what the number is based on.",
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "weight_lb": {
                    "type": "number",
                    "description": "Current body weight, pounds. Send this or weight_kg."
                  },
                  "weight_kg": {
                    "type": "number"
                  },
                  "target_weight_lb": {
                    "type": "number",
                    "description": "Improves the answer when body fat is unknown."
                  },
                  "target_weight_kg": {
                    "type": "number"
                  },
                  "body_fat_pct": {
                    "type": "number",
                    "description": "Only if measured; the target is then based on lean mass."
                  },
                  "training_experience": {
                    "type": "string",
                    "enum": [
                      "beginner",
                      "intermediate",
                      "advanced"
                    ]
                  },
                  "medication_status": {
                    "type": "string",
                    "enum": [
                      "yes",
                      "no",
                      "undisclosed"
                    ],
                    "description": "Using a prescription weight-loss medication? Omit if not asked. Never give dosing advice."
                  },
                  "source": {
                    "type": "string",
                    "description": "Which assistant sent this: chatgpt, claude, gemini, grok, muse. Optional."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The protein range.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "422": {
            "description": "Something needed is missing; summary says what to ask for.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Too many requests this hour.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/api/cut/plateau": {
      "post": {
        "operationId": "analyzeWeightLossPlateau",
        "summary": "Why the scale has stopped moving",
        "description": "Ranked likely causes of a weight-loss stall, a check for each and one next action. Give dated weigh-ins to measure the real trend; it says plainly when a stall is not a plateau.",
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "weeks_stalled": {
                    "type": "integer"
                  },
                  "weigh_ins": {
                    "type": "array",
                    "description": "Dated weigh-ins, oldest first. Four or more lets the trend be measured.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "date": {
                          "type": "string"
                        },
                        "weight_lb": {
                          "type": "number"
                        },
                        "weight_kg": {
                          "type": "number"
                        }
                      }
                    }
                  },
                  "current_weight_lb": {
                    "type": "number"
                  },
                  "current_weight_kg": {
                    "type": "number"
                  },
                  "target_weight_lb": {
                    "type": "number"
                  },
                  "total_lost_lb": {
                    "type": "number",
                    "description": "Pounds lost so far on this attempt."
                  },
                  "protein_g_per_day": {
                    "type": "number"
                  },
                  "daily_steps": {
                    "type": "integer"
                  },
                  "sleep_hours": {
                    "type": "number"
                  },
                  "training_days_per_week": {
                    "type": "integer"
                  },
                  "strength_trend": {
                    "type": "string",
                    "enum": [
                      "up",
                      "flat",
                      "down"
                    ]
                  },
                  "medication_status": {
                    "type": "string",
                    "enum": [
                      "yes",
                      "no",
                      "undisclosed"
                    ],
                    "description": "Using a prescription weight-loss medication? Omit if not asked. Never give dosing advice."
                  },
                  "source": {
                    "type": "string",
                    "description": "Which assistant sent this: chatgpt, claude, gemini, grok, muse. Optional."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The analysis.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "422": {
            "description": "Something needed is missing; summary says what to ask for.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "429": {
            "description": "Too many requests this hour.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "summary": {
                      "type": "string",
                      "description": "The answer in plain words. Read this to the person."
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    }
  }
}
