Overview
The GrowFlow Partner API lets your own software, or a partner you work with, read your GrowFlow Wholesale data and make certain changes for you. It is a GraphQL API. Common uses are feeding inventory and orders into a reporting tool or ERP, creating orders from your own ordering system, and recording production from another system.
This article lists everything the API can do today. It is updated each time something new is released.
See: Wholesale: Connect an AI Assistant to GrowFlow with MCP if you want to use an AI assistant such as Claude or ChatGPT instead. It needs no API key.
Before You Start
You need an API key. An Org Admin creates one on the API Keys tab of Org Settings.
Pick the right access. A Read-only key can use everything under What You Can Read. A Read and write key can also use everything under What You Can Change.
Give your developer the API Developer Guide. It is on the API Keys tab and is filled in with your own endpoint, organization key and license numbers, with requests that can be copied and run.
See: Wholesale: Org Settings for how to create, rotate and revoke API keys.
See Every Field
The API describes itself, and that description is always current. Open partnerapi.growflow.com in a browser. In the Documentation panel, click Query or Mutation, then click any item to see what it takes and what it returns. Reading the documentation there needs no key.
What You Can Read
Every query can return data for one license, or for every license your key can reach.
Query | What it returns |
inventories | Inventory lots, with product, room, status, quantities and lab results |
products | Products, with strain, brand, category and pricing |
productBrands | Your product brands |
productCategories | The product categories a new product of a given type can use |
orders | Sales orders, with line items, payments, manifest and CCRS manifest status |
orderDocuments | Links to an order's invoice, pull sheet and manifest PDFs. In Washington, also the CCRS manifest PDF and the WCIA transfer link |
inboundTransfers | Incoming transfers |
plants, plantBatches | Plants and plant batches |
harvests | Harvests, with weights and stage |
strains, rooms, tables | Grow setup records |
qaResults | Lab test results and certificate links |
metrcPackageTags | Metrc accounts only. Your unused Metrc package tags, in the order GrowFlow will use them |
accounts | The licenses your key can reach |
traceabilityTypes | Product traceability types |
version | The API version |
What You Can Change
These need a Read and write key.
Mutation | What it does | Available to |
createOrder | Creates a sales order or a pre-order, like Create New Order and Create Pre-Order in GrowFlow | All accounts |
convertInventory | Uses up one or more lots and creates one new lot, like Convert Inventory in GrowFlow | Standalone and Metrc accounts |
splitInventory | Takes one or more new lots out of an existing lot, like SubLot in GrowFlow | Standalone accounts, except those linked to New Mexico's NMS2S |
createProduct | Creates a product or a product template, like one row of Create Products in GrowFlow | Standalone accounts |
allocateCosts | Sends cultivation costs into GrowFlow's cost of goods for the plants in a block | All accounts |
Create an Order
A request names the seller's license, the buyer's license number, the order type and the lines. Each line has a product, a quantity and the package it sells from. Price and discount are optional and default to the product's own.
Standard orders reserve each line's package, the same as an order made in GrowFlow.
Pre-orders are created in the New stage with no packages. Your team picks inventory later with Select Inventory.
The buyer must already be one of your customers in GrowFlow, and active.
Every line is checked first. If one line has a problem, the order is not created.
Note: Sending the same order twice creates two orders. If a request times out, check Sales Orders in GrowFlow before sending it again.
Convert Inventory
Each conversion names the lots to use up and how much to take from each, the product to create, and how much the new lot holds. The rules are the same as Convert Inventory in GrowFlow.
One request holds up to 25 conversions, or up to 5 on a Metrc account.
Every conversion in a request is checked before any of them run. They then run in order, and the first failure stops the rest.
On a Metrc account, the new lot uses your next available package tag unless the request names one.
Split Inventory
Each split names one lot, how many new lots to take out of it, and the quantity of each. The new lots can keep the lot's product and room, or go to another product of the same type or to another room.
One request holds up to 25 splits and 100 new lots.
Splits cannot take more than the lot has available, which is its remaining quantity less anything reserved on orders.
Every split is checked before any of them run. They then run in order, and the first failure stops the rest.
Create a Product
A request names the product, its traceability type, its unit and, where the type needs them, its category, size, strain and brand. The product is checked against every rule Create Products applies in GrowFlow, including the limit on the length of the product name reported to the state.
Look up the values first. Use traceabilityTypes, productCategories, productBrands and strains to find the ids a new product needs.
Product templates are created the same way, by marking the product as a template.
Tip! If you plan to package inventory into the new product with convertInventory, leave the category out so the product gets its type's default, or choose a category that converts into the type. With any other category, convertInventory may refuse to create lots of the product.
Request Keys and Results
Conversions, splits and new products each carry a request key, called idempotencyKey, that your software chooses. It makes a retry safe.
Same key, already done: nothing happens a second time. The result comes back as
REPLAYEDand shows what the first attempt created.Same key, different request: refused. A key belongs to the first request it was used for, so sending something different under it returns an error code ending in
IDEMPOTENCY_KEY_REUSED. Use a new key.Outcome unknown: an error code ending in
OUTCOME_UNKNOWNmeans an earlier attempt with that key did not finish, and the change may or may not have been made. Check the lot or product in GrowFlow first. Send it again with a new key only if the change was not made.Each result has a status:
SUCCEEDED,REPLAYED,FAILEDorNOT_RUN. A failed result carries an error code and a message that says what to fix.
Tip! Use an id from your own system as the request key, such as your batch number. A retry then reuses the same key without any extra work.
Get an Order's Documents
orderDocuments takes an order id and returns links your software can download or pass on.
Link | When it is available |
Invoice PDF | Always |
Pull sheet PDF | Always |
Manifest PDF | Once the order is manifested |
CCRS manifest PDF, Washington only | Once CCRS has generated it |
WCIA transfer link, Washington only | Once the order is manifested |
The PDF links stop working one hour after you ask for them, so ask again when you need them later. The WCIA transfer link stays valid for 90 days.
Limits
300 requests per minute for each key.
Up to 100 records per page. Ask for the next page until there are no more.
Requests stop after 60 seconds. Page large reads.
Each successful request counts as one API call toward your Platform plan. Requests to a training license do not count.
Training Licenses
Requests reach your live licenses unless they say otherwise. To work against a training license, your developer sets isTraining: true on the request.
A request that only touches a training license does not count toward your Platform plan, so you can try a new integration without using up your monthly API calls. Three requests always count, because they are not specific to one training license: accounts, traceabilityTypes and allocateCosts.
What's New
Date | Change |
November 2026 | Added createProduct, splitInventory, productBrands, productCategories, metrcPackageTags and orderDocuments. Added CCRS manifest status on orders. convertInventory now works on Metrc accounts. Requests to a training license no longer count toward your Platform plan. |
October 2026 | Added convertInventory, and pre-orders on createOrder. |
Questions
Email the GrowFlow API partner team at [email protected].
