---
title: "Search recipes, cookbooks, chefs, and authorized private shopping-list items"
method: GET
path: "/api/v1/search"
tags: ["Search"]
---

# Search recipes, cookbooks, chefs, and authorized private shopping-list items

`GET /api/v1/search`

## Request

- Base URL: `https://spoonjoy.app`
- URL: `https://spoonjoy.app/api/v1/search`
- Auth: one of:
  - none
  - HTTP bearer
  - API key in cookie `__session`
  - OAuth 2 (authorization code, authorization URL `https://spoonjoy.app/oauth/authorize`, token URL `https://spoonjoy.app/oauth/token`, scopes: `shopping_list:read`)
  - OAuth 2 (authorization code, authorization URL `https://spoonjoy.app/oauth/authorize`, token URL `https://spoonjoy.app/oauth/token`, scopes: `kitchen:read`)

## Query parameters

- `query` string
- `q` string
- `scope` 'all' | 'recipes' | 'cookbooks' | 'chefs' | 'shopping-list'
- `limit` integer

## Headers

- `X-Request-Id` string

## Response `200`

Success

- SearchEnvelope
  - `ok` unknown, required
  - `requestId` string, required
  - `data` SearchData, required
    - `query` string, required
    - `scope` 'all' | 'recipes' | 'cookbooks' | 'chefs' | 'shopping-list', required
    - `limit` integer, required
    - `isAuthenticated` boolean, required
    - `results` SearchResult[], required
      - `type` 'recipe' | 'cookbook' | 'chef' | 'shopping-list-item', required
      - `id` string, required
      - `ownerId` string, required
      - `ownerUsername` string, required
      - `title` string, required
      - `subtitle` string, required
      - `snippet` string, required
      - `href` string, required
      - `canonicalUrl` string, uri, required
      - `imageUrl` string, uri, nullable, required
      - `score` number, required: Lower values are better for full-text ranked queries. Pantry queries (comma-separated alternatives) are ordered by how many alternatives each result matches first, then by this score. Empty-query recency results use 0.
      - `metadata` object, required: Type-specific display metadata. Render values as data, not HTML.

## Other responses

- `400`: Errors: validation_error
- `401`: Errors: authentication_required, invalid_token
- `403`: Errors: insufficient_scope
- `405`: Errors: method_not_allowed
- `429`: Errors: rate_limited
- `500`: Errors: internal_error
- `503`: Errors: temporarily_unavailable

---

[API](https://skmtc.dev/spoonjoy/apis/spoonjoy-api.md) · [All operations](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/revisions/b96eb5d4697d?raw)
