# Bot Butcher > AI-powered contact form spam detection. Send a contact form message to a single HTTPS endpoint > and receive a JSON verdict — `spam: true` or `spam: false` — produced by a fine-tuned large > language model that judges the message in the context of the website it was posted on. Bot Butcher is operated by Hillside Lab Inc (Pasadena, CA). The API has two operations, one static API key header, usage-based pricing, and no SDKs. This file was generated by API Evangelist from the provider's public documentation on 2026-09-04; Bot Butcher does not publish an llms.txt of its own (https://botbutcher.com/llms.txt returns 404). ## API - Base URL: https://api.botbutcher.com - Authentication: `x-api-key: YOUR-API-KEY` header on every request. Each contact form has its own key. - Content type: application/json - Get a key: https://botbutcher.com/get-started ### Classify a message — POST / Body: `message` (required, string), `domain` (optional, string — the root domain of the contact form; supplying it raises accuracy, omitting it lowers accuracy by about 6%), `metadata` (optional, object — stored with the request). Response: `spam` (boolean), `message_id` (string), `status_code` (integer). If the supplied domain does not parse, a `notes` array is returned alongside the verdict and classification still happens with reduced accuracy. ### Retrieve a message — GET /message/{message_id} Response: `status_code`, `timestamp` (ISO 8601), `message`, `spam`, `domain`, `metadata`. ### Errors - 400 Malformed request — missing payload value, missing required header, missing or unknown message_id. - 401 Unauthorized — authentication failed. No 429 and no rate-limit headers are documented. ## What an agent should know before calling this API - Every classify call is billable and is NOT idempotent. There is no idempotency key, so a retry is a second classification, a second stored message and a second charge. - There is no reversal. No documented operation deletes or voids a stored message, and no retention window is published. Erasure is a human request to botbutcher@hillsidelab.com. - There is no sandbox, test key or dry-run mode. Every call hits production. - No rate limits are published, so back off on latency and errors rather than on a header. - Storage and model-training opt-outs are free but are account settings in the dashboard, not request parameters — the API reference documents no field or header that sets them per call. ## Docs - Documentation and API reference: https://botbutcher.com/documentation - Get started / sign up: https://botbutcher.com/get-started - Pricing: https://botbutcher.com/pricing - Login: https://botbutcher.com/login - No-code integration beta: https://botbutcher.com/no-code - Terms and conditions: https://botbutcher.com/terms - Privacy policy: https://botbutcher.com/privacy - Public Postman collection: https://god.postman.co/run-collection/24192121-47f4e172-5026-4788-b752-cbbc5488a03e ## Pricing Single usage-based plan. 0-10 requests/month: free. 11-100: $1.99/month flat fee, $0.00 per request. 101-1000: $1.99/month plus $0.02 per request. 1001+: $1.99/month plus $0.01 per request. Unlimited forms and email support included. Source: https://botbutcher.com/pricing ## API Evangelist artifacts - OpenAPI 3.2: openapi/bot-butcher-classification-api-openapi.yml - Authentication: authentication/bot-butcher-authentication.yml - Conventions (idempotency, reversibility): conventions/bot-butcher-conventions.yml - Error catalog: errors/bot-butcher-problem-types.yml - Lifecycle: lifecycle/bot-butcher-lifecycle.yml - Plans and pricing: plans/bot-butcher-plans-pricing.yml - Rate limits: rate-limits/bot-butcher-rate-limits.yml - Data model: data-model/bot-butcher-data-model.yml - Conformance: conformance/bot-butcher-conformance.yml - Agent skills: skills/_index.yml