Figgro ERP API · v1

Developer Documentation

Programmatic read access to Figgro's inventory and manufacturing data. Integrate product stock levels, raw material inventory, and production run data directly into your systems and agents.

🔑API key authentication
📦5 endpoints
🌐developer.figgro.com
📄OpenAPI 3.0

Introduction


The Figgro API provides 3rd-party developers and AI agents with read access to inventory and manufacturing data from the Figgro ERP platform. All endpoints are read-only (GET) and return paginated JSON responses.

5
Available endpoints
v1
Current API version
GET
Read-only — no writes
1k
Requests / hour

Base URL

https://developer.figgro.com

All endpoints are prefixed with /api/v1/. The base URL and versioning path will not change while on v1.

OpenAPI spec

The machine-readable spec is available at:

https://developer.figgro.com/swagger/v1/swagger.json

Quick start


1
Get your API key

Contact integrations@figgro.com to request an API key. Keys are prefixed with fgr_ and expire every 12 months.

2
Add the key to your request header

Pass the key in the X-Api-Key header on every request.

3
Make your first call
bash
curl -X GET \
  'https://developer.figgro.com/api/v1/Inventory/getproducts?page=1' \
  -H 'accept: application/json' \
  -H 'X-Api-Key: fgr_your_key_here'
200 OKResponse
{
  "page": 1,
  "page_size": 25,
  "total_records": 142,
  "total_pages": 6,
  "data": [ /* array of product objects */ ]
}

Authentication


All requests must include a valid API key in the X-Api-Key request header. Requests without a key, or with an invalid key, return 401 Unauthorized.

Required header on every request
X-Api-Key: fgr_your_key_here
PropertyValue
Header nameX-Api-Key
Key prefixfgr_
Key expiry12 months from issue date
Request new keyintegrations@figgro.com
Keep your key private. Never include your API key in client-side code, public repositories, or URLs. If a key is compromised, contact integrations@figgro.com immediately for rotation.

Pagination


All list endpoints return paginated results using a consistent envelope. Use the page query parameter to navigate through results. Pages are 1-based.

FieldTypeDescription
pageintegerCurrent page number (1-based)
page_sizeintegerNumber of records in this page
total_recordsintegerTotal matching records across all pages
total_pagesintegerTotal number of pages available
dataarrayRecords for this page

Iterating all pages

javascript — fetch all pages
async function getAllProducts() {
  const all = [];
  let page = 1, totalPages = 1;

  while (page <= totalPages) {
    const res = await fetch(
      `https://developer.figgro.com/api/v1/Inventory/getproducts?page=${page}`,
      { headers: { 'X-Api-Key': API_KEY } }
    ).then(r => r.json());

    all.push(...res.data);
    totalPages = res.total_pages;
    page++;
  }
  return all;
}

Endpoints


Parameters

NameInTypeRequiredDescription
pagequeryintegeroptionalPage number, 1-based. Defaults to 1.

Example request

curl
curl -X GET \
  'https://developer.figgro.com/api/v1/Inventory/getproducts?page=1' \
  -H 'X-Api-Key: fgr_your_key_here'

Response schema — data[]

ProductItem · object
iduuidUnique product identifier
productNamestringDisplay name of the product
skustringStock-keeping unit — unique alphanumeric code
productTypestringCategory (e.g. Tincture, Capsule, Topical)
classificationstringRegulatory or product classification
brandstringnullableBrand name
strainstringnullableCannabis or hemp strain
unitOfMeasurementstringUnit stock quantities are tracked in (e.g. ml, g, units)
pricedoubleSelling price per unit
costPricedoubleCost to produce or acquire per unit
stockOnHanddoubleTotal quantity in inventory
reservedQuantitydoubleQuantity reserved against open sales orders
availableQuantitydoubleAvailable to promise (stockOnHand − reservedQuantity)
minimumStockLeveldoubleReorder threshold — alerts fire below this
isActivebooleanWhether the product is active and available for sale
isArchivedbooleanWhether the product is archived
trackInventorybooleanWhether inventory is tracked for this product
createdAtdate-timeISO 8601 UTC creation timestamp
updatedAtdate-timeISO 8601 UTC last-updated timestamp

Errors


All errors return a consistent JSON body with a machine-readable code and a human-readable message.

error response
{
  "code": "UNAUTHORIZED",
  "message": "Invalid or missing X-Api-Key header."
}
StatusCodeCauseResolution
400BAD_REQUESTMalformed query parameters or invalid date formatCheck parameter names, types, and ISO 8601 formatting
401UNAUTHORIZEDMissing, invalid, or expired API keyVerify X-Api-Key header; request a new key if expired
403FORBIDDENKey does not have access to the requested resourceContact integrations@figgro.com to expand scope
404NOT_FOUNDEndpoint does not exist or resource not foundVerify the URL and that the resource ID is correct
429RATE_LIMITEDExceeded 1,000 requests / hourBack off and retry after the Retry-After interval
500INTERNAL_ERRORUnexpected server errorRetry with exponential backoff; report if persistent
503UNAVAILABLEService temporarily unavailable for maintenanceRetry after a short delay

Rate limits


API keys are limited to 1,000 requests per hour per key. Limits are enforced on a rolling 60-minute window. Responses include rate-limit headers so you can pace your traffic.

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp (UTC) when the window resets
Retry-AfterSeconds to wait before retrying (only on 429 responses)
Need a higher quota? Email integrations@figgro.com with your use case and we'll get back to you within 2 business days.

Changelog


v1.22026-04-15
  • Added lotNumber and expiryDate to /getrawmaterials
  • Added labTestPassed and metrcSynced to job run tickets
v1.12026-02-02
  • Added /getproductjobruntickets endpoint
  • startDate / endDate filters available on all job endpoints
v1.02026-01-10
  • Public launch — inventory and manufacturing read endpoints