Vendor API V1
This is a legacy API.
V3 is the actively maintained version. New integrations should use
Venue API V3
instead.
Vendors
1 endpoints-
GET
/vapi/v1/vendors
Endpoints
GET
/vapi/v1/vendors
List vendors connected to the integrator
Returns all active vendor connections. Auth requires only the integrator token.
Example
curl -X GET "https://app.posabit.com/vapi/v1/vendors" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
status
|
string(20) | No | Default: active |
name
|
string | Yes | |
description
|
text | No | |
address
|
string | No | |
city
|
string | No | |
state
|
string(2) | No | |
zip
|
string(10) | No | |
phone
|
string | No | |
email
|
string | No | |
website
|
string | No | |
contact_name
|
string | No | |
created_at
|
datetime | Yes | |
updated_at
|
datetime | Yes | |
logo
|
string | No | |
timezone
|
string | No | |
suppliers_count
|
integer | No | Default: 0 |
core_brands_count
|
integer | No | Default: 0 |
is_supplier
|
boolean | No | Default: false |
has_catalogs
|
boolean | No | Default: false |
inheritor_id
|
integer | No | |
territory
|
string(2) | No | |
region_id
|
integer | No | |
merged
|
boolean | No | Default: false |
core_isn
|
string | No | |
core_token
|
string | No | |
retailers_count
|
integer | No | Default: 0 |
retailers_analyzed_at
|
datetime | No | |
subscription_id
|
integer | No | |
subscription_price
|
integer | No | |
salesforce_account_number
|
string | No | |
last_subscription_changed
|
datetime | No | |
is_demo
|
boolean | Yes | Default: false |
last_rate_card_changed_at
|
datetime | No | |
enable_catalog
|
boolean | No | Default: false |
Inventories
1 endpoints
GET
/vapi/v1/retailers/{retailer_id}/inventories
Get VMI inventory data for a retailer
Returns inventory data from Redshift. Paginated with array slicing.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
sales_range_in_weeks
|
integer | query | No | Sales lookback in weeks (default 4) |
page
|
integer | query | No | Page number (default 1) |
per_page
|
integer | query | No | Results per page (default 100, max 1000) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/inventories" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
product_id
|
integer | Yes | |
tier_id
|
integer | No | |
barcode
|
string | No | |
price
|
integer | Yes | Default: 0 |
last_price
|
integer | No | |
cost
|
integer | Yes | Default: 0 |
discountable
|
boolean | Yes | Default: true |
quantity_on_hand
|
decimal | Yes | Default: 0.0 |
optimum_level
|
integer | No | Default: 0 |
reorder_threshold
|
integer | No | |
calc_threshold
|
integer | No | |
last_replenish_date
|
datetime | No | |
velocity
|
decimal | Yes | Default: 0.0 |
sold
|
integer | Yes | Default: 0 |
days_supply
|
integer | Yes | Default: 0 |
avg_cost
|
integer | No | |
avg_price
|
integer | No | |
sync_expires_at
|
datetime | No | |
last_order
|
datetime | No | |
created_at
|
datetime | No | |
updated_at
|
datetime | No | |
supplier_id
|
integer | No | |
updated_by
|
string | No | |
unit
|
string(15) | Yes | Default: units |
weight
|
decimal | Yes | Default: 0.0 |
weight_unit
|
string(15) | No | |
is_active
|
boolean | No | Default: true |
notes
|
text | No | |
sellable_quantity
|
decimal | Yes | Default: 0.0 |
ecomm_quantity
|
decimal | Yes | Default: 0.0 |
allow_undercost
|
boolean | Yes | Default: false |
manifest_items_count
|
integer | No | Default: 0 |
thc
|
decimal | No | |
cbd
|
decimal | No | |
cbn
|
decimal | No | |
equivalent_weight
|
decimal | No | |
equivalent_unit
|
string | No | |
thc_min
|
decimal | No | |
thc_max
|
decimal | No | |
cbd_min
|
decimal | No | |
cbd_max
|
decimal | No | |
cbn_min
|
decimal | No | |
cbn_max
|
decimal | No | |
api_id
|
string | No | |
inheritor_id
|
integer | No | |
med_price
|
integer | No | |
terpenes
|
text | No | |
manifest_transfer_date
|
date | No | |
thca
|
decimal | No | |
thca_min
|
decimal | No | |
thca_max
|
decimal | No | |
cbda
|
decimal | No | |
cbda_min
|
decimal | No | |
cbda_max
|
decimal | No | |
total_thc
|
decimal | No | |
total_thc_min
|
decimal | No | |
total_thc_max
|
decimal | No | |
producer_id
|
integer | No | |
doh_compliant
|
boolean | No | Default: false |
total_cbd
|
decimal | No | |
total_cbd_min
|
decimal | No | |
total_cbd_max
|
decimal | No | |
last_received_quantity
|
decimal | No | Default: 0.0 |
Sales
1 endpoints
GET
/vapi/v1/retailers/{retailer_id}/sales
Get sales data for a retailer
Returns daily sales aggregated by product type from Redshift. Accepts a custom date range via start_date/end_date (ISO 8601, e.g. 2025-01-01). The range must not exceed 31 days. Defaults to the last 30 days.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
start_date
|
string | query | No | Start date (ISO 8601, e.g. 2025-01-01) |
end_date
|
string | query | No | End date (ISO 8601, e.g. 2025-01-31) |
page
|
integer | query | No | Page number (default 1) |
per_page
|
integer | query | No | Results per page (default 100, max 1000) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/sales" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
| 422 | Invalid or out-of-range dates |
Products
1 endpoints
GET
/vapi/v1/retailers/{retailer_id}/products
Get core products carried by a retailer
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
page
|
integer | query | No | Page number (default 1) |
per_page
|
integer | query | No | Results per page (default 100) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/products" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
monetary_value
|
integer | No | Default: 0 |
name
|
string | No | |
display_name
|
string | No | |
image
|
string | No | |
product_type_id
|
integer | No | |
product_brand_id
|
integer | No | |
product_strain_id
|
integer | No | |
flower_type
|
string | No | |
shared
|
boolean | Yes | Default: false |
created_at
|
datetime | No | |
updated_at
|
datetime | No | |
description
|
string(8000) | No | Default: |
description_html
|
text | No | |
report_cat
|
string | No | Default: |
weight_unit
|
string(2) | No | |
is_sample
|
boolean | Yes | Default: false |
is_medical_only
|
boolean | Yes | Default: false |
weight
|
decimal | No | Default: 0.0 |
concentrate_type
|
string | No | |
available_on
|
string | Yes | Default: everywhere |
inheritor_id
|
integer | No | |
skus_count
|
integer | No | Default: 0 |
sellable_quantity
|
decimal | Yes | Default: 0.0 |
quantity_on_hand
|
decimal | Yes | Default: 0.0 |
unit
|
string | Yes | Default: units |
external_id
|
string | No | |
archived
|
boolean | Yes | Default: false |
internal_id
|
string | No | |
curated_product_id
|
integer | No | |
instructions
|
text | No | |
servings
|
integer | No | |
pack_size
|
integer | No | |
tag_list
|
text | No | |
manufacturing_method
|
text | No | |
ingredients
|
text | No | |
solvent
|
string | No | |
allergens
|
text | No | |
thc_per_serving
|
decimal | No | |
cbd_per_serving
|
decimal | No | |
core_product_id
|
integer | No | |
image_assocs_count
|
integer | No | Default: 0 |
has_image
|
boolean | No | Default: false |
seo_title
|
string | No | |
seo_meta_description
|
text | No | |
seo_keywords
|
text | No | |
last_catalog_sync
|
datetime | No | |
catalog_synced
|
boolean | No | Default: false |
tag_list_enh
|
text | No |
Purchase Orders
1 endpointsPurchase Orders allow vendors to manage and track orders from their retailers. View all incoming purchase orders, update their status, and communicate directly with retailers through the POSaBIT portal.
GET
/vapi/v1/retailers/{retailer_id}/purchase_orders
Get purchase orders for a retailer
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
page
|
integer | query | No | Page number (default 1) |
per_page
|
integer | query | No | Results per page (default 100) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/purchase_orders" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
retailer_id
|
integer | Yes | |
created_by
|
integer | Yes | |
manifest_id
|
integer | No | |
aasm_state
|
string | Yes | Default: pending |
created_at
|
datetime | Yes | |
updated_at
|
datetime | Yes | |
items_count
|
integer | Yes | Default: 0 |
ref_number
|
string | No | |
owner_type
|
string | No | |
owner_id
|
integer | No |
Manifests
2 endpoints
GET
/vapi/v1/retailers/{retailer_id}/manifests
Get manifests for a retailer
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
page
|
integer | query | No | Page number (default 1) |
per_page
|
integer | query | No | Results per page (default 100) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/manifests" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
supplier_id
|
integer | No | |
reference_no
|
string | No | |
aasm_state
|
string | No | Default: pending |
transfer_date
|
date | No | |
delivery_time
|
datetime | No | |
notes
|
text | No | |
created_at
|
datetime | No | |
updated_at
|
datetime | No | |
api_id
|
string | No | |
accepted_by
|
string | No | |
accepted_at
|
datetime | No | |
pickup_time
|
datetime | No | |
transportation_type
|
string | No | |
destination_id
|
integer | No | |
driver_name
|
string | No | |
driver_id
|
string | No | |
driver_dob
|
date | No | |
vehicle_id
|
string | No | |
vehicle_year
|
string | No | |
vehicle_color
|
string | No | |
vehicle_model
|
string | No | |
vehicle_make
|
string | No | |
license_plate
|
string | No | |
courier_id
|
integer | No | |
type
|
string | No | |
route
|
text | No | |
courier_license_number
|
string | No | |
voided_lot_numbers
|
text | No | |
transferred_at
|
datetime | No | |
voided_at
|
datetime | No | |
incoming_created_at
|
datetime | No | |
estimated_departed_at
|
datetime | No | |
estimated_arrival_at
|
datetime | No | |
venue_destination_id
|
integer | No | |
received_cost
|
integer | No | |
accepted_cost
|
integer | No | Default: 0 |
received_quantity
|
integer | No | |
accepted_quantity
|
integer | No | Default: 0 |
has_marijuana
|
boolean | Yes | Default: false |
json_filename
|
string | No | |
import_source
|
string | No | |
discount
|
integer | No | |
excise_tax
|
boolean | Yes | Default: false |
total_excise_tax
|
integer | No | Default: 0 |
external_driver_id
|
string | No | |
external_vehicle_id
|
string | No | |
sts_license_id
|
integer | No | |
payment_method
|
string(25) | No | |
core_external_ref
|
string(50) | No | Default: |
external_pdf
|
string | No |
GET
/vapi/v1/retailers/{retailer_id}/manifests/{id}
Get manifest details with line items
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
retailer_id
|
integer | path | Yes | Retailer ID |
id
|
integer | path | Yes | Manifest ID |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{retailer_id}/manifests/{id}" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |
Response Fields
| Field | Type | Required | Description |
|---|---|---|---|
supplier_id
|
integer | No | |
reference_no
|
string | No | |
aasm_state
|
string | No | Default: pending |
transfer_date
|
date | No | |
delivery_time
|
datetime | No | |
notes
|
text | No | |
created_at
|
datetime | No | |
updated_at
|
datetime | No | |
api_id
|
string | No | |
accepted_by
|
string | No | |
accepted_at
|
datetime | No | |
pickup_time
|
datetime | No | |
transportation_type
|
string | No | |
destination_id
|
integer | No | |
driver_name
|
string | No | |
driver_id
|
string | No | |
driver_dob
|
date | No | |
vehicle_id
|
string | No | |
vehicle_year
|
string | No | |
vehicle_color
|
string | No | |
vehicle_model
|
string | No | |
vehicle_make
|
string | No | |
license_plate
|
string | No | |
courier_id
|
integer | No | |
type
|
string | No | |
route
|
text | No | |
courier_license_number
|
string | No | |
voided_lot_numbers
|
text | No | |
transferred_at
|
datetime | No | |
voided_at
|
datetime | No | |
incoming_created_at
|
datetime | No | |
estimated_departed_at
|
datetime | No | |
estimated_arrival_at
|
datetime | No | |
venue_destination_id
|
integer | No | |
received_cost
|
integer | No | |
accepted_cost
|
integer | No | Default: 0 |
received_quantity
|
integer | No | |
accepted_quantity
|
integer | No | Default: 0 |
has_marijuana
|
boolean | Yes | Default: false |
json_filename
|
string | No | |
import_source
|
string | No | |
discount
|
integer | No | |
excise_tax
|
boolean | Yes | Default: false |
total_excise_tax
|
integer | No | Default: 0 |
external_driver_id
|
string | No | |
external_vehicle_id
|
string | No | |
sts_license_id
|
integer | No | |
payment_method
|
string(25) | No | |
core_external_ref
|
string(50) | No | Default: |
external_pdf
|
string | No |
Retailers
2 endpoints
GET
/vapi/v1/retailers
List all active retailers for the vendor
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
vendor_id
|
integer | query | No | Vendor ID (alternative to vendor_token in auth header) |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
GET
/vapi/v1/retailers/{id}
Get retailer details with inventory metrics
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
id
|
integer | path | Yes | Retailer ID |
Example
curl -X GET "https://app.posabit.com/vapi/v1/retailers/{id}" \
-H "Accept: application/json"
Responses
| Status | Description |
|---|---|
| 200 | Success |
| 401 | Unauthorized |
| 404 | Not Found |