---
title: RecipeBee developer resources
description: Public REST API, OpenAPI, MCP, and agent instructions for RecipeBee.
canonical: https://recipebee.app/developers
last-updated: 2026-10-22
---

# RecipeBee developer resources

RecipeBee exposes a public REST API, NLWeb v0.55 recipe search, a product MCP server, and a read-only documentation MCP server. Agents can search public recipes and, with user consent, save private recipes and meal plans.

HTML page: [https://recipebee.app/developers](https://recipebee.app/developers)

## Discovery

- [Public API catalog](https://recipebee.app/api)
- [OpenAPI JSON](https://recipebee.app/openapi.json)
- [OpenAPI YAML](https://recipebee.app/api/openapi.yaml)
- [Markdown API reference](https://recipebee.app/api.md)
- [Markdown OpenAPI YAML](https://recipebee.app/api/openapi.yaml.md)
- [MCP server](https://recipebee.app/mcp)
- [Read-only documentation MCP server](https://recipebee.app/docs-mcp)
- [NLWeb recipe search](https://recipebee.app/ask?query=vegan%20recipes)
- [MCP server card](https://recipebee.app/.well-known/mcp/server-card.json)
- [Documentation MCP server card](https://recipebee.app/.well-known/mcp/docs-server-card.json)
- [Official MCP Registry listing](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.praisondani%2Frecipebee/versions/latest)
- [llms.txt](https://recipebee.app/llms.txt)
- [AGENTS.md](https://recipebee.app/AGENTS.md)
- [SKILL.md](https://recipebee.app/SKILL.md)
- [auth.md](https://recipebee.app/auth.md)
- [RFC 9727 API catalog](https://recipebee.app/.well-known/api-catalog)
- [Public plugin repo](https://github.com/praisondani/recipebee-cursor-plugin)
- Install the agent skill: `npx skills add praisondani/recipebee-cursor-plugin`

## Authentication

Public GET endpoints do not require an API key:

```
curl "https://recipebee.app/api/v1/public/recipes?q=pasta&per_page=5"
```

## Natural-language recipe search (NLWeb)

RecipeBee supports NLWeb v0.55 list-mode search over public recipes. GET and POST requests return Recipe JSON-LD results; set `Accept: text/event-stream` or `prefer.streaming: true` to receive `start`, `result`, and `complete` events.

```sh
curl -X POST "https://recipebee.app/ask" \
  -H "Content-Type: application/json" \
  -d '{"query":{"text":"vegan recipes for dinner"},"prefer":{"mode":"list","streaming":false}}'
```

Queries are limited to 160 characters and results to 10 public recipes. This endpoint returns matching recipe records; it does not generate or summarize recipes.

Private REST uses Laravel Sanctum. MCP write tools use OAuth. Preview tools on MCP are anonymous. See [auth.md](https://recipebee.app/auth.md).

Authenticated product writes (image jobs, MCP meal-plan prepare/commit, and similar) accept an `Idempotency-Key` header so retries do not create duplicates. Public read endpoints do not need that header.

## Image-generation batches

The authenticated REST API can create a review batch without using credits. Starting a batch requires an explicit `confirm: true`, an eligible paid plan, and available credits. A successful start returns `202 Accepted` with a `Location` header that points to the batch status endpoint. Poll that URL for progress. These routes require a Laravel Sanctum bearer token; MCP clients should use the MCP tools and keep image generation confirmation inside RecipeBee.

## Versioning and deprecation

Read the [API versioning and deprecation policy](https://recipebee.app/deprecation.md).

The public API is versioned in the URL path as `/api/v1`. RecipeBee will not remove a version without announcing it. When a version is deprecated, responses include HTTP `Deprecation` and `Sunset` headers and we keep the old version available for at least 12 months. Current policy: v1 is the supported public surface.

## Rate limits

API responses include IETF `RateLimit`, `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` headers, plus legacy `X-RateLimit-*` headers. A 429 includes `Retry-After`.

## Pagination

List endpoints support cursor pagination. Pass `per_page` and follow `data.meta.next_cursor` / `data.links.next`. Page-based `page` remains available for existing clients. Prefer `cursor`.
