Getting Started
The KSS API provides programmatic access to product catalog, inventory, customer, invoice, and pricing data. All requests are made over HTTPS and return JSON responses.
There are two environments, each backed by its own isolated database and requiring a separate API key.
All endpoints are versioned under /api/v1. A full request to the products endpoint looks like:
GET https://api.kssdata.com/api/{{version}}/products?States=CA&Statuses=1
x-api-key: your-api-key
Authentication
Every request must include your API key in the x-api-key request header. Requests without a valid key return 401 Unauthorized.
x-api-key: your-api-key
Employee — Full access to all endpoints and all data across any state or customer.
Customer — Access is scoped to the customer accounts associated with the key. Requests for data outside that scope are silently filtered or return 403.
Supplier — Access is scoped to the supplier accounts associated with the key. Some endpoints are unavailable to Supplier keys entirely, noted per endpoint below.
Rate Limiting
Rate limits are enforced per API key. Each key has a configurable maximum requests per hour. When the limit is reached, the API returns 429 Too Many Requests.
If you are building a sync process that requires high request volume, contact KSS to discuss your needs.
Pagination
All list endpoints support pagination via Page and PageSize query parameters. The default page size is 50. The maximum page size is 500.
Paginated responses wrap results in a Data array alongside Page and PageSize fields.
GET /api/{{version}}/products?States=CA&Page=2&PageSize=100
{
"Data": [ ... ],
"Page": 2,
"PageSize": 100
}
Errors
The API uses standard HTTP status codes. Error responses include a JSON body with an error field describing the issue.
{
"Error": "InvoiceIDs parameter is required"
}
Endpoints
Returns product allocations filtered by customer, supplier, and state.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"AllocationID": 1001,
"ProductID": 160,
"CustomerID": 1,
"Units": 24,
"AllocationTypeID": 0,
"StartDate": "2025-01-01",
"EndDate": "2025-03-31",
"TimeUpdated": "2025-01-15T10:00:00.000Z"
},
{
"AllocationID": 1002,
"ProductID": 161,
"CustomerID": 1,
"Units": 48,
"AllocationTypeID": 0,
"StartDate": "2025-01-01",
"EndDate": "2025-03-31",
"TimeUpdated": "2025-01-15T10:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns accounts receivable aging records for customers.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"CustomerID": 1,
"OpenCredit": "-31.050000",
"CurrentDue": "0.000000",
"Due_1_30": "34635.280000",
"Due_31_60": "0.000000",
"Due_61_90": "0.000000",
"Due_91": "0.000000",
"CloseDate": "2026-01-25T07:00:00.000Z",
"TotalBalanceOutstanding": "34604.230000",
"StatementLink": "https://example.com?Key=123456",
"CurrentInvoices": [],
"Invoices_1_30": [
{
"InvoiceID": 12345,
"InvoiceNum": "X-12345"
},
{
"InvoiceID": 12346,
"InvoiceNum": "X-12346"
},
{
"InvoiceID": 12347,
"InvoiceNum": "X-12347"
}
],
"Invoices_31_60": [],
"Invoices_61_90": [],
"Invoices_91": [],
"StatementDate": "2026-01-04T07:00:00.000Z",
"TimeUpdated": "2024-09-23T19:05:39.984Z",
"CreditInvoices": [
{
"InvoiceID": 52221,
"InvoiceNum": "X-52221"
},
{
"InvoiceID": 52222,
"InvoiceNum": "X-52222"
},
{
"InvoiceID": 52223,
"InvoiceNum": "X-52223"
}
]
}
],
"Page": 1,
"PageSize": 50
}
Returns per-customer product pricing including any applicable promotions and discounts for a given effective date.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | required |
Comma-separated list of customer IDs to fetch pricing for. Returns 403 if none are accessible.
|
|
EffectiveDate
query
|
date | optional |
ISO 8601 date string to evaluate promotion validity against. Defaults to the current date.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"ProductID": 160,
"CustomerID": 1,
"FullPrice": "18.00",
"UnitPrice": "15.50",
"Discount": "2.50",
"PromotionID": 42,
"StartDate": "2025-01-01",
"EndDate": "2025-03-31",
"TimeUpdated": "2025-01-10T08:00:00.000Z"
},
{
"ProductID": 161,
"CustomerID": 1,
"FullPrice": "18.00",
"UnitPrice": "18.00",
"Discount": "0.00",
"PromotionID": null,
"StartDate": null,
"EndDate": null,
"TimeUpdated": "2025-01-10T08:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns a list of customers filtered by state, customer ID, and account status.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
AccountStatuses
query
|
string[] | optional |
Comma-separated list of account statuses to filter by. Defaults to Active.
Active
Active
Inactive
Inactive
OutOfBus
Out of Business
|
|
OnHold
query
|
string | optional |
Filter by on hold status. Pass "true" to return only customers on hold, "false" to exclude them. When omitted, on hold status is not filtered.
true
On Hold
false
Not On Hold
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"CustomerID": 1,
"CustomerName": "Kettles Secret Stash",
"CustomerNameAlt": "Kettles",
"ChainName": "Kettles Chain",
"LicenseNum": "C10-0000001-LIC",
"Address": "123 Main St, Los Angeles, CA 90001",
"LocationID": 3,
"OnHold": false,
"SalesRepEmail": "jane.smith@example.com",
"SalesRepName": "Jane Smith",
"SalesRepPhone": "555-555-0100",
"SalesRepUserID": 9240,
"ProfilePictureURL": "https://cdn.e8.co/Kiva/S3UserAvatar/example.jpg",
"CollectionAgentFullName": null,
"CollectionAgentEmail": null,
"State": "CA",
"DeliveryDays": "1",
"NextDeliveryDates": "2026-01-05;2026-01-12;2026-01-19;2026-01-26",
"AccountStatus": "Active",
"DeliveryDates": [
"2026-01-05",
"2026-01-12",
"2026-01-19",
"2026-01-26"
],
"DeliveryMinimum": 500,
"TimeUpdated": "2025-01-15T10:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single customer by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
customerID
path
|
number | required |
The ID of the customer to retrieve.
|
{
"Data": [
{
"CustomerID": 1,
"CustomerName": "Kettles Secret Stash",
"CustomerNameAlt": "Kettles",
"ChainName": "Kettles Chain",
"LicenseNum": "C10-0000001-LIC",
"Address": "123 Main St, Los Angeles, CA 90001",
"LocationID": 3,
"OnHold": false,
"SalesRepEmail": "jane.smith@example.com",
"SalesRepName": "Jane Smith",
"SalesRepPhone": "555-555-0100",
"SalesRepUserID": 9240,
"ProfilePictureURL": "https://cdn.e8.co/Kiva/S3UserAvatar/example.jpg",
"CollectionAgentFullName": null,
"CollectionAgentEmail": null,
"State": "CA",
"DeliveryDays": "1",
"NextDeliveryDates": "2026-01-05;2026-01-12;2026-01-19;2026-01-26",
"AccountStatus": "Active",
"DeliveryDates": [
"2026-01-05",
"2026-01-12",
"2026-01-19",
"2026-01-26"
],
"DeliveryMinimum": 500,
"TimeUpdated": "2025-01-15T10:00:00.000Z"
}
]
}
Returns delivery day schedules for active customers.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"CustomerID": 1,
"DeliveryDays": "3",
"DeliveryDates": [
"2026-02-04",
"2026-02-11",
"2026-02-18",
"2026-02-25"
]
}
],
"Page": 1,
"PageSize": 50
}
Returns warehouse inventory records filtered by supplier, product, location, and state. AvailableUnits = OnFloorInventory - PreSales - Allocations
| Name | Type | Required | Description |
|---|---|---|---|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
ProductIDs
query
|
number[] | optional |
Comma-separated list of product IDs to filter by.
|
|
LocationIDs
query
|
number[] | optional |
Comma-separated list of location IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"LocationID": 1,
"ProductID": 5001,
"OnFloorInventory": "1239.00",
"PreSales": "110.00",
"Allocated": "0.00",
"NotAuthorized": false,
"AvailableUnits": 1129,
"PurchaseTransID": 7537244,
"DOI": "5.60",
"AvgDailySales90d": "201.49",
"TimeUpdated": "2026-02-24T17:06:10.610Z"
},
{
"LocationID": 1,
"ProductID": 5002,
"OnFloorInventory": "1939.00",
"PreSales": "180.00",
"Allocated": "0.00",
"NotAuthorized": false,
"AvailableUnits": 1759,
"PurchaseTransID": 7537282,
"DOI": "3.77",
"AvgDailySales90d": "466.83",
"TimeUpdated": "2026-02-24T17:06:10.610Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns retailer-level inventory records filtered by customer, supplier, product, and state.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
ProductIDs
query
|
number[] | optional |
Comma-separated list of product IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"ID": 1690421,
"ProductID": 160,
"CustomerID": 1,
"LastInventoryDate": "2025-05-20T06:00:00.000Z",
"Inventory": "20.00",
"DailySales": "0.03",
"TimeUpdated": "2025-06-02T21:31:05.941Z"
},
{
"ID": 1706440,
"ProductID": 161,
"CustomerID": 1,
"LastInventoryDate": "1999-12-31T07:00:00.000Z",
"Inventory": "0.00",
"DailySales": "0.03",
"TimeUpdated": "2025-06-17T15:46:14.397Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns invoices filtered by customer, status, date range, and state.
| Name | Type | Required | Description |
|---|---|---|---|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
InvoiceIDs
query
|
number[] | optional |
Comma-separated list of invoice IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
Statuses
query
|
number[] | optional |
Comma-separated list of invoice status IDs. Defaults to New (1).
1
New
2
Locked for Routing
3
Loaded
4
Returned
5
Balanced
7
Verified
|
|
StartDate
query
|
date | optional |
ISO 8601 date string. Returns invoices on or after this date.
|
|
EndDate
query
|
date | optional |
ISO 8601 date string. Returns invoices on or before this date.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceID": 9001,
"CustomerID": 1,
"CustomerName": "Acme Beverages",
"InvoiceNum": "INV-2025-0001",
"OpenDebit": "0.320000",
"OpenCredit": "0.000000",
"PONum": null,
"PODate": null,
"TermID": 3,
"PDFURL": "https://example.com/api?APIKeyID=123456",
"Memo": "This is a memo",
"Date": "2026-02-10T07:00:00.000Z",
"DueDate": "2026-03-11T06:00:00.000Z",
"Status": 1,
"InvoiceTotal": "1536.000000",
"SubmittedByUserID": 856,
"SubmittedByUserName": "John Doe",
"SubmittedByUserEmail": "john.doe@example.com",
"BuiltByUserID": 856,
"BuiltByUserName": "Jane Smith",
"BuiltByUserEmail": "jane.smith@example.com",
"InvoiceTimeCreated": "2026-01-27T13:40:00.000Z",
"InvoiceLastUpdated": "2026-01-27T13:40:00.000Z",
"TotalNumUnits": "72",
"TotalCases": "6.00",
"TotalFullPrice": "1680.000000",
"TotalExtPrice": "1536.000000",
"TotalDiscount": "144.000000",
"OpenBalance": "1536.000000"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single invoice by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
invoiceID
path
|
number | required |
The ID of the invoice to retrieve.
|
{
"Data": [
{
"InvoiceID": 9001,
"CustomerID": 1,
"CustomerName": "Acme Beverages",
"InvoiceNum": "INV-2025-0001",
"OpenDebit": "0.320000",
"OpenCredit": "0.000000",
"PONum": null,
"PODate": null,
"TermID": 3,
"PDFURL": "https://example.com/api?APIKeyID=123456",
"Memo": "This is a memo",
"Date": "2026-02-10T07:00:00.000Z",
"DueDate": "2026-03-11T06:00:00.000Z",
"Status": 1,
"InvoiceTotal": "1536.000000",
"SubmittedByUserID": 856,
"SubmittedByUserName": "John Doe",
"SubmittedByUserEmail": "john.doe@example.com",
"BuiltByUserID": 856,
"BuiltByUserName": "Jane Smith",
"BuiltByUserEmail": "jane.smith@example.com",
"InvoiceTimeCreated": "2026-01-27T13:40:00.000Z",
"InvoiceLastUpdated": "2026-01-27T13:40:00.000Z",
"TotalNumUnits": "72",
"TotalCases": "6.00",
"TotalFullPrice": "1680.000000",
"TotalExtPrice": "1536.000000",
"TotalDiscount": "144.000000",
"OpenBalance": "1536.000000"
}
]
}
Returns line item transactions for the specified invoices. InvoiceIDs is required.
| Name | Type | Required | Description |
|---|---|---|---|
|
InvoiceIDs
query
|
number[] | required |
Comma-separated list of invoice IDs to fetch transactions for. Returns 400 if not provided.
|
|
Statuses
query
|
number[] | optional |
Comma-separated list of invoice status IDs. If provided and does not include Verified (7), verified invoices are excluded from results.
1
New
2
Locked for Routing
3
Loaded
4
Returned
5
Balanced
7
Verified
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceTransID": 20001,
"InvoiceID": 9001,
"CustomerID": 1,
"ProductID": 171,
"ProductName": "Terra Bites Milk Chocolate Blueberries",
"Cases": "1.00",
"NumUnits": 20,
"Ordered": 20,
"BackOrder": 0,
"FullPrice": "11.000000",
"Discount": "2.250000",
"UnitPrice": "8.750000",
"ExtPrice": "175.000000",
"TimeUpdated": "2024-09-23T19:05:39.984Z",
"SupplierID": 5,
"PromotionID": 5571,
"BatchCode": "BATCH-2025-01",
"COA_URL": "https://cdn.example.com/coa/batch-2025-001.pdf"
},
{
"InvoiceTransID": 20002,
"InvoiceID": 9001,
"ProductID": 736,
"ProductName": "Camino Gummies Wild Cherry",
"Cases": "1.00",
"NumUnits": 20,
"Ordered": 20,
"BackOrder": 0,
"FullPrice": "11.000000",
"Discount": "0.000000",
"UnitPrice": "11.000000",
"ExtPrice": "220.000000",
"TimeUpdated": "2024-09-23T19:05:39.984Z",
"SupplierID": 5,
"PromotionID": null,
"BatchCode": "BATCH-2025-002",
"COA_URL": null
}
],
"Page": 1,
"PageSize": 50
}
Returns line item transactions for a single invoice by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
invoiceID
path
|
number | required |
The ID of the invoice to fetch transactions for.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceTransID": 20001,
"InvoiceID": 9001,
"CustomerID": 1,
"ProductID": 171,
"ProductName": "Terra Bites Milk Chocolate Blueberries",
"Cases": "1.00",
"NumUnits": 20,
"Ordered": 20,
"BackOrder": 0,
"FullPrice": "11.000000",
"Discount": "2.250000",
"UnitPrice": "8.750000",
"ExtPrice": "175.000000",
"TimeUpdated": "2024-09-23T19:05:39.984Z",
"SupplierID": 5,
"PromotionID": 5571,
"BatchCode": "BATCH-2025-01",
"COA_URL": "https://cdn.example.com/coa/batch-2025-001.pdf"
},
{
"InvoiceTransID": 20002,
"InvoiceID": 9001,
"ProductID": 736,
"ProductName": "Camino Gummies Wild Cherry",
"Cases": "1.00",
"NumUnits": 20,
"Ordered": 20,
"BackOrder": 0,
"FullPrice": "11.000000",
"Discount": "0.000000",
"UnitPrice": "11.000000",
"ExtPrice": "220.000000",
"TimeUpdated": "2024-09-23T19:05:39.984Z",
"SupplierID": 5,
"PromotionID": null,
"BatchCode": "BATCH-2025-002",
"COA_URL": null
}
],
"Page": 1,
"PageSize": 50
}
Returns certificate of analysis records for the specified invoices. InvoiceIDs is required.
| Name | Type | Required | Description |
|---|---|---|---|
|
InvoiceIDs
query
|
number[] | required |
Comma-separated list of invoice IDs to fetch COAs for. Returns 400 if not provided.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceID": 9001,
"ProductID": 160,
"InvoiceTransID": 20001,
"BatchCode": "BATCH-2025-001",
"COA_URL": "https://cdn.example.com/coa/batch-2025-001.pdf",
"TimeUpdated": "2025-01-10T14:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns certificate of analysis records for a single invoice by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
invoiceID
path
|
number | required |
The ID of the invoice to fetch COAs for.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceID": 9001,
"ProductID": 160,
"InvoiceTransID": 20001,
"BatchCode": "BATCH-2025-001",
"COA_URL": "https://cdn.example.com/coa/batch-2025-001.pdf",
"TimeUpdated": "2025-01-10T14:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns warehouse and distribution locations filtered by state and location ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
LocationIDs
query
|
number[] | optional |
Comma-separated list of location IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"LocationID": 1,
"Location": "Alameda",
"DBA": "Kiva Sales & Service",
"Address": "2300 N Loop Rd",
"Address2": null,
"Address3": "N/A",
"City": "Alameda",
"State": "CA",
"PostalCode": "94502",
"TimeUpdated": "2024-09-23T19:05:39.984Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single location by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
locationID
path
|
number | required |
The ID of the location to retrieve.
|
{
"Data": [
{
"LocationID": 1,
"Location": "Alameda",
"DBA": "Kiva Sales & Service",
"Address": "2300 N Loop Rd",
"Address2": null,
"Address3": "N/A",
"City": "Alameda",
"State": "CA",
"PostalCode": "94502",
"TimeUpdated": "2024-09-23T19:05:39.984Z"
}
]
}
Returns promotion records with their associated products filtered by supplier and state.
| Name | Type | Required | Description |
|---|---|---|---|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"PromotionID": 42,
"PromotionTypeID": 4,
"States": [
"CA"
],
"PromotionName": "Spring Chocolate Deal",
"ProductOverrideType": "none",
"UnitPrice": 15.5,
"StartDate": "2025-01-01",
"EndDate": "2025-03-31",
"AllProducts": false,
"ProductIDs": [
160,
161,
162
],
"TimeUpdated": "2024-12-20T10:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns all product categories ordered by sequence.
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"ProductCategoryID": 1,
"CategoryName": "Chocolate",
"Sequence": 1,
"TimeUpdated": "2025-01-01T00:00:00.000Z"
},
{
"ProductCategoryID": 2,
"CategoryName": "Gummies",
"Sequence": 2,
"TimeUpdated": "2025-01-01T00:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns products filtered by supplier, state, product ID, and status.
| Name | Type | Required | Description |
|---|---|---|---|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
ProductIDs
query
|
number[] | optional |
Comma-separated list of product IDs to filter by. When provided, status filtering is skipped.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
Statuses
query
|
number[] | optional |
Comma-separated list of product status IDs. Defaults to Active (1). Ignored when ProductIDs is provided.
0
Discontinued
1
Active
2
Pre-order
3
Manufacture
4
Unavailable
5
Close Out
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"ProductID": 160,
"Supplier": "Kiva",
"SupplierID": 5,
"ProductName": "Bar Dark Chocolate",
"BrandFamily": "Kiva Bars",
"ProductTypeName": "Edible - Chocolate",
"UnitNetWeight": "50g",
"WholesaleUnitsPerCase": 20,
"Description": "Our classic Dark Chocolate bar is uniquely complex with flavors of black coffee and dark cherry. Using a 57% sustainably sourced dark chocolate infused with pure, clean cold water hash, this bar is sure to delight any true chocolate lover.Kiva chocolates are crafted from sustainably sourced, premium cacao infused with pure, hand-crafted cold water hash. Since 2010, Kiva's mission has been to change how the world views and uses cannabis. By applying art and science to ensure a delicious, consistent experience every time, we continue to deliver on that mission today.",
"Ingredients": "Semisweet Chocolate (Unsweetened Chocolate, Sugar, Cocoa Butter, Sunflower Lecithin, Vanilla), Cannabis Extract.",
"ThumbnailImageURL": "https://cdn.e8.co/Kiva/S3Images/256a66c67e050f86201a863c2103a71d.png",
"FullSizeImageURL": "https://cdn.e8.co/Kiva/S3Images/67d10e54dd3c94a702b78a722bdd1aa8.png",
"Potency": "100mg THC",
"PotencyTHC": null,
"Blend": "Hybrid",
"KSSMenuCategory": "Edibles/Ingestibles",
"KSSLiveCategoryID": 1,
"StatusID": 1,
"TimeUpdated": "2026-02-12T19:51:57.510Z",
"State": "CA",
"IsSample": false,
"ProductGroupID": 3,
"BrandStyle": "Kiva Bar",
"PackageID": 15,
"PackageName": "20 Kiva Bar",
"ProductTypeID": 57,
"StrainName": null,
"StrainID": null,
"Flavor": "dark",
"BrandID": 2624,
"BrandName": "Kiva Bars Base"
},
{
"ProductID": 161,
"Supplier": "Kiva",
"SupplierID": 5,
"ProductName": "Bar Milk Chocolate",
"BrandFamily": "Kiva Bars",
"ProductTypeName": "Edible - Chocolate",
"UnitNetWeight": "50g",
"WholesaleUnitsPerCase": 20,
"Description": "Meticulously crafted from the purest ingredients, Kiva's classic milk chocolate bar has hints of brown butter and a silky, creamy finish. Like all Kiva chocolates, this bar is crafted from sustainably sourced, premium cacao infused with handmade, cold water cannabis hash. Ideal for those with a love for chocolate and a refined palate.Kiva chocolates are crafted from sustainably sourced, premium cacao infused with pure, hand-crafted cold water hash. Since 2010, Kiva's mission has been to change how the world views and uses cannabis. By applying art and science to ensure a delicious, consistent experience every time, we continue to deliver on that mission today.",
"Ingredients": "Milk Chocolate (Sugar, Cocoa Butter, Milk, Unsweetened Chocolate, Sunflower Lecithin, Vanilla), Cannabis Extract.",
"ThumbnailImageURL": "https://cdn.e8.co/Kiva/S3Images/79ad65dc9c579f53b2de75ea8b183194.png",
"FullSizeImageURL": "https://cdn.e8.co/Kiva/S3Images/9ab227940b12546b120ed1a5386f759c.png",
"Potency": "100mg THC",
"PotencyTHC": null,
"Blend": "Hybrid",
"KSSMenuCategory": "Edibles/Ingestibles",
"KSSLiveCategoryID": 1,
"StatusID": 1,
"TimeUpdated": "2026-02-12T19:51:57.510Z",
"State": "CA",
"IsSample": false,
"ProductGroupID": 3,
"BrandStyle": "Kiva Bar",
"PackageID": 15,
"PackageName": "20 Kiva Bar",
"ProductTypeID": 57,
"StrainName": null,
"StrainID": null,
"Flavor": "milk",
"BrandID": 2624,
"BrandName": "Kiva Bars Base"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single product by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
productID
path
|
number | required |
The ID of the product to retrieve.
|
{
"Data": [
{
"ProductID": 160,
"Supplier": "Kiva",
"SupplierID": 5,
"ProductName": "Bar Dark Chocolate",
"BrandFamily": "Kiva Bars",
"ProductTypeName": "Edible - Chocolate",
"UnitNetWeight": "50g",
"WholesaleUnitsPerCase": 20,
"Description": "Our classic Dark Chocolate bar is uniquely complex with flavors of black coffee and dark cherry. Using a 57% sustainably sourced dark chocolate infused with pure, clean cold water hash, this bar is sure to delight any true chocolate lover.Kiva chocolates are crafted from sustainably sourced, premium cacao infused with pure, hand-crafted cold water hash. Since 2010, Kiva's mission has been to change how the world views and uses cannabis. By applying art and science to ensure a delicious, consistent experience every time, we continue to deliver on that mission today.",
"Ingredients": "Semisweet Chocolate (Unsweetened Chocolate, Sugar, Cocoa Butter, Sunflower Lecithin, Vanilla), Cannabis Extract.",
"ThumbnailImageURL": "https://cdn.e8.co/Kiva/S3Images/256a66c67e050f86201a863c2103a71d.png",
"FullSizeImageURL": "https://cdn.e8.co/Kiva/S3Images/67d10e54dd3c94a702b78a722bdd1aa8.png",
"Potency": "100mg THC",
"PotencyTHC": null,
"Blend": "Hybrid",
"KSSMenuCategory": "Edibles/Ingestibles",
"KSSLiveCategoryID": 1,
"StatusID": 1,
"TimeUpdated": "2026-02-12T19:51:57.510Z",
"State": "CA",
"IsSample": false,
"ProductGroupID": 3,
"BrandStyle": "Kiva Bar",
"PackageID": 15,
"PackageName": "20 Kiva Bar",
"ProductTypeID": 57,
"StrainName": null,
"StrainID": null,
"Flavor": "dark",
"BrandID": 2624,
"BrandName": "Kiva Bars Base"
}
]
}
Returns the active states available to your API key.
| Name | Type | Required | Description |
|---|---|---|---|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"StateAbbreviation": "CA",
"StateName": "California",
"OrderCutOffTime": "2:30 PM",
"TimeZone": "America/Los_Angeles",
"OrderCutOffDaysInAdvance": "1",
"TimeUpdated": "2025-12-30T18:28:17.710Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns suppliers filtered by state, supplier ID, and status.
| Name | Type | Required | Description |
|---|---|---|---|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
Active
query
|
boolean[] | optional |
True or False flag for supplier status. Defaults to Active only for Customer and Supplier keys
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"SupplierID": 1,
"Supplier": "Kiva",
"State": "CA",
"Active": true,
"Description": "Premium cannabis edibles and infused products.",
"BrandAssetsURL": "https://cdn.example.com/kiva/brand-assets.zip",
"SupplierWebsiteURL": "https://www.kivaconfections.com",
"TimeUpdated": "2025-01-01T00:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single supplier by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
supplierID
path
|
number | required |
The ID of the supplier to retrieve.
|
{
"Data": [
{
"SupplierID": 1,
"Supplier": "Kiva",
"State": "CA",
"Active": true,
"Description": "Premium cannabis edibles and infused products.",
"BrandAssetsURL": "https://cdn.example.com/kiva/brand-assets.zip",
"SupplierWebsiteURL": "https://www.kivaconfections.com",
"TimeUpdated": "2025-01-01T00:00:00.000Z"
}
]
}
Returns users filtered by state, role, customer ID, and supplier ID. Supplier API keys return their own Supplier users and active Customer users. Customer API keys only return their own Customer users.
| Name | Type | Required | Description |
|---|---|---|---|
|
UserIDs
query
|
number[] | optional |
Comma-separated list of user IDs to filter by.
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by.
|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by.
|
|
Roles
query
|
string[] | optional |
Comma-separated list of roles to filter by.
Customer
Customer
Supplier
Supplier
Admin
Admin
DistributorRep
Distributor Rep
|
|
States
query
|
string[] | optional |
Comma-separated list of state abbreviations to filter by. Example: "CA,NJ".
|
|
Active
query
|
boolean[] | optional |
True or False flag for user status. Defaults to Active = true only for Customer and Supplier keys
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"UserID": 501,
"SiteUserID": 1001,
"UserActive": true,
"KSSLiveAccess": true,
"Email": "buyer@example.com",
"States": [
"CA"
],
"Role": "Customer",
"CustomerIDs": [
1
],
"SupplierIDs": null,
"LocationIDs": [
3
],
"PowerUser": false
}
],
"Page": 1,
"PageSize": 50
}
Returns a single user by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
userID
path
|
number | required |
The ID of the user to retrieve.
|
{
"Data": [
{
"UserID": 501,
"SiteUserID": 1001,
"UserActive": true,
"KSSLiveAccess": true,
"Email": "buyer@example.com",
"States": [
"CA"
],
"Role": "Customer",
"CustomerIDs": [
1
],
"SupplierIDs": null,
"LocationIDs": [
3
],
"PowerUser": false
}
]
}
Returns payments for an AR account, including payment type and available balance (total minus confirmed applications and pending requests).
| Name | Type | Required | Description |
|---|---|---|---|
|
ARAccountIDs
query
|
number[] | optional |
Comma-separated list of AR account IDs to filter by. Customer keys are automatically scoped to their authorized accounts.
|
|
PaymentTypeIDs
query
|
number[] | optional |
Comma-separated list of payment type IDs to filter by.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"PaymentID": 1,
"PaymentInvoiceID": 90001,
"PaymentInvoiceNum": "INV-PAY-0001",
"ARAccountID": 123,
"PaymentTypeID": 3,
"PaymentTypeName": "ACH",
"Amount": "5000.00",
"SupplierID": null,
"LoadSheetStatusID": 7,
"PostDate": "2025-03-01T00:00:00.000Z",
"TimeCreated": "2025-03-01T08:00:00.000Z",
"TimeUpdated": "2025-03-01T08:00:00.000Z",
"AvailableBalance": "3500.00"
}
],
"Page": 1,
"PageSize": 50
}
Returns invoices with a non-zero open balance for an AR account. Used to identify invoices eligible for payment allocation.
| Name | Type | Required | Description |
|---|---|---|---|
|
ARAccountIDs
query
|
number[] | optional |
Comma-separated list of AR account IDs to filter by. Customer keys are automatically scoped to their authorized accounts.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"InvoiceID": 8001,
"InvoiceNum": "INV-2025-0042",
"CustomerID": 1,
"ARAccountID": 123,
"InvoiceTotal": "1200.00",
"OpenDebit": "1200.00",
"OpenCredit": "0.00",
"OpenBalance": "1200.00",
"CreditTermID": 5,
"TermID": 5,
"DueDate": "2025-04-01T00:00:00.000Z",
"Date": "2025-03-01T00:00:00.000Z",
"PONum": "PO-2025-001"
}
],
"Page": 1,
"PageSize": 50
}
Returns confirmed payment applications (allocations already applied in Encompass).
| Name | Type | Required | Description |
|---|---|---|---|
|
ARAccountIDs
query
|
number[] | optional |
Comma-separated list of AR account IDs to filter by.
|
|
PaymentInvoiceNums
query
|
string[] | optional |
Comma-separated list of payment invoice numbers to filter by.
|
|
TargetInvoiceNums
query
|
string[] | optional |
Comma-separated list of target invoice numbers to filter by.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"PaymentApplicationID": 5001,
"PaymentInvoiceID": 90001,
"PaymentInvoiceNum": "INV-PAY-0001",
"TargetInvoiceID": 8001,
"TargetInvoiceNum": "INV-2025-0042",
"ARAccountID": 123,
"Amount": "1200.00",
"AppliedBy": "jsmith",
"TimeApplied": "2025-03-10T14:00:00.000Z",
"TimeCreated": "2025-03-10T14:00:00.000Z",
"TimeUpdated": "2025-03-10T14:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns customer-initiated payment allocation requests and their current status.
| Name | Type | Required | Description |
|---|---|---|---|
|
ARAccountIDs
query
|
number[] | optional |
Comma-separated list of AR account IDs to filter by.
|
|
Statuses
query
|
string[] | optional |
Comma-separated list of statuses to filter by.
Pending
Pending — queued for export to Encompass
Exported
Exported — sent to Encompass, awaiting confirmation
Confirmed
Confirmed — matched to a PaymentApplication
Rejected
Rejected — not confirmed within the timeout window
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"RequestID": 1,
"PaymentInvoiceNum": "INV-PAY-0001",
"TargetInvoiceNum": "INV-2025-0042",
"ARAccountID": 123,
"Amount": "1200.00",
"Status": "Confirmed",
"RequestedByUserID": 501,
"TimeRequested": "2025-03-08T09:00:00.000Z",
"TimeExported": "2025-03-08T09:05:00.000Z",
"TimeConfirmed": "2025-03-10T14:00:00.000Z",
"MatchedPaymentApplicationID": 5001,
"TimeUpdated": "2025-03-10T14:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Creates a payment allocation request. Validates the payment has sufficient available balance and the target invoice belongs to the same AR account. The request is queued as Pending and exported to Encompass on the next export run.
| Name | Type | Required | Description |
|---|---|---|---|
|
PaymentInvoiceNum
query
|
string | required |
The invoice number of the payment to allocate from.
|
|
TargetInvoiceNum
query
|
string | required |
The invoice number to allocate the payment toward.
|
|
ARAccountID
query
|
number | required |
The AR account ID both invoices belong to.
|
|
Amount
query
|
number | required |
The dollar amount to allocate. Must be positive and not exceed the available balance.
|
{
"Data": {
"RequestID": 2,
"PaymentInvoiceNum": "INV-PAY-0001",
"TargetInvoiceNum": "INV-2025-0042",
"ARAccountID": 123,
"Amount": "500.00",
"Status": "Pending",
"RequestedByUserID": 501,
"TimeRequested": "2025-03-19T10:00:00.000Z",
"TimeExported": null,
"TimeConfirmed": null,
"MatchedPaymentApplicationID": null,
"TimeUpdated": "2025-03-19T10:00:00.000Z"
}
}
Returns purchase orders filtered by purchase ID, vendor, location, status, and date range. Not accessible to Customer API keys.
| Name | Type | Required | Description |
|---|---|---|---|
|
PurchaseIDs
query
|
number[] | optional |
Comma-separated list of purchase IDs to filter by.
|
|
VendorIDs
query
|
number[] | optional |
Comma-separated list of vendor IDs to filter by.
|
|
LocationIDs
query
|
number[] | optional |
Comma-separated list of destination location IDs to filter by.
|
|
Statuses
query
|
string[] | optional |
Comma-separated list of purchase statuses to filter by. Defaults to all statuses.
New
New
Accepted
Accepted
Received
Received
Confirmed
Confirmed
Verified
Verified
|
|
StartDate
query
|
date | optional |
ISO 8601 date string. Returns purchases with a PostDate on or after this date.
|
|
EndDate
query
|
date | optional |
ISO 8601 date string. Returns purchases with a PostDate on or before this date.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"PurchaseID": 10001,
"ReceiveDate": "2025-03-01T00:00:00.000Z",
"ShipmentNum": "SHP-2025-001",
"ShipmentID": 5001,
"ToLocationID": 3,
"ToLocationName": "Main Warehouse",
"VendorName": "Acme Distributing",
"VendorID": 42,
"PostDate": "2025-03-01T00:00:00.000Z",
"Status": "Received",
"PONum": "PO-2025-0123",
"Freight": "150.00",
"Tax": "0.00",
"OtherCost": "0.00",
"Total": "4500.00",
"TotalCases": "30",
"PublicPDFLink": null,
"Memo": null,
"InvoiceDate": "2025-03-01T00:00:00.000Z",
"DueDate": "2025-04-01T00:00:00.000Z",
"Terms": "Net 30",
"TermID": 5,
"LastEditTime": "2025-03-02T10:00:00.000Z",
"LastCalcTime": "2025-03-02T10:00:00.000Z",
"TimeUpdated": "2025-03-02T10:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns a single purchase order by ID.
| Name | Type | Required | Description |
|---|---|---|---|
|
purchaseID
path
|
number | required |
The ID of the purchase to retrieve.
|
{
"Data": [
{
"PurchaseID": 10001,
"ReceiveDate": "2025-03-01T00:00:00.000Z",
"ShipmentNum": "SHP-2025-001",
"ShipmentID": 5001,
"ToLocationID": 3,
"ToLocationName": "Main Warehouse",
"VendorName": "Acme Distributing",
"VendorID": 42,
"PostDate": "2025-03-01T00:00:00.000Z",
"Status": "Received",
"PONum": "PO-2025-0123",
"Freight": "150.00",
"Tax": "0.00",
"OtherCost": "0.00",
"Total": "4500.00",
"TotalCases": "30",
"PublicPDFLink": null,
"Memo": null,
"InvoiceDate": "2025-03-01T00:00:00.000Z",
"DueDate": "2025-04-01T00:00:00.000Z",
"Terms": "Net 30",
"TermID": 5,
"LastEditTime": "2025-03-02T10:00:00.000Z",
"LastCalcTime": "2025-03-02T10:00:00.000Z",
"TimeUpdated": "2025-03-02T10:00:00.000Z"
}
]
}
Returns purchase order line items for one or more purchases. PurchaseIDs is required. Not accessible to Customer API keys.
| Name | Type | Required | Description |
|---|---|---|---|
|
PurchaseIDs
query
|
number[] | required |
Comma-separated list of purchase IDs to retrieve line items for.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"PurchaseTransID": 99001,
"PurchaseID": 10001,
"ProductID": 5001,
"Ordered": "10",
"NumUnits": "120",
"FOB": "12.50",
"DepositCost": "0.00",
"ExtPrice": "1500.00",
"ExpirationDate": "2026-01-01T00:00:00.000Z",
"CodeDate": "2025-01-15T00:00:00.000Z",
"BatchCode": "BCH-001",
"LaidInCost": "13.00",
"PalletTag": null,
"Cases": "10",
"Weight": "120.00",
"TimeUpdated": "2025-03-02T10:00:00.000Z"
}
],
"Page": 1,
"PageSize": 50
}
Returns sales reps grouped by user, including both Territory Managers and Supplier Reps. Each result includes the rep's name, email, type, and arrays of associated customers and suppliers. Only returns active users, active customers, and active suppliers. Supplier API keys see TMs and Supplier Reps scoped to their authorized suppliers. Customer API keys only see reps assigned to their own customers.
| Name | Type | Required | Description |
|---|---|---|---|
|
SupplierIDs
query
|
number[] | optional |
Comma-separated list of supplier IDs to filter by. Supplier keys are automatically scoped to their authorized suppliers.
|
|
CustomerIDs
query
|
number[] | optional |
Comma-separated list of customer IDs to filter by. Customer keys are automatically scoped to their authorized customers.
|
Supports Page and PageSize query parameters. Default page size: 50.
{
"Data": [
{
"UserID": 42,
"Name": "Jane Smith",
"Email": "jane.smith@example.com",
"Type": "Territory Manager",
"Suppliers": [
{
"SupplierID": 10,
"Supplier": "Kiva Confections"
}
],
"Customers": [
{
"CustomerID": 100,
"CustomerName": "Acme Dispensary"
},
{
"CustomerID": 101,
"CustomerName": "Green Leaf Co"
}
]
},
{
"UserID": 501,
"Name": "Bob Jones",
"Email": "bob.jones@supplier.com",
"Type": "Supplier Rep",
"Suppliers": [
{
"SupplierID": 10,
"Supplier": "Kiva Confections"
},
{
"SupplierID": 11,
"Supplier": "Kiva Brand 2"
}
],
"Customers": [
{
"CustomerID": 100,
"CustomerName": "Acme Dispensary"
}
]
}
],
"Page": 1,
"PageSize": 50
}