{
  "version": "2",
  "generatedAt": "2026-11-06T23:02:15.198Z",
  "listing": {
    "slug": "killbill--killbill",
    "name": "Kill Bill",
    "tagline": "Self-hosted subscription billing and payments with a catalog you define in XML.",
    "shortTagline": "Subscription billing platform",
    "description": "Kill Bill is a Java billing server for subscriptions, usage, invoicing, payments across gateways, credits, tax and dunning. Plans, prices and overdue rules are XML documents, and accounts, subscriptions, invoices and payments run through a documented REST API. The Aviate enterprise offer is a separate paid product.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [],
    "shape": "business-app",
    "formFactor": "api",
    "executionModel": "deterministic",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "Java"
      ],
      "frameworks": [
        "Maven",
        "Jersey (JAX-RS)"
      ],
      "packageManager": "maven",
      "database": [
        "MySQL",
        "MariaDB",
        "PostgreSQL"
      ],
      "hostingTarget": [
        "docker",
        "tomcat",
        "kubernetes"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/killbill/killbill",
        "owner": "killbill",
        "name": "killbill",
        "license": "Apache-2.0",
        "stars": 5845,
        "lastCommit": "2026-10-28"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://apidocs.killbill.io",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Define the catalog (products, plans, prices, trials)",
        "reachable": true,
        "evidence": "POST /1.0/kb/catalog/xml and /catalog/simplePlan in CatalogResource.java"
      },
      {
        "job": "Create accounts and subscriptions",
        "reachable": true,
        "evidence": "AccountResource.java and SubscriptionResource.java under /1.0/kb/accounts and /1.0/kb/subscriptions"
      },
      {
        "job": "Record and read usage",
        "reachable": true,
        "evidence": "UsageResource.java: POST /1.0/kb/usages, GET by subscription and unit type"
      },
      {
        "job": "Generate and manage invoices",
        "reachable": true,
        "evidence": "InvoiceResource.java, InvoiceItemResource.java, plus charges under /1.0/kb/invoices/charges"
      },
      {
        "job": "Collect payments through gateways",
        "reachable": true,
        "evidence": "PaymentResource.java, PaymentMethodResource.java, PaymentGatewayResource.java, InvoicePaymentResource.java"
      },
      {
        "job": "Issue credits and handle chargebacks",
        "reachable": true,
        "evidence": "CreditResource.java POST /1.0/kb/credits; chargeback paths in JaxrsResource.java"
      },
      {
        "job": "Configure dunning (overdue rules)",
        "reachable": true,
        "evidence": "OverdueResource.java: POST /1.0/kb/overdue/xml"
      },
      {
        "job": "Per-tenant settings and payment plugin config",
        "reachable": true,
        "evidence": "TenantResource.java uploadPerTenantConfig and uploadPluginConfig/{pluginName}"
      },
      {
        "job": "Tax calculation",
        "reachable": true,
        "evidence": "Tax plugins run at invoice time: POST /1.0/kb/tenants/uploadPluginConfig/killbill-avatax sets the plugin (avatax README) and POST /1.0/kb/invoices/taxes/{accountId} adds tax items. Rates stay in the tax engine."
      },
      {
        "job": "Admin UI (Kaui) screens",
        "reachable": false,
        "evidence": "Kaui is a separate Rails app; an agent does not drive its screens, but they sit on this same REST API, so no billing job is lost",
        "outcome": "do-it-yourself",
        "why": "Kaui is a web app for people, and an agent doesn't drive its screens. It sits on the same REST API, so no billing job is lost."
      }
    ],
    "editions": [
      {
        "name": "Kill Bill (open source)",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/killbill/killbill"
          },
          {
            "kind": "container",
            "url": "https://killbill.io/download",
            "command": "docker compose up"
          }
        ]
      },
      {
        "name": "Aviate",
        "price": {
          "amount": 9999,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "installable",
            "url": "https://killbill.io/aviate"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md in the repo. killbill.io/llms.txt is a site summary for agents, not a skill."
    },
    "customization": {
      "summary": "The catalog (products, plans, prices, trial and discount phases, cancellation and plan-change rules) is an XML document and overdue rules are overdue.xml. A single-tenant setup can load both from the filesystem with org.killbill.catalog.uri and org.killbill.overdue.uri; multi-tenant setups upload them per tenant through the REST API or Kaui, which stores them in the database. Payment retry and invoice behavior is set with org.killbill.* properties in killbill.properties, per-tenant config, or KB_org_killbill_* env vars when org.killbill.server.lookupEnvironmentVariables is true.",
      "envVars": [
        "KB_org_killbill_payment_retry_days",
        "KB_org_killbill_invoice_dryRunNotificationSchedule",
        "KB_org_killbill_catalog_uri",
        "KB_org_killbill_dao_url"
      ],
      "configFiles": [
        "killbill.properties",
        "catalog.xml",
        "overdue.xml",
        "shiro.ini"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 8
    },
    "useWhen": [
      "you sell subscriptions or metered usage and want billing logic you own instead of a per-revenue SaaS fee",
      "you want an agent to create plans, subscriptions and invoices through one REST API"
    ],
    "accounts": [
      "A payment gateway account, through a plugin such as Stripe or Adyen"
    ],
    "active": true,
    "lastActivity": "2026-10-28",
    "gotchas": [
      "Needs a Java server plus MySQL, MariaDB or PostgreSQL; the Docker Compose file on the download page starts Kill Bill, Kaui and MariaDB",
      "Open source has no support or SLA; Aviate adds a catalog UI, wallet, coupons and support for USD 9,999 per month paid annually with a 12-month minimum, and runs on your own infrastructure",
      "A catalog uploaded for a tenant overrides the file at org.killbill.catalog.uri, and the docs point multi-tenant setups to the API",
      "Tax and gateway connections come from separate plugins, each with its own config",
      "Auth is HTTP basic plus X-Killbill-ApiKey and X-Killbill-ApiSecret headers",
      "The aviate-mcp server (about 127 tools) ships as part of Aviate, with no public repo, package or hosted endpoint, so open source users call the REST API"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: billing server with a REST API; Kaui is a separate admin UI",
      "executionModel": "no model in the product; billing rules are deterministic",
      "operability": "jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/ in the same repo; docs at apidocs.killbill.io; auth per docs.killbill.io/latest/userguide_configuration.html curl example",
      "effort": "CatalogConfig.java and OverdueProperties.java: org.killbill.catalog.uri and org.killbill.overdue.uri read from the classpath or filesystem; docs userguide_configuration: KB_org_killbill_payment_retry_days is a per-tenant, file or env var setting",
      "editions": "killbill.io/pricing: Aviate 9,999 USD per month, billed annually; killbill.io/llms.txt: 12-month minimum; killbill.io/kill-bill-vs-aviate: Kill Bill and the Aviate plugin run in your infrastructure; open source Apache-2.0",
      "active": "Latest commit 2026-10-28, tag killbill-0.25.6 the same day; bug fix PRs merged in October. The GitHub Releases page lags at 0.24.22 from 2026-09-29"
    },
    "confidence": {
      "formFactor": 0.9,
      "executionModel": 0.95,
      "operability": 0.9,
      "effort": 0.85,
      "reach": 0.85,
      "editions": 0.9
    },
    "openQuestions": [
      "aviate-mcp: blog.killbill.io (2026-08-12) says the self-hosted server ships as part of Aviate and only the aviate_* tools need an Aviate login. Whether the kb_* tools can be had without Aviate is not stated, so no mcpServer is recorded",
      "Provenance not established"
    ],
    "sources": [
      {
        "url": "https://github.com/killbill/killbill",
        "foundBy": "sourcing:invoicing-finance:github"
      },
      {
        "url": "https://apidocs.killbill.io",
        "foundBy": "analysis"
      }
    ],
    "published": true,
    "lastCheckedAt": "2026-11-06",
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "Passes all gates: Apache-2.0, commit and tag 2026-10-28, 5.8k stars. config-only holds because retry days are a business env var and catalog and overdue XML can load from files through named properties. Operable through the Builder's REST API with key and secret auth. Aviate price confirmed on the pricing page; no public MCP server found.",
      "disputed": []
    },
    "agentAccess": {
      "setup": [
        "Start Kill Bill and Kaui with the Docker Compose file from the getting started guide.",
        "Find the default admin login in that guide, and change it before anyone else can reach the server.",
        "Create a tenant. Your agent can do this with the admin login through POST /1.0/kb/tenants, or you can use Kaui.",
        "Give your agent the tenant's API key and secret. It sends them in the X-Killbill-ApiKey and X-Killbill-ApiSecret headers.",
        "If you take payments, set up a gateway plugin and its account yourself."
      ],
      "sources": [
        "https://docs.killbill.io/latest/getting_started",
        "https://docs.killbill.io/latest/quick_start_with_kb_api"
      ],
      "checkedOn": "2026-11-06"
    },
    "url": "apps/killbill--killbill.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/killbill--killbill.json"
  }
}
