Skip to content

API documentation

Use Chomp Shopper's public REST API to read your recipes, make shopping lists and send them to Instacart.

Getting started

Everything you need to start using the Chomp Shopper API

Base URL

https://chompshopper.com/api/v1

Authentication

All API requests require authentication using an API key. Include your key in theX-API-Key header:

curl -H "X-API-Key: cs_live_your_key_here" \
  https://chompshopper.com/api/v1/me

Rate limiting

Free
100 requests/hour
Premium
1,000 requests/hour

Limits apply per API key.

Response format

All responses are returned in JSON format. Successful responses include the requested data, while errors include an error field.

// Success response
{
  "id": "abc123",
  "title": "Recipe Name",
  ...
}

// Error response
{
  "error": "Rate limit exceeded. Try again later."
}
GET
/api/v1/me
Get your account information and rate limit status

Example:

curl -H "X-API-Key: cs_live_xxx" https://chompshopper.com/api/v1/me

Response:

{
  "id": 123,
  "email": "user@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "tier": "free",
  "isPremium": false,
  "rateLimit": 100,
  "requestsThisHour": 5
}
GET
/api/v1/recipes/favorites
List your favorite recipes with pagination

Query Parameters:

limit (max 100), offset

Example:

curl -H "X-API-Key: cs_live_xxx" "https://chompshopper.com/api/v1/recipes/favorites?limit=10&offset=0"

Response:

{
  "recipes": [
    {
      "id": "abc123",
      "title": "Chicken Parmesan",
      "url": "https://example.com/recipe",
      "source": "example.com",
      "servings": 4,
      "cookTime": "45 minutes",
      "ingredients": ["1 lb chicken breast", "1 cup breadcrumbs"],
      "createdAt": "2024-01-15T10:30:00Z"
    }
  ],
  "pagination": {
    "total": 25,
    "limit": 10,
    "offset": 0,
    "hasMore": true
  }
}
GET
/api/v1/recipes/:id
Get a single recipe by ID

Example:

curl -H "X-API-Key: cs_live_xxx" https://chompshopper.com/api/v1/recipes/abc123

Response:

{
  "id": "abc123",
  "title": "Chicken Parmesan",
  "url": "https://example.com/recipe",
  "source": "example.com",
  "servings": 4,
  "cookTime": "45 minutes",
  "ingredients": ["1 lb chicken breast", "1 cup breadcrumbs"],
  "createdAt": "2024-01-15T10:30:00Z"
}
PUT
/api/v1/recipes/:id
Update a recipe (title, servings, cookTime, ingredients)

Example:

curl -X PUT -H "X-API-Key: cs_live_xxx" -H "Content-Type: application/json" \
  -d '{"title": "Updated Title", "servings": 6}' \
  https://chompshopper.com/api/v1/recipes/abc123

Response:

{
  "id": "abc123",
  "title": "Updated Title",
  "servings": 6,
  "message": "Recipe updated successfully"
}
GET
/api/v1/shopping-lists
List your shopping lists with pagination

Query Parameters:

limit (max 50), offset

Example:

curl -H "X-API-Key: cs_live_xxx" "https://chompshopper.com/api/v1/shopping-lists?limit=20"

Response:

{
  "lists": [
    {
      "id": "list123",
      "name": "Weekly Groceries",
      "recipeIds": ["abc123", "def456"],
      "ingredients": {
        "Produce": [{"id": "ing1", "name": "Tomatoes", "amount": "4", "category": "Produce"}]
      },
      "source": "web",
      "createdAt": "2024-01-15T10:30:00Z"
    }
  ],
  "pagination": {
    "total": 15,
    "limit": 20,
    "offset": 0,
    "hasMore": false
  }
}
GET
/api/v1/shopping-lists/:id
Get a single shopping list by ID

Example:

curl -H "X-API-Key: cs_live_xxx" https://chompshopper.com/api/v1/shopping-lists/list123

Response:

{
  "id": "list123",
  "name": "Weekly Groceries",
  "recipeIds": ["abc123"],
  "ingredients": {...},
  "source": "web",
  "createdAt": "2024-01-15T10:30:00Z"
}
POST
/api/v1/shopping-lists/generate
Create a shopping list from recipe IDs

Request Body:

{ "recipeIds": ["abc123", "def456"], "name": "My List" }

Example:

curl -X POST -H "X-API-Key: cs_live_xxx" -H "Content-Type: application/json" \
  -d '{"recipeIds": ["abc123", "def456"], "name": "Weekend Cooking"}' \
  https://chompshopper.com/api/v1/shopping-lists/generate

Response:

{
  "id": "newlist789",
  "name": "Weekend Cooking",
  "recipeIds": ["abc123", "def456"],
  "ingredients": {...},
  "createdAt": "2024-01-15T10:30:00Z"
}
POST
/api/v1/instacart/push
Push a shopping list to Instacart (async job)

Request Body:

{ "shoppingListId": "list123", "postalCode": "10001" }

Example:

curl -X POST -H "X-API-Key: cs_live_xxx" -H "Content-Type: application/json" \
  -d '{"shoppingListId": "list123", "postalCode": "10001"}' \
  https://chompshopper.com/api/v1/instacart/push

Response:

{
  "jobId": "job_abc123",
  "status": "pending",
  "message": "Instacart push job created. Poll /api/v1/instacart/jobs/:jobId for status.",
  "statusUrl": "/api/v1/instacart/jobs/job_abc123"
}
GET
/api/v1/instacart/jobs/:jobId
Check status of an Instacart push job

Example:

curl -H "X-API-Key: cs_live_xxx" https://chompshopper.com/api/v1/instacart/jobs/job_abc123

Response:

{
  "id": "job_abc123",
  "status": "completed",
  "jobType": "instacart_push",
  "createdAt": "2024-01-15T10:30:00Z",
  "completedAt": "2024-01-15T10:30:05Z",
  "result": {
    "instacartUrl": "https://instacart.com/store/checkout/...",
    "itemCount": 12
  }
}

Sign in to manage API keys

Create an account or sign in to generate and manage your API keys

Sign In

JavaScript / Node.js

const API_KEY = 'cs_live_your_key_here';
const BASE_URL = 'https://chompshopper.com/api/v1';

// Fetch favorite recipes
async function getFavorites() {
  const response = await fetch(`${BASE_URL}/recipes/favorites`, {
    headers: {
      'X-API-Key': API_KEY
    }
  });
  return response.json();
}

// Generate a shopping list from recipes
async function createShoppingList(recipeIds, name) {
  const response = await fetch(`${BASE_URL}/shopping-lists/generate`, {
    method: 'POST',
    headers: {
      'X-API-Key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ recipeIds, name })
  });
  return response.json();
}

// Push to Instacart and wait for result
async function pushToInstacart(shoppingListId, postalCode) {
  // Start the job
  const jobResponse = await fetch(`${BASE_URL}/instacart/push`, {
    method: 'POST',
    headers: {
      'X-API-Key': API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ shoppingListId, postalCode })
  });
  const { jobId } = await jobResponse.json();
  
  // Poll for completion
  while (true) {
    const statusResponse = await fetch(`${BASE_URL}/instacart/jobs/${jobId}`, {
      headers: { 'X-API-Key': API_KEY }
    });
    const job = await statusResponse.json();
    
    if (job.status === 'completed') {
      return job.result;
    } else if (job.status === 'failed') {
      throw new Error(job.error);
    }
    
    // Wait before polling again
    await new Promise(resolve => setTimeout(resolve, 1000));
  }
}

Python

import requests
import time

API_KEY = 'cs_live_your_key_here'
BASE_URL = 'https://chompshopper.com/api/v1'
HEADERS = {'X-API-Key': API_KEY}

def get_favorites():
    response = requests.get(f'{BASE_URL}/recipes/favorites', headers=HEADERS)
    return response.json()

def create_shopping_list(recipe_ids, name):
    response = requests.post(
        f'{BASE_URL}/shopping-lists/generate',
        headers={**HEADERS, 'Content-Type': 'application/json'},
        json={'recipeIds': recipe_ids, 'name': name}
    )
    return response.json()

def push_to_instacart(shopping_list_id, postal_code):
    # Start the job
    response = requests.post(
        f'{BASE_URL}/instacart/push',
        headers={**HEADERS, 'Content-Type': 'application/json'},
        json={'shoppingListId': shopping_list_id, 'postalCode': postal_code}
    )
    job_id = response.json()['jobId']
    
    # Poll for completion
    while True:
        status_response = requests.get(
            f'{BASE_URL}/instacart/jobs/{job_id}',
            headers=HEADERS
        )
        job = status_response.json()
        
        if job['status'] == 'completed':
            return job['result']
        elif job['status'] == 'failed':
            raise Exception(job['error'])
        
        time.sleep(1)

# Example usage
favorites = get_favorites()
print(f"Found {len(favorites['recipes'])} favorite recipes")

recipe_ids = [r['id'] for r in favorites['recipes'][:3]]
shopping_list = create_shopping_list(recipe_ids, "Weekend Cooking")
print(f"Created shopping list: {shopping_list['name']}")

cURL

# Get your account info
curl -H "X-API-Key: cs_live_xxx" https://chompshopper.com/api/v1/me

# List favorite recipes
curl -H "X-API-Key: cs_live_xxx" \
  "https://chompshopper.com/api/v1/recipes/favorites?limit=10"

# Create a shopping list
curl -X POST \
  -H "X-API-Key: cs_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"recipeIds": ["abc123", "def456"], "name": "My List"}' \
  https://chompshopper.com/api/v1/shopping-lists/generate

# Push to Instacart
curl -X POST \
  -H "X-API-Key: cs_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"shoppingListId": "list123", "postalCode": "10001"}' \
  https://chompshopper.com/api/v1/instacart/push

# Check job status
curl -H "X-API-Key: cs_live_xxx" \
  https://chompshopper.com/api/v1/instacart/jobs/job_abc123