{
  "openapi": "3.1.0",
  "info": {
    "title": "Keel agent checkout (Machine Payments Protocol)",
    "version": "2026-10-09",
    "description": "Buy one prepaid, non-renewing term of a Keel plan with a Stripe Shared Payment Token. The same plans are on sale over ACP (/.well-known/acp.json) and UCP (/.well-known/ucp)."
  },
  "servers": [
    {
      "url": "https://app.keelgrc.com"
    }
  ],
  "x-service-info": {
    "categories": [
      "saas",
      "compliance",
      "grc"
    ],
    "docs": {
      "homepage": "https://keelgrc.com/",
      "apiReference": "https://docs.keelgrc.com/api-mcp/agent-checkout/",
      "llms": "https://keelgrc.com/llms.txt"
    }
  },
  "paths": {
    "/api/mpp/plans/keel-starter-monthly": {
      "post": {
        "operationId": "buyStarterMonthly",
        "summary": "Buy Keel Starter plan, one month",
        "description": "Creates a new Keel workspace on the Starter plan for one month, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "9900",
              "currency": "usd",
              "description": "Keel Starter plan, one month",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    },
    "/api/mpp/plans/keel-starter-annual": {
      "post": {
        "operationId": "buyStarterAnnual",
        "summary": "Buy Keel Starter plan, one year",
        "description": "Creates a new Keel workspace on the Starter plan for one year, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "99900",
              "currency": "usd",
              "description": "Keel Starter plan, one year",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    },
    "/api/mpp/plans/keel-pro-monthly": {
      "post": {
        "operationId": "buyProMonthly",
        "summary": "Buy Keel Pro plan, one month",
        "description": "Creates a new Keel workspace on the Pro plan for one month, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "29900",
              "currency": "usd",
              "description": "Keel Pro plan, one month",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    },
    "/api/mpp/plans/keel-pro-annual": {
      "post": {
        "operationId": "buyProAnnual",
        "summary": "Buy Keel Pro plan, one year",
        "description": "Creates a new Keel workspace on the Pro plan for one year, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "309900",
              "currency": "usd",
              "description": "Keel Pro plan, one year",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    },
    "/api/mpp/plans/keel-enterprise-monthly": {
      "post": {
        "operationId": "buyEnterpriseMonthly",
        "summary": "Buy Keel Enterprise plan, one month",
        "description": "Creates a new Keel workspace on the Enterprise plan for one month, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "199900",
              "currency": "usd",
              "description": "Keel Enterprise plan, one month",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    },
    "/api/mpp/plans/keel-enterprise-annual": {
      "post": {
        "operationId": "buyEnterpriseAnnual",
        "summary": "Buy Keel Enterprise plan, one year",
        "description": "Creates a new Keel workspace on the Enterprise plan for one year, paid up front. It does not renew. The buyer receives an email invitation to sign in as the workspace owner. Send the request without an Authorization header to receive the 402 challenge, then retry with the Payment credential.",
        "x-payment-info": {
          "offers": [
            {
              "amount": "1999000",
              "currency": "usd",
              "description": "Keel Enterprise plan, one year",
              "intent": "charge",
              "method": "stripe"
            }
          ]
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PurchaseRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Paid. The workspace exists and the owner invitation was emailed. Carries a Payment-Receipt header.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PurchaseResult"
                }
              }
            }
          },
          "400": {
            "description": "The buyer email is missing or invalid."
          },
          "402": {
            "description": "Payment Required. The WWW-Authenticate header carries the challenge."
          },
          "503": {
            "description": "Paid but not finished. Retry the same request; it will not charge again."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "PurchaseRequest": {
        "type": "object",
        "required": [
          "buyer"
        ],
        "properties": {
          "buyer": {
            "type": "object",
            "required": [
              "email"
            ],
            "properties": {
              "email": {
                "type": "string",
                "format": "email",
                "description": "Receives the workspace owner invitation."
              },
              "first_name": {
                "type": "string"
              },
              "last_name": {
                "type": "string"
              },
              "full_name": {
                "type": "string"
              },
              "company": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "PurchaseResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "const": "completed"
          },
          "order_id": {
            "type": "string"
          },
          "plan": {
            "type": "string"
          },
          "amount": {
            "type": "string",
            "description": "Minor units."
          },
          "currency": {
            "type": "string"
          },
          "renews": {
            "type": "boolean",
            "const": false
          },
          "message": {
            "type": "string"
          }
        }
      }
    }
  }
}