npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

allerhande-client

v1.0.1

Published

Typed TypeScript/JavaScript API client for Albert Heijn Allerhande recipes

Readme

allerhande-client

Unofficial typed TypeScript/JavaScript client for the Albert Heijn Allerhande recipe API.

Warning: This package wraps an undocumented, unofficial API. Albert Heijn may change or remove endpoints without notice.

Installation

npm install allerhande-client

Usage

import { AllerhandeClient } from "allerhande-client";

const client = new AllerhandeClient();

Authentication is handled automatically. An anonymous bearer token is fetched on the first request and refreshed transparently.

Search recipes

const { page, result } = await client.searchRecipes("pasta carbonara");

console.log(page.total);        // total number of matches
console.log(page.hasNextPage);  // whether more pages exist
console.log(result[0].title);
console.log(result[0].slug);
console.log(result[0].tags);    // [{ key: "keuken", value: "italiaans" }, ...]
console.log(result[0].nutrition?.energy); // { value: 275, unit: "kcal" }

Get a full recipe

const recipe = await client.getRecipe(1202199);

console.log(recipe.description);
console.log(recipe.cookTime);            // minutes
console.log(recipe.preparation.steps);  // string[]
console.log(recipe.ingredients);        // [{ id, quantity }, ...]
console.log(recipe.tips);               // [{ type, value }, ...]

Pagination

const page1 = await client.searchRecipes("soep", { size: 20, start: 0 });
const page2 = await client.searchRecipes("soep", { size: 20, start: 20 });

Valid size values: 5, 10, 12, 20, 24, 25, 50, 100.

Sorting

const newest = await client.searchRecipes("cake", { sortBy: "NEWEST" });
const popular = await client.searchRecipes("cake", { sortBy: "POPULAR" });

Filtering by tag

const { result } = await client.searchRecipes("pasta", {
  filters: [
    { group: "menugang",     values: ["hoofdgerecht"] },
    { group: "keuken",       values: ["italiaans"]    },
  ],
});

Common filter groups: menugang, keuken, soort-gerecht, tags.

Filter by required ingredients

const { result } = await client.searchRecipes("pasta", {
  ingredients: ["ei", "pancetta"],
});

API reference

new AllerhandeClient()

Creates a client instance. Each instance manages its own token lifecycle.

client.searchRecipes(query, options?)

| Option | Type | Description | |---|---|---| | size | number | Results per page (5 / 10 / 12 / 20 / 24 / 25 / 50 / 100) | | start | number | Zero-based offset | | sortBy | "NEWEST" \| "POPULAR" | Sort order | | filters | RecipeSearchFilter[] | Tag-based filters | | ingredients | string[] | Required ingredient names |

Returns Promise<RecipeSearchResult>.

client.getRecipe(id)

Fetches a full recipe by its numeric ID. Returns Promise<Recipe>.

Notes

Ingredient names

recipe.ingredients only contains { id, quantity }. The ingredient names and units are not part of the recipe endpoint — they are stored separately in Albert Heijn's product catalog.

Nutritional data

nutrition is only present on RecipeSummary (search results). The full Recipe returned by getRecipe does not include nutrition fields.

Recipe URL

Allerhande recipe URLs follow the pattern:

https://www.ah.nl/allerhande/recept/R-R{id}/{slug}