---
name: joinery
description: Work with Joinery WordPress plugins - look up plugins, plans and prices, manage pricing rules on a WooCommerce store through its REST API, preview prices for headless stores, and extend Joinery Core with custom rule types.
public: true
---

# Joinery

Joinery sells WordPress plugins on yearly licences: Dynamic Pricing & Discounts, B2B & Wholesale, Gift Cards & Store Credit, and Product Options. They need WooCommerce and all build on the free Joinery Core, so they share one rules engine and one pricing pipeline.

There are two APIs. Pick the one that matches the task.

## 1. The Joinery API (joinerywp.com)

Public, no authentication. OpenAPI 3.1: https://www.joinerywp.com/openapi.json

- `GET https://www.joinerywp.com/api/v1/catalog`: every plugin and bundle with yearly prices in EUR, USD and GBP (before tax) and a checkout link per plan. Use this to answer "what does it cost" or "which plan covers N sites".
- `GET https://www.joinerywp.com/api/checkout?plan=<key>&currency=<eur|usd|gbp>`: send a person here in a browser to buy a plan. Don't call it from code.
- `POST /api/v1/licences/activate`, `/api/v1/licences/deactivate`, `/api/v1/updates`: used by the plugins from a WordPress site with a licence key. Staging, development and local sites are free.

Errors are JSON: `{ "error": "<what happened and what to do next>", "code": "<stable code>" }`, for example `site_limit_reached` or `licence_expired`. Responses carry `RateLimit-Policy` and `RateLimit` headers; on `429`, wait for `Retry-After` seconds.

## 2. The store's REST API (each WooCommerce site)

Base URL: `https://<store>/wp-json/joinery/v1`. Reference: https://docs.joinerywp.com (API reference).

- `GET /price-preview?product_id=<id>&quantities=1,12,60`: what a product costs at each quantity for the current customer, after every rule. No authentication; use it on product pages of headless stores.
- `GET /rules`, `POST /rules`, `PUT /rules/{id}`, `DELETE /rules/{id}`: manage pricing rules. Needs a user with `manage_woocommerce`, authenticated with a WordPress application password (HTTP Basic) or the cookie nonce.
- `GET /schema`: the rule types (conditions and actions) the store has, with their fields. Read this before creating a rule, so you only use types and fields that exist.

Prices and discounts are applied on the server, so the WooCommerce Store API cart already shows the right totals. Store API products include `extensions.joinery.quantity_breaks`.

## Extending Joinery Core

Register custom rule types from a plugin on the `joinery_core_init` action with `joinery_register_condition()` and `joinery_register_action()`. Conditions and actions are plain PHP classes, so they can be unit-tested without WordPress. See https://docs.joinerywp.com/developers/extending.

## Good to know

- Licences renew yearly at the same price; plugins keep working without renewal, but updates and support stop.
- Full refund within 30 days for any reason.
- Site map for agents: https://www.joinerywp.com/llms.txt. Every page on joinerywp.com is also available as Markdown (add `.md`).
