API Reference
Integrate GrootMade with your applications
API Reference
Programmatically access GrootMade features through our REST API.
API Access
API access requires Pro plan or higher. Find your API key at Dashboard → Settings → API Keys.
Authentication
All API requests require authentication via Bearer token:
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.grootmade.com/v1/productsBase URL
https://api.grootmade.com/v1Rate Limits
| Plan | Requests/Hour |
|---|---|
| Pro | 1,000 |
| Agency | 10,000 |
| Enterprise | Unlimited |
Rate limit headers are included in responses:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1609459200Endpoints
Products
List Products
GET /productsParameters:
| Parameter | Type | Description |
|---|---|---|
type | string | theme or plugin |
category | string | Category slug |
search | string | Search query |
page | integer | Page number (default: 1) |
per_page | integer | Results per page (max: 100) |
Response:
{
"data": [
{
"id": "prod_abc123",
"name": "Premium Theme",
"slug": "premium-theme",
"type": "theme",
"version": "2.5.0",
"updated_at": "2026-01-10T12:00:00Z",
"download_url": "https://..."
}
],
"meta": {
"current_page": 1,
"total_pages": 50,
"total_count": 5000
}
}Get Product
GET /products/{id}Response:
{
"id": "prod_abc123",
"name": "Premium Theme",
"slug": "premium-theme",
"type": "theme",
"version": "2.5.0",
"description": "A premium theme for...",
"categories": ["business", "corporate"],
"compatibility": {
"wordpress": "6.0+",
"php": "7.4+"
},
"changelog": [...],
"download_url": "https://..."
}Download Product
POST /products/{id}/downloadResponse:
{
"download_url": "https://cdn.grootmade.com/...",
"expires_at": "2026-01-13T13:00:00Z",
"file_size": 2048576
}Collections
List Collections
GET /collectionsGet Collection
GET /collections/{id}Download Collection
POST /collections/{id}/downloadSites
List Connected Sites
GET /sitesAdd Site
POST /sitesBody:
{
"url": "https://example.com",
"name": "My Site"
}Remove Site
DELETE /sites/{id}Install Product to Site
POST /sites/{site_id}/installBody:
{
"product_id": "prod_abc123",
"activate": true
}Updates
Check for Updates
POST /updates/checkBody:
{
"products": [
{"slug": "theme-name", "version": "1.0.0"},
{"slug": "plugin-name", "version": "2.0.0"}
]
}Response:
{
"updates": [
{
"slug": "plugin-name",
"current_version": "2.0.0",
"new_version": "2.1.0",
"download_url": "https://..."
}
]
}AI Suggestions
Get Suggestions
POST /suggestBody:
{
"site_url": "https://example.com",
"goal": "ecommerce"
}Response:
{
"suggestions": [
{
"product_id": "prod_xyz",
"name": "WooCommerce Extension",
"match_score": 95,
"reason": "Essential for e-commerce sites"
}
]
}Webhooks
Receive real-time notifications for events.
Configure Webhooks
Go to Dashboard → Settings → Webhooks to add endpoints.
Events
| Event | Description |
|---|---|
product.updated | Product has a new version |
download.completed | Download finished |
site.connected | New site connected |
subscription.changed | Plan changed |
Payload
{
"event": "product.updated",
"timestamp": "2026-01-13T12:00:00Z",
"data": {
"product_id": "prod_abc123",
"old_version": "1.0.0",
"new_version": "1.1.0"
}
}Verification
Verify webhook signatures:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return signature === `sha256=${expected}`;
}SDKs
JavaScript/Node.js
npm install @grootmade/sdkimport { GrootMade } from '@grootmade/sdk';
const client = new GrootMade('YOUR_API_KEY');
const products = await client.products.list({ type: 'plugin' });PHP
composer require grootmade/sdkuse GrootMade\Client;
$client = new Client('YOUR_API_KEY');
$products = $client->products()->list(['type' => 'plugin']);Error Handling
Errors return appropriate HTTP status codes:
| Code | Description |
|---|---|
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Rate Limited |
| 500 | Server Error |
Error response format:
{
"error": {
"code": "invalid_api_key",
"message": "The API key provided is invalid."
}
}