Menu Feeds

2 endpoints
GET /api/v3/menu_feeds/{menu_feed_id}/options

Check that a feed key is valid and authorized

Returns an empty object. This is a reachability and authorization check: 200 when the feed key resolves for the authenticated venue, 404 when it does not. It previously returned menu widget display settings (theme, fonts, colors, allow_orders and so on). Those columns were removed in 2019 and the values now reach the widget through the embed snippet the venue pastes into their site, not through this endpoint, so the body has been emptied rather than left raising. Despite the name this is a GET, and it has no role in CORS -- browser preflight is answered by the CORS middleware before routing.

Parameters

Name Type In Required Description
menu_feed_id integer path Yes Feed Key

Example

curl -X GET "https://app.posabit.com/api/v3/menu_feeds/{menu_feed_id}/options" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
404 Could not find menu feed
422 Invalid parameters
500 Internal Server Error
GET /api/v3/menu_feeds/{id}

Show a Menu Feed

Returns the feed's categories ("menu_groups"), each with the products that match the category's filters, each with one entry in "prices" per sellable variant. The response is cached for 10 minutes, so edits to products, pricing or the feed's categories can take that long to appear. Identifying a product: menu_items[].id is NOT a reliable product id. When the category has combine_weights set, siblings are grouped by strain and brand and the item id becomes a "Strain - Brand - Type" label covering several products. Use prices[].product_id, which is always the id of the product that variant belongs to. For the same reason brand_id and strain_id are the only ids on the item itself; product_type_id, supplier_id and the tier ids are per price entry.

Parameters

Name Type In Required Description
id integer path Yes Feed Key

Example

curl -X GET "https://app.posabit.com/api/v3/menu_feeds/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Models

MenuFeedResponse

A published menu feed.

Property Type Required Description
menu_feed MenuFeed Yes The feed and its categories
MenuFeed

A menu feed and the categories it publishes.

Property Type Required Description
title string No Feed title
feed_key string No Feed key (the id used to request this feed)
description string No Feed description
feed_type string No Feed type, e.g. endpoint, weedmaps, leafly
menu_groups array (MenuGroup) Yes Feed categories, in display order
MenuGroup

A feed category and the products matching its filters.

Property Type Required Description
id integer Yes Menu feed category id
name string No Category name
category_guid string No Stable category guid
name_template string No Template used to build each item's display name
combine_weights boolean No Whether products sharing a strain and brand are combined into a single item with one price entry per sibling
description string No Category description
image MenuImage No Category image
menu_items array (MenuItem) Yes Products in this category
MenuItem

A product on the menu. With combine_weights this represents a strain plus brand group covering several products, so only brand_id and strain_id identify it; per-product ids are on each prices entry.

Property Type Required Description
id string Yes Product id as a string, or a "Strain - Brand - Type" label when the category combines weights. Not a reliable product id -- use prices[].product_id
guid string No Random uuid regenerated whenever the feed cache is rebuilt. Not a stable identifier
name string No Display name, built from the category's name template
description string No Plain-text product description (HTML stripped)
description_html string No Product description including HTML
is_medical_only boolean No Whether the product is medical only
is_recreational_only boolean No Whether the product is recreational only
tag_list array No Product tag names visible to this venue
tag_ids array No Product tag ids, in the same order as tag_list. Discounts match on these ids
pack_size string No Pack size
flower_type string No Flower type
concentrate_type string No Concentrate type
brand string No Product brand name
brand_id integer No Product brand id. Uniform across a combined item, since brand is part of the grouping key
strain string No Product strain name
strain_id integer No Product strain id. Uniform across a combined item, since strain is part of the grouping key
terpenes array No Terpene names
effects array No Effect trait names
flavors array No Flavor trait names
product_type string No Product type name. With combine_weights this is the representative product's type and siblings may differ -- use prices[].product_type_id
product_family string No Product family name
is_marijuana boolean No Whether the product type is marijuana
popularity integer No Bestseller position for this venue, or 9999 when the product is not ranked
tier_name string No Pricing tier name. Present only for weighable products priced from a tier
doh_compliant boolean No DOH compliance flag. Present only in CCRS regions
brand_logo MenuImage No Brand logo
product_image MenuProductImage No DEPRECATED: use product_image_v2. Product cover image
product_image_v2 MenuProductImage No Product cover image
images array (MenuItemImage) No All product images, in position order
prices array (MenuPrice) Yes One entry per sellable variant. Empty when nothing is sellable
thc MenuCannabinoid No THC measure
cbd MenuCannabinoid No CBD measure
thca MenuCannabinoid No THCA measure
cbda MenuCannabinoid No CBDA measure
total_thc MenuCannabinoid No Total THC, computed from THC and THCA when not supplied
total_cbd MenuCannabinoid No Total CBD, computed from CBD and CBDA when not supplied
MenuPrice

A sellable variant of a menu item. Weighable products priced from a tier produce one entry per tier weight; everything else produces one entry per sibling product.

Property Type Required Description
id string Yes Variant key: the product id, or "productId_tierName_weightName" for a tier weight. Not a database id -- use product_id and inventory_id
product_id integer Yes Product id for this variant
inventory_id integer No Inventory SKU id for this variant
product_type_id integer No Product type id for this variant
tier_id integer No Pricing tier id, or null when the SKU is not tiered
tier_weight_id integer No Tier weight id, or null when this entry is not a tier weight
supplier string No Supplier name
supplier_id integer No Supplier id
name string No Product name for this variant
price_cents integer No Recreational price in cents
med_price_cents integer No Medical price in cents, or null when the venue does not use medical pricing
calculated_med_price_cents integer No Derived medical price in cents. Not returned for tier weight entries
last_price_cents integer No Previous price in cents, for strike-through display. Not returned for tier weight entries
unit string No Unit size. Milligram weights are converted to grams
unit_type string No Unit of measure
quantity_on_hand string No E-commerce quantity available, in grams for tier weight entries
equivalent_weight string No Equivalent weight for purchase-limit purposes
equivalent_unit string No Unit of the equivalent weight
discountable boolean No Whether the SKU may be discounted
MenuCannabinoid

A cannabinoid measure. Values are null when the lot has no test result.

Property Type Required Description
current float No Measured value
low float No Low end of the range
high float No High end of the range
unit_type string No Unit the values are expressed in, e.g. percent or milligrams
MenuImage

An image with its rendered size variants. Falls back to a placeholder when none is set.

Property Type Required Description
is_default boolean No Whether this is the placeholder rather than an uploaded image
og string No Original image URL
lg string No Large image URL
md string No Medium image URL
sm string No Small image URL
MenuProductImage

A product cover image with its rendered size variants.

Property Type Required Description
is_default boolean No Whether this is the placeholder rather than an uploaded image
is_product_specific_image boolean No Whether the image belongs to this product rather than being inherited
og string No Original image URL
lg string No Large image URL
md string No Medium image URL
sm string No Small image URL
thumb string No Thumbnail image URL
MenuItemImage

One of a product's images.

Property Type Required Description
name string No Image name
og string No Original image URL
lg string No Large (web) image URL
md string No Medium image URL
thumb string No Thumbnail image URL
is_product_specific_image boolean No Whether the image belongs to this product rather than being inherited
position integer No Sort position

Info

2 endpoints
GET /api/v3/info

List the venues this integrator is connected to

Authenticated with the integrator token alone; no venue token is required and no venue permission is checked. Returns one entry per connected venue, including that venue's token, so this is the call used to discover which venues an integration can reach.

Example

curl -X GET "https://app.posabit.com/api/v3/info" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
500 Internal Server Error

Response Example

{
  "code": 1,
  "venues": [
    {
      "merchant_name": "POSaBIT Demo",
      "merchant_id": 7654,
      "venue_name": "The Pot Shop",
      "active": true,
      "venue_token": "abcdefg12345ABCDEFG123",
      "first_connected_date": "2025-09-26",
      "last_connected_date": "2025-09-29"
    }
  ]
}
GET /api/v3/venue/info

Venue Info

Example

curl -X GET "https://app.posabit.com/api/v3/venue/info" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Response Example

{
  "name": "The Bong Marché",
  "license": "413813",
  "region": "Washington State",
  "locale": "en-US",
  "vertical": "dispensaries",
  "logo_thumb": "https://pbit-staging.s3.amazonaws.com/logos/Venue/thumb_3221_logo.png",
  "logo_medium": "https://pbit-staging.s3.amazonaws.com/logos/Venue/medium_3221_logo.png",
  "telephone": "",
  "address": "1128 8th St, Kirkland, WA",
  "street_address_line_1": "1128 8th St",
  "city": "Kirkland",
  "state": "WA",
  "zip_code": "98000",
  "country": "USA",
  "timezone": "Pacific Time (US & Canada)",
  "latitude": "48.7382",
  "longitude": "-122.47",
  "domains": [],
  "tax_rates": [
    {
      "id": 4285,
      "name": "Cannabis Tax",
      "rate": 3700,
      "tax_rate": "37.0",
      "price_included": true
    },
    {
      "id": 4286,
      "name": "Bellingham, WA",
      "rate": 900,
      "tax_rate": "9.0",
      "price_included": true
    }
  ],
  "payment_methods": [
    "Cash",
    "Debit Card",
    "Other"
  ],
  "venue_settings": {
    "online_order_curbside": "1",
    "online_order_delivery": "1"
  }
}

Models

IntegratorInfoResponse

The authenticated integrator and the venues connected to it.

Property Type Required Description
code integer No Status code, 1 on success
integrator_name string No Integrator name
integrator_id integer No Integrator id
venues array (IntegratorVenue) Yes Connected venues
IntegratorVenue

One venue an integrator is connected to.

Property Type Required Description
venue_id integer Yes Venue id
venue_name string No Venue name
merchant_id integer No Merchant id
merchant_name string No Merchant name
venue_token string No Venue token to pair with the integrator token when calling venue endpoints
active boolean No Whether the connection is active
first_connected_date datetime No First request seen from this pairing
last_connected_date datetime No Most recent request seen from this pairing
VenueInfoResponse

Identity, location and configuration for the authenticated venue.

Property Type Required Description
name string No Venue name
license string No Traceability system license number
region string No Regulatory region name
locale string No Region locale, e.g. en-US
vertical string No The merchant's business vertical
logo_thumb string No Venue logo, thumbnail size. Falls back to a placeholder
logo_medium string No Venue logo, medium size. Falls back to a placeholder
telephone string No Venue telephone number
address string No Street, city and state joined into one line
street_address_line_1 string No Street address
city string No City
state string No State or territory
zip_code string No Postal code
country string No Country
timezone string No Venue timezone, the one ordered_at_local uses on the sales endpoints
latitude float No Latitude
longitude float No Longitude
tax_rates array (VenueTaxRate) No Active tax rates
payment_methods array No Payment methods the venue accepts
venue_settings object No Venue settings as a map of setting name to value
VenueTaxRate

One active tax rate.

Property Type Required Description
id integer Yes Tax id
name string No Tax name
rate integer No Rate in basis points, e.g. 800 for 8%
tax_rate string No Rate as a percentage string, e.g. "8.0"
price_included boolean No Whether the tax is already included in displayed prices

Incoming Orders

3 endpoints
The Online Orders page is where you can view and manage all of your incoming online orders. This page is designed to give you a better overview of all of your incoming orders in one place. You can easily see important information such as the order source, order status, and order details. Additionally, you can filter and sort through your orders to find exactly what you're looking for.
GET /api/v3/incoming_orders

List the venue's current incoming orders

Lists incoming orders that are still "api visible" (delivered/cancelled are excluded), newest first, paginated at 100 records per page. Supports ransack filters under q[...]: customer_id_eq, id_eq, telephone_eq (digits only, no formatting), email_eq, reference_no_eq, first_name_eq, last_name_eq, updated_at_gt, updated_at_lt, and s (sort). Response envelope: { status, code, total_records, page, per_page, incoming_orders: [ { incoming_order: {...}, order_items: [...] } ] }. Each incoming_order matches IncomingOrderResponse.

Parameters

Name Type In Required Description
page integer query No Page number (100 records per page)
q[updated_at_gt] datestring query No Only return incoming orders updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return incoming orders updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[id_eq] integer query No Only return the incoming order with this id
q[customer_id_eq] integer query No Only return incoming orders for this customer id
q[telephone_eq] string query No Only return incoming orders with this telephone (digits only, no formatting)
q[email_eq] string query No Only return incoming orders with this email
q[reference_no_eq] string query No Only return incoming orders with this reference number
q[first_name_eq] string query No Only return incoming orders with this first name
q[last_name_eq] string query No Only return incoming orders with this last name
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/incoming_orders" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
reference_no string No
customer_type string No Default: recreational
terminal_id integer No
customer_id integer No
local_order_id string No
driver_id integer No
vehicle_id integer No
aasm_state string No Default: pending
pos_status string No
source string(30) No Default: online_store
first_name string No
last_name string No
telephone string No
email string No
processed_by string No
saved_order_data text No
created_at datetime Yes
updated_at datetime Yes
processed_at datetime No
order_type string No Default: pickup
requested_payment_method string No
address string No Default:
city string No Default:
state_abbrev string No Default:
zipcode string No Default:
country string No Default: US
lat float No
lng float No
notes text No
internal_notes text No
departured_at datetime No
delivered_at datetime No
requested_date date No
requested_window_start_time string(100) No
requested_window_end_time string(100) No
planned_route text No
delivery_status string No
sts_error text No
total integer No
tip_amount integer No Default: 0
tip_type string No
created_by string No
status_callback text No
payment_prepaid boolean No Default: false
payment_source string(80) No
payment_reference_id string(80) No
payment_amount integer No
proc_time integer No Default: 0
reason string No
payment_verified boolean No Default: false
curbside boolean No Default: false
third_party_request_id integer No
api_id string(64) No
cancellation_notes text No
external_error text No
payment_auth_id string No
tip_calculated integer No Default: 0
processing_fee integer No Default: 0
ip string No
oauth_token text No
otp string No
birthday date No
client_type string(20) No
fulfillment_method string(20) No
fulfillment_sub_type string(30) No
integrator_id integer No
api_version string(10) No
POST /api/v3/incoming_orders

Create an incoming order

Creates an incoming (online / third-party) order for the authenticated venue. The request body must be wrapped under the "incoming_order" key and matches IncomingOrderInput. Server-side behavior: * "total" and item "price" amounts are sent in dollars and stored as integer cents. * order_type "curbside_pickup" is rewritten to "pickup" with curbside = true. * "integrator_id" and "api_version" are derived from the API credentials and cannot be set by the client. * "requested_window_start_time" / "_end_time" may be a plain string or an object { hour, minute, ampm }. On success responds 200 with IncomingOrderResponse; on validation failure responds 422 with { errors: [ "...", ... ] }. The inputs client_type, fulfillment_method, and fulfillment_sub_type are new and will be supported starting June 17, 2026. In order for the new fields to be useful as discount criteria, all clients at the target venue must be updated to version 790 or higher.

Parameters

Name Type In Required Description
body IncomingOrderInput body Yes Order payload, wrapped under the "incoming_order" key

Example

curl -X POST "https://app.posabit.com/api/v3/incoming_orders" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "incoming_order": {
    "order_type": "pickup",
    "first_name": "John",
    "last_name": "Doe",
    "email": "test@posabit.com",
    "telephone": "5551112222",
    "address": "",
    "city": "",
    "state_abbrev": "",
    "zipcode": "",
    "reference_no": "12345-86-123",
    "notes": "Gets free lighter",
    "requested_payment_method": "cash",
    "source": "online_store",
    "order_items_attributes": [
      {
        "product_parent_id": "Treehawk Farms - Wifi OG Pre-Roll 2pk (1g)",
        "product_id": 808542,
        "quantity": 2
      }
    ]
  }
}'

Request Body

{
  "incoming_order": {
    "order_type": "pickup",
    "first_name": "John",
    "last_name": "Doe",
    "email": "test@posabit.com",
    "telephone": "5551112222",
    "address": "",
    "city": "",
    "state_abbrev": "",
    "zipcode": "",
    "reference_no": "12345-86-123",
    "notes": "Gets free lighter",
    "requested_payment_method": "cash",
    "source": "online_store",
    "order_items_attributes": [
      {
        "product_parent_id": "Treehawk Farms - Wifi OG Pre-Roll 2pk (1g)",
        "product_id": 808542,
        "quantity": 2
      }
    ]
  }
}

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
reference_no string No External order number; must be unique per venue
first_name string Yes Customer first name (required unless a POS source)
last_name string Yes Customer last name (required unless a POS source)
email string No Customer email
telephone string No Customer phone (digits only)
customer_id integer No Existing POSaBIT customer id
total float No Order total in dollars (stored as integer cents)
order_type string No Order type
client_type string No Originating client
fulfillment_method string No Fulfillment method
fulfillment_sub_type string No Fulfillment sub type
curbside boolean No DEPRECATED: use fulfillment_sub_type "curbside" instead. Curbside pickup flag.
source string No DEPRECATED: use client_type / fulfillment_method instead. Order source channel (defaults to online_store).
requested_date string No Requested date (YYYY-MM-DD)
requested_payment_method string No Requested payment method
requested_window_start_time string No Requested window start; string or { hour, minute, ampm }
requested_window_end_time string No Requested window end; string or { hour, minute, ampm }
notes string No Order notes (emoji are tokenized server-side)
customer_notes string No Customer-facing notes
address string No Delivery address
city string No Delivery city
state_abbrev string No State abbreviation
zipcode string No ZIP code (max 6 characters)
payment_prepaid boolean No Whether payment was prepaid
payment_source string No Payment source
payment_reference_id string No Payment reference id (unique per venue + payment_source when payment is verified)
payment_amount integer No Payment amount in cents
status_callback string No Status callback URL/token
processed_by string No Who processed the order
delivered_at string No Delivered timestamp (ISO 8601)
order_items_attributes array (IncomingOrderItemInput) No Line items

Response Example

{
  "code": 1,
  "incoming_order": {
    "id": 19800,
    "aasm_state": "pending",
    "reference_no": "12345-86-123",
    "first_name": "John",
    "last_name": "Doe",
    "source": "online_store",
    "order_type": "pickup",
    "notes": "Gets free lighter",
    "delivered_at": null,
    "requested_date": null,
    "requested_window_start_time": {},
    "requested_window_end_time": {},
    "requested_payment_method": "cash",
    "payment_verified": false,
    "curbside": false,
    "created_at": "2024-10-03T19:12:19.000Z",
    "updated_at": "2024-10-03T19:12:19.000Z"
  },
  "order_items": [
    {
      "item_id": 32744,
      "product_id": 808542,
      "sku_id": 115866,
      "manifest_item_id": null,
      "product_name": "Treehawk Farms - Wifi OG Pre-Roll 2pk (1g)",
      "product_brand": "Treehawk Farms",
      "product_strain": "Wifi OG",
      "weight": null,
      "quantity": 2,
      "unit_quantity": "2.0",
      "price": 1000,
      "discount": null,
      "tax": null,
      "tier_weight_id": null,
      "coupons": [],
      "taxes": [],
      "created_at": "2024-10-03T19:12:19.000Z",
      "updated_at": "2024-10-03T19:12:19.000Z"
    }
  ]
}
GET /api/v3/incoming_orders/{id}

Find an incoming order by reference number or id

Looks the order up by reference_no first, then by numeric id. Response: { code, incoming_order: {...}, order_items: [...] }.

Parameters

Name Type In Required Description
id string path Yes Reference number or numeric id

Example

curl -X GET "https://app.posabit.com/api/v3/incoming_orders/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
404 Requested reference number or id not found
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
reference_no string No
customer_type string No Default: recreational
terminal_id integer No
customer_id integer No
local_order_id string No
driver_id integer No
vehicle_id integer No
aasm_state string No Default: pending
pos_status string No
source string(30) No Default: online_store
first_name string No
last_name string No
telephone string No
email string No
processed_by string No
saved_order_data text No
created_at datetime Yes
updated_at datetime Yes
processed_at datetime No
order_type string No Default: pickup
requested_payment_method string No
address string No Default:
city string No Default:
state_abbrev string No Default:
zipcode string No Default:
country string No Default: US
lat float No
lng float No
notes text No
internal_notes text No
departured_at datetime No
delivered_at datetime No
requested_date date No
requested_window_start_time string(100) No
requested_window_end_time string(100) No
planned_route text No
delivery_status string No
sts_error text No
total integer No
tip_amount integer No Default: 0
tip_type string No
created_by string No
status_callback text No
payment_prepaid boolean No Default: false
payment_source string(80) No
payment_reference_id string(80) No
payment_amount integer No
proc_time integer No Default: 0
reason string No
payment_verified boolean No Default: false
curbside boolean No Default: false
third_party_request_id integer No
api_id string(64) No
cancellation_notes text No
external_error text No
payment_auth_id string No
tip_calculated integer No Default: 0
processing_fee integer No Default: 0
ip string No
oauth_token text No
otp string No
birthday date No
client_type string(20) No
fulfillment_method string(20) No
fulfillment_sub_type string(30) No
integrator_id integer No
api_version string(10) No

Response Example

{
  "code": 1,
  "incoming_order": {
    "id": 19798,
    "aasm_state": "processing",
    "reference_no": "3221-1727814981-bb1314bf",
    "first_name": "A",
    "last_name": "A",
    "source": "posabit_v2",
    "order_type": "pickup",
    "notes": null,
    "delivered_at": null,
    "requested_date": null,
    "requested_window_start_time": {},
    "requested_window_end_time": {},
    "requested_payment_method": "cash",
    "payment_verified": false,
    "curbside": false,
    "created_at": "2024-10-01T20:39:23.000Z",
    "updated_at": "2024-10-01T20:41:19.000Z"
  },
  "order_items": [
    {
      "item_id": 32713,
      "product_id": 800583,
      "sku_id": 107907,
      "manifest_item_id": null,
      "product_name": "'oh' McDonald Farms - Nuken (1g)",
      "product_brand": "'oh' McDonald Farms",
      "product_strain": "Nuken",
      "weight": "1.1g",
      "quantity": 1,
      "unit_quantity": "1.1",
      "price": 1500,
      "discount": 0,
      "tax": 473,
      "tier_weight_id": null,
      "coupons": [],
      "taxes": [],
      "created_at": "2024-10-01T20:36:21.000Z",
      "updated_at": "2024-10-01T20:36:21.000Z"
    }
  ]
}

Models

IncomingOrderInput

Request body for creating an incoming order (wrapped under the "incoming_order" key).

Property Type Required Description
reference_no string No External order number; must be unique per venue
first_name string Yes Customer first name (required unless a POS source)
last_name string Yes Customer last name (required unless a POS source)
email string No Customer email
telephone string No Customer phone (digits only)
customer_id integer No Existing POSaBIT customer id
total float No Order total in dollars (stored as integer cents)
order_type string No Order type
Allowed values: pickup, in_store, delivery, saved_order, kiosk, curbside_pickup
client_type string No Originating client
Allowed values: web, app, kiosk, pos
fulfillment_method string No Fulfillment method
Allowed values: pickup, delivery, in_store
fulfillment_sub_type string No Fulfillment sub type
Allowed values: drive_thru, curbside, in_store
curbside boolean No DEPRECATED: use fulfillment_sub_type "curbside" instead. Curbside pickup flag.
source string No DEPRECATED: use client_type / fulfillment_method instead. Order source channel (defaults to online_store).
requested_date string No Requested date (YYYY-MM-DD)
requested_payment_method string No Requested payment method
requested_window_start_time string No Requested window start; string or { hour, minute, ampm }
requested_window_end_time string No Requested window end; string or { hour, minute, ampm }
notes string No Order notes (emoji are tokenized server-side)
customer_notes string No Customer-facing notes
address string No Delivery address
city string No Delivery city
state_abbrev string No State abbreviation
zipcode string No ZIP code (max 6 characters)
payment_prepaid boolean No Whether payment was prepaid
payment_source string No Payment source
payment_reference_id string No Payment reference id (unique per venue + payment_source when payment is verified)
payment_amount integer No Payment amount in cents
status_callback string No Status callback URL/token
processed_by string No Who processed the order
delivered_at string No Delivered timestamp (ISO 8601)
order_items_attributes array (IncomingOrderItemInput) No Line items
IncomingOrderItemInput

A line item within an incoming order (order_items_attributes).

Property Type Required Description
id integer No Existing line-item id (for updates)
product_id integer No POSaBIT product id
product_name string Yes Product name
product_brand string No Product brand
product_strain string No Product strain
quantity integer Yes Quantity (greater than 0 and less than 100)
price integer No Unit price in cents (often derived from the product)
weight string No Weight
tier_weight_id integer No Tier weight id
order_item_coupons_attributes array (OrderItemCouponInput) No Coupons applied to the item
order_item_taxes_attributes array (OrderItemTaxInput) No Taxes applied to the item
OrderItemCouponInput

A coupon applied to a line item (order_item_coupons_attributes). Entries with a blank pos_coupon_id are rejected.

Property Type Required Description
pos_coupon_id integer Yes POS coupon id
order_item_id integer No Order item id
ref_name string No Reference name
ref_number string No Reference number
amount integer No Discount amount in cents
OrderItemTaxInput

A tax applied to a line item (order_item_taxes_attributes).

Property Type Required Description
tax_id integer No Tax id
order_item_id integer No Order item id
amount integer No Tax amount in cents
IncomingOrderResponse

Incoming order as returned by the API. show/create return { code, incoming_order: {...}, order_items: [...] }; index nests the same pair per element under incoming_orders[]. The order_items array is a sibling of incoming_order, not nested inside it.

Property Type Required Description
id integer No Order id
aasm_state string No Workflow state (pending, processing, completed, en_route, delivered, cancelled, ...)
reference_no string No External order number
first_name string No Customer first name
last_name string No Customer last name
source string No DEPRECATED: superseded by client_type / fulfillment_method. Order source channel.
order_type string No Order type
client_type string No Originating client
fulfillment_method string No Fulfillment method
fulfillment_sub_type string No Fulfillment sub type
integrator_id integer No Integrator id (server-derived)
api_version string No API version that created the order
address string No Delivery address
city string No Delivery city
state_abbrev string No State abbreviation
zipcode string No ZIP code
notes string No Order notes
delivered_at string No Delivered timestamp
requested_date string No Requested date
requested_window_start_time string No Requested window start
requested_window_end_time string No Requested window end
requested_payment_method string No Requested payment method
payment_verified boolean No Whether payment is verified
curbside boolean No DEPRECATED: superseded by fulfillment_sub_type. Curbside flag.
created_at string No Created timestamp
updated_at string No Updated timestamp
order_items array (IncomingOrderItemResponse) No Line items (returned as a sibling array)
IncomingOrderItemResponse

A line item in an incoming order response.

Property Type Required Description
item_id integer No Line item id
product_id integer No Product id
sku_id integer No Inventory SKU id
manifest_item_id integer No Manifest item id
product_name string No Product name
product_brand string No Product brand
product_strain string No Product strain
weight string No Weight
quantity integer No Quantity
unit_quantity float No Unit quantity
price integer No Unit price in cents
discount integer No Discount in cents
tax integer No Tax in cents
tier_weight_id integer No Tier weight id
coupons array No Applied coupons
taxes array No Applied taxes
created_at string No Created timestamp
updated_at string No Updated timestamp

Incoming Quotes

6 endpoints
PUT /api/v3/incoming_quotes/{id}/items

Replace an incoming quote's line items

Replaces all line items on the quote and recalculates totals. Body is wrapped under the "quote" key and contains an "items" array (QuoteItemsInput). Each item's unit + unit_type are combined into a weight (e.g. "3.5g"). Responds with QuoteResponse.

Parameters

Name Type In Required Description
id string path Yes Quote reference number
body QuoteItemsInput body Yes Items payload, wrapped under the "quote" key

Example

curl -X PUT "https://app.posabit.com/api/v3/incoming_quotes/{id}/items" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters

Response Fields

Field Type Required Description
items array (QuoteItemInput) Yes Replacement line items
POST /api/v3/incoming_quotes/{id}/ach_payment_auth

Authorize an ACH (PosaBIT Pay) payment for a quote

Requests a Hypur / PosaBIT Pay payment authorization for the quote. Body is wrapped under the "payment" key (QuotePaymentAuthInput).

Parameters

Name Type In Required Description
id string path Yes Quote reference number
body QuotePaymentAuthInput body Yes Payment authorization payload, wrapped under the "payment" key

Example

curl -X POST "https://app.posabit.com/api/v3/incoming_quotes/{id}/ach_payment_auth" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters

Response Fields

Field Type Required Description
pac string No Hypur PAC (personal access code)
code string No Authorization code
redirect_uri string No Redirect URI
PUT /api/v3/incoming_quotes/{id}/finalize

Finalize an incoming quote (submits an order)

Converts the quote into an Incoming::Order. For PosaBIT Pay quotes this also captures the previously authorized ACH payment. Responds with QuoteResponse, whose incoming_order_id is populated on success.

Parameters

Name Type In Required Description
id string path Yes Quote reference number

Example

curl -X PUT "https://app.posabit.com/api/v3/incoming_quotes/{id}/finalize" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
POST /api/v3/incoming_quotes

Create an incoming quote

Creates a price quote (cart pre-calculation) for the authenticated venue. The request body must be wrapped under the "quote" key and matches QuoteInput, with nested fulfillment / customer / payment objects and an items array. Server-side behavior: * reference_no is generated when blank; ip, integrator_id and api_version are derived from the request/credentials and cannot be set by the client. * customer.customer_id, when present, links an existing customer. * monetary amounts (tip_amount, processing_fee, item price/discount, totals) are in integer cents. * totals and taxes are (re)calculated server-side after save. Responds 200 with { code, quote: {...} } (QuoteResponse); on validation failure responds 422 with { errors: [ "...", ... ] }.

Parameters

Name Type In Required Description
body QuoteInput body Yes Quote payload, wrapped under the "quote" key

Example

curl -X POST "https://app.posabit.com/api/v3/incoming_quotes" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "quote": {
    "incoming_order_id": null,
    "venue_id": 3221,
    "fulfillment": {
      "source": "posabit_v2",
      "order_type": "pickup",
      "requested_date": null,
      "requested_window_start_time": null,
      "requested_window_end_time": null,
      "tip_amount": 0,
      "tip_type": null,
      "processing_fee": 300,
      "tip_calculated": 0,
      "delivery_address": {
        "address": "",
        "city": "",
        "state_abbrev": "",
        "zipcode": ""
      }
    },
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "test@posabit.com",
      "telephone": "5551112222",
      "customer_type": "recreational"
    },
    "payment": {
      "requested_payment_method": "cash"
    },
    "items": [
      {
        "sku_id": 107907,
        "quantity": 1,
        "product_id": 800583,
        "name": "'oh' McDonald Farms - Nuken (1g)",
        "unit_type": "g",
        "unit": "1.1",
        "variant_id": "k107907",
        "quantity_on_hand": 30,
        "test_results": {
          "thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "cbd": {
            "current": 10,
            "low": 10,
            "high": 10,
            "unit_type": "%"
          },
          "thca": null,
          "cbda": null,
          "total_thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "total_cbd": null,
          "thcv": null,
          "cbdv": null,
          "cbc": null,
          "cbca": null,
          "cbcv": null,
          "cbn": null,
          "cbg": null,
          "cbga": null,
          "cbgv": null
        },
        "terpene_results": [],
        "product_image": {
          "is_product_specific_image": true,
          "lg": "https://pbit-staging.s3.amazonaws.com/images/image/210/large_image.jpg",
          "md": "https://pbit-staging.s3.amazonaws.com/images/image/210/medium_image.jpg"
        },
        "discount": 0,
        "price": 1500,
        "discount_ids": []
      }
    ]
  }
}'

Request Body

{
  "quote": {
    "incoming_order_id": null,
    "venue_id": 3221,
    "fulfillment": {
      "source": "posabit_v2",
      "order_type": "pickup",
      "requested_date": null,
      "requested_window_start_time": null,
      "requested_window_end_time": null,
      "tip_amount": 0,
      "tip_type": null,
      "processing_fee": 300,
      "tip_calculated": 0,
      "delivery_address": {
        "address": "",
        "city": "",
        "state_abbrev": "",
        "zipcode": ""
      }
    },
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "test@posabit.com",
      "telephone": "5551112222",
      "customer_type": "recreational"
    },
    "payment": {
      "requested_payment_method": "cash"
    },
    "items": [
      {
        "sku_id": 107907,
        "quantity": 1,
        "product_id": 800583,
        "name": "'oh' McDonald Farms - Nuken (1g)",
        "unit_type": "g",
        "unit": "1.1",
        "variant_id": "k107907",
        "quantity_on_hand": 30,
        "test_results": {
          "thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "cbd": {
            "current": 10,
            "low": 10,
            "high": 10,
            "unit_type": "%"
          },
          "thca": null,
          "cbda": null,
          "total_thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "total_cbd": null,
          "thcv": null,
          "cbdv": null,
          "cbc": null,
          "cbca": null,
          "cbcv": null,
          "cbn": null,
          "cbg": null,
          "cbga": null,
          "cbgv": null
        },
        "terpene_results": [],
        "product_image": {
          "is_product_specific_image": true,
          "lg": "https://pbit-staging.s3.amazonaws.com/images/image/210/large_image.jpg",
          "md": "https://pbit-staging.s3.amazonaws.com/images/image/210/medium_image.jpg"
        },
        "discount": 0,
        "price": 1500,
        "discount_ids": []
      }
    ]
  }
}

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
reference_no string No Quote reference number (generated when blank)
fulfillment QuoteFulfillmentInput No Fulfillment details
customer QuoteCustomerInput No Customer details
payment QuotePaymentInput No Payment details
items array (QuoteItemInput) No Line items

Response Example

{
  "code": 1,
  "quote": {
    "reference_no": "3221-1727982977-3f59c5f1",
    "incoming_order_id": null,
    "venue_id": 3221,
    "fulfillment": {
      "source": "posabit_v2",
      "order_type": "pickup",
      "requested_date": null,
      "requested_window_start_time": null,
      "requested_window_end_time": null,
      "tip_amount": 0,
      "tip_type": null,
      "processing_fee": 300,
      "tip_calculated": 0,
      "delivery_address": {
        "address": "",
        "city": "",
        "state_abbrev": "",
        "zipcode": ""
      }
    },
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "test@posabit.com",
      "telephone": "5551112222",
      "customer_type": "recreational"
    },
    "payment": {
      "requested_payment_method": "cash"
    },
    "items": [
      {
        "sku_id": 107907,
        "quantity": 1,
        "product_id": 800583,
        "name": "'oh' McDonald Farms - Nuken (1g)",
        "unit_type": "g",
        "unit": "1.1",
        "variant_id": "k107907",
        "quantity_on_hand": 30,
        "test_results": {
          "thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "cbd": {
            "current": 10,
            "low": 10,
            "high": 10,
            "unit_type": "%"
          },
          "thca": null,
          "cbda": null,
          "total_thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "total_cbd": null,
          "thcv": null,
          "cbdv": null,
          "cbc": null,
          "cbca": null,
          "cbcv": null,
          "cbn": null,
          "cbg": null,
          "cbga": null,
          "cbgv": null
        },
        "terpene_results": [],
        "product_image": {
          "is_product_specific_image": true,
          "lg": "https://pbit-staging.s3.amazonaws.com/images/image/210/large_image.jpg",
          "md": "https://pbit-staging.s3.amazonaws.com/images/image/210/medium_image.jpg"
        },
        "discount": 0,
        "price": 1500,
        "discount_ids": []
      }
    ],
    "taxes": [
      {
        "tax_id": 4286,
        "name": "Bellingham, WA",
        "price_included": true,
        "amount": 93,
        "tax_rate": "9.0"
      },
      {
        "tax_id": 4285,
        "name": "Cannabis Tax",
        "price_included": true,
        "amount": 380,
        "tax_rate": "37.0"
      }
    ],
    "totals": {
      "discount_ids": [],
      "subtotal": 1500,
      "discount": 0,
      "tax": 473,
      "total": 1500
    },
    "limits": {
      "exceeded_limits": [],
      "sum_per_limit": {
        "recreational_flower": 1.1
      }
    }
  }
}
GET /api/v3/incoming_quotes/{id}

Find an incoming quote by reference number

Looks the quote up by reference_no. Responds with { code, quote: {...} } matching QuoteResponse, or { error: "Quote not found" } when missing.

Parameters

Name Type In Required Description
id string path Yes Quote reference number

Example

curl -X GET "https://app.posabit.com/api/v3/incoming_quotes/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
404 Requested reference number or id not found
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
customer_type string No Default: recreational
reference_no string No
subtotal integer No Default: 0
tax integer No Default: 0
discount integer No Default: 0
total integer No Default: 0
tip_amount integer No Default: 0
tip_type string No
created_at datetime Yes
updated_at datetime Yes
telephone string No
customer_id integer No
order_type string No Default: pickup
address string No Default:
city string No Default:
state_abbrev string No Default:
zipcode string No Default:
country string No Default: US
last_name string No
first_name string No
email string No
payment_source string No
requested_payment_method string No
source string No Default: posabit_v2
requested_date date No
requested_window_start_time time No
requested_window_end_time time No
payment_auth_id string No
tip_calculated integer No Default: 0
processing_fee integer No Default: 0
payment_amount integer No Default: 0
notes text No
ip string No
oauth_token text No
otp string No
birthday date No
client_type string(20) No
fulfillment_method string(20) No
fulfillment_sub_type string(30) No
integrator_id integer No
api_version string(10) No

Response Example

{
  "code": 1,
  "quote": {
    "reference_no": "3221-1727814981-bb1314bf",
    "incoming_order_id": null,
    "venue_id": 3221,
    "fulfillment": {
      "source": "posabit_v2",
      "order_type": "pickup",
      "requested_date": null,
      "requested_window_start_time": null,
      "requested_window_end_time": null,
      "tip_amount": 0,
      "tip_type": null,
      "processing_fee": 300,
      "tip_calculated": 0,
      "delivery_address": {
        "address": "",
        "city": "",
        "state_abbrev": "",
        "zipcode": ""
      }
    },
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "test@posabit.com",
      "telephone": "5551111111",
      "customer_type": "recreational"
    },
    "payment": {
      "requested_payment_method": "cash"
    },
    "items": [
      {
        "sku_id": 107907,
        "quantity": 1,
        "product_id": 800583,
        "name": "'oh' McDonald Farms - Nuken (1g)",
        "unit_type": "g",
        "unit": "1.1",
        "variant_id": "k107907",
        "quantity_on_hand": 30,
        "test_results": {
          "thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "cbd": {
            "current": 10,
            "low": 10,
            "high": 10,
            "unit_type": "%"
          },
          "thca": null,
          "cbda": null,
          "total_thc": {
            "current": 4.2,
            "low": 4.2,
            "high": 4.2,
            "unit_type": "%"
          },
          "total_cbd": null,
          "thcv": null,
          "cbdv": null,
          "cbc": null,
          "cbca": null,
          "cbcv": null,
          "cbn": null,
          "cbg": null,
          "cbga": null,
          "cbgv": null
        },
        "terpene_results": [],
        "product_image": {
          "is_product_specific_image": true,
          "lg": "https://pbit-staging.s3.amazonaws.com/images/image/210/large_image.jpg",
          "md": "https://pbit-staging.s3.amazonaws.com/images/image/210/medium_image.jpg"
        },
        "discount": 0,
        "price": 1500,
        "discount_ids": []
      }
    ],
    "taxes": [],
    "totals": {
      "discount_ids": [],
      "subtotal": 1500,
      "discount": 0,
      "tax": 473,
      "total": 1500
    },
    "limits": {
      "exceeded_limits": [],
      "sum_per_limit": {
        "recreational_flower": 1.1
      }
    }
  }
}
PATCH /api/v3/incoming_quotes/{id}

Update an incoming quote

Updates the quote's fulfillment / customer / payment details and recalculates totals. Body is wrapped under the "quote" key (QuoteInput). Responds with QuoteResponse.

Parameters

Name Type In Required Description
id string path Yes Quote reference number
body QuoteInput body Yes Quote payload, wrapped under the "quote" key

Example

curl -X PATCH "https://app.posabit.com/api/v3/incoming_quotes/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters

Response Fields

Field Type Required Description
reference_no string No Quote reference number (generated when blank)
fulfillment QuoteFulfillmentInput No Fulfillment details
customer QuoteCustomerInput No Customer details
payment QuotePaymentInput No Payment details
items array (QuoteItemInput) No Line items

Models

QuoteInput

Request body for creating/updating a quote (wrapped under the "quote" key).

Property Type Required Description
reference_no string No Quote reference number (generated when blank)
fulfillment QuoteFulfillmentInput No Fulfillment details
customer QuoteCustomerInput No Customer details
payment QuotePaymentInput No Payment details
items array (QuoteItemInput) No Line items
QuoteFulfillmentInput

Fulfillment block of a quote request.

Property Type Required Description
source string No DEPRECATED: use client_type / fulfillment_method instead. Order source channel.
order_type string No Order type (e.g. pickup, delivery, in_store, kiosk)
client_type string No Originating client
Allowed values: web, app, kiosk, pos
fulfillment_method string No Fulfillment method
Allowed values: pickup, delivery, in_store
fulfillment_sub_type string No Fulfillment sub type
Allowed values: drive_thru, curbside, in_store
requested_date string No Requested date (YYYY-MM-DD)
requested_window_start_time string No Requested pickup/delivery window start time
requested_window_end_time string No Requested pickup/delivery window end time
tip_amount integer No Tip amount in cents
tip_type string No Tip type
processing_fee integer No Processing fee in cents
delivery_address QuoteDeliveryAddressInput No Delivery address
QuoteDeliveryAddressInput

Delivery address within a quote's fulfillment block.

Property Type Required Description
address string No Street address
city string No City
state_abbrev string No State abbreviation
zipcode string No ZIP code
QuoteCustomerInput

Customer block of a quote request.

Property Type Required Description
customer_id integer No Existing POSaBIT customer id (links the quote to that customer)
first_name string No Customer first name
last_name string No Customer last name
email string No Customer email
telephone string No Customer phone
customer_type string No Customer type (e.g. recreational, medical)
QuotePaymentInput

Payment block of a quote request.

Property Type Required Description
requested_payment_method string No Requested payment method
QuoteItemInput

A line item in a quote request (under quote.items). Supply product_id or sku_id.

Property Type Required Description
product_id integer No POSaBIT product id
sku_id integer No Inventory SKU id (mapped to inventory_sku_id)
unit string No Unit amount, combined with unit_type into a weight (e.g. "3.5")
unit_type string No Unit type, e.g. "g"
quantity integer Yes Quantity (greater than 0)
QuoteItemsInput

Body for the items endpoint (wrapped under the "quote" key).

Property Type Required Description
items array (QuoteItemInput) Yes Replacement line items
QuotePaymentAuthInput

Body for ach_payment_auth (wrapped under the "payment" key).

Property Type Required Description
pac string No Hypur PAC (personal access code)
code string No Authorization code
redirect_uri string No Redirect URI
QuoteResponse

Quote as returned by the API. Every endpoint responds with { code, quote: {...} }; this model is the "quote" object.

Property Type Required Description
reference_no string No Quote reference number
incoming_order_id integer No Resulting order id (populated after finalize)
venue_id integer No Venue id
integrator_id integer No Integrator id (server-derived)
api_version string No API version that created the quote
fulfillment QuoteFulfillmentResponse No Fulfillment details
customer QuoteCustomerResponse No Customer details
payment QuotePaymentResponse No Payment details
items array (QuoteItemResponse) No Line items
taxes array (QuoteTaxResponse) No Tax summaries
totals QuoteTotalsResponse No Order totals
limits QuoteLimitsResponse No Purchase-limit evaluation
QuoteFulfillmentResponse

Fulfillment block of a quote response.

Property Type Required Description
source string No DEPRECATED: superseded by client_type / fulfillment_method. Order source channel.
order_type string No Order type
client_type string No Originating client
fulfillment_method string No Fulfillment method
fulfillment_sub_type string No Fulfillment sub type
requested_date string No Requested date
requested_window_start_time string No Requested window start time
requested_window_end_time string No Requested window end time
tip_amount integer No Tip amount in cents
tip_type string No Tip type
processing_fee integer No Processing fee in cents
tip_calculated integer No Calculated tip in cents
delivery_address QuoteDeliveryAddressResponse No Delivery address
QuoteDeliveryAddressResponse

Delivery address within a quote response.

Property Type Required Description
address string No Street address
city string No City
state_abbrev string No State abbreviation
zipcode string No ZIP code
QuoteCustomerResponse

Customer block of a quote response.

Property Type Required Description
first_name string No Customer first name
last_name string No Customer last name
email string No Customer email
telephone string No Customer phone
customer_type string No Customer type
QuotePaymentResponse

Payment block of a quote response.

Property Type Required Description
requested_payment_method string No Requested payment method
QuoteItemResponse

A line item in a quote response.

Property Type Required Description
sku_id integer No Inventory SKU id
product_id integer No Product id
variant_id integer No Variant id
name string No Product name
unit string No Unit amount
unit_type string No Unit type
quantity integer No Quantity
quantity_on_hand float No Quantity on hand
price integer No Price in cents
discount integer No Total discount on this line in cents, the sum of the discount_list amounts
discount_ids array No Ids of the discounts applied to this line, matching the coupons endpoint. Same set as discount_list without the breakdown
discount_list array (QuoteItemDiscountResponse) No The discounts applied to this line, one entry per discount, with what each took off
product_image QuoteItemImageResponse No Product image URLs
test_results QuoteItemTestResultsResponse No Cannabinoid measures for the lot behind this line
terpene_results array (QuoteItemTerpeneResponse) No Terpene measures for the lot behind this line. Null rather than an empty array when the lot has no terpene data at all
QuoteItemDiscountResponse

One discount applied to a line item.

Property Type Required Description
coupon_id integer No Discount id, matching the coupons endpoint
coupon_name string No Discount display name, falling back to its internal name
amount integer No Amount this discount took off the line, in cents
QuoteItemImageResponse

Product image for a line item.

Property Type Required Description
is_product_specific_image boolean No Whether the image belongs to this product rather than being inherited
lg string No Large image URL
md string No Medium image URL
QuoteItemTestResultsResponse

Cannabinoid measures for the lot behind a line item. Every key below is always present; the value is null when the lot has no result for that cannabinoid.

Property Type Required Description
thc QuoteItemMeasureResponse No THC measure, or null when the venue's menu does not display it
thca QuoteItemMeasureResponse No THCA measure, or null when the venue's menu does not display it
total_thc QuoteItemMeasureResponse No TOTAL THC measure, or null when the venue's menu does not display it
thcv QuoteItemMeasureResponse No THCV measure, or null when the venue's menu does not display it
cbd QuoteItemMeasureResponse No CBD measure, or null when the venue's menu does not display it
cbda QuoteItemMeasureResponse No CBDA measure, or null when the venue's menu does not display it
total_cbd QuoteItemMeasureResponse No TOTAL CBD measure, or null when the venue's menu does not display it
cbdv QuoteItemMeasureResponse No CBDV measure, or null when the venue's menu does not display it
cbc QuoteItemMeasureResponse No CBC measure, or null when the venue's menu does not display it
cbca QuoteItemMeasureResponse No CBCA measure, or null when the venue's menu does not display it
cbcv QuoteItemMeasureResponse No CBCV measure, or null when the venue's menu does not display it
cbn QuoteItemMeasureResponse No CBN measure, or null when the venue's menu does not display it
cbg QuoteItemMeasureResponse No CBG measure, or null when the venue's menu does not display it
cbga QuoteItemMeasureResponse No CBGA measure, or null when the venue's menu does not display it
cbgv QuoteItemMeasureResponse No CBGV measure, or null when the venue's menu does not display it
QuoteItemMeasureResponse

One cannabinoid measure. The object is present whenever the venue's menu is configured to display that cannabinoid; its values are null when the lot has no result.

Property Type Required Description
current float No Measured value
low float No Low end of the range
high float No High end of the range
unit_type string No Unit the values are expressed in, e.g. % or mg
QuoteItemTerpeneResponse

One terpene measure for a line item.

Property Type Required Description
name string No Terpene name, or "Total Terpenes" for the combined figure
current string No Measured value, formatted to two decimal places. A string, unlike the cannabinoid measures
low string No Low end of the range, formatted the same way
high string No High end of the range, formatted the same way
unit_type string No Unit the values are expressed in
QuoteTaxResponse

A tax summary line in a quote response.

Property Type Required Description
tax_id integer No Tax id
name string No Tax name
price_included boolean No Whether the tax is included in the price
amount integer No Tax amount in cents
tax_rate float No Tax rate
QuoteTotalsResponse

Totals block of a quote response (amounts in cents).

Property Type Required Description
discount_ids array No Ids of applied discounts
subtotal integer No Subtotal in cents
discount integer No Discount in cents
tax integer No Tax in cents
total integer No Total in cents
QuoteLimitsResponse

Purchase-limit evaluation for the quote.

Property Type Required Description
exceeded_limits array No Limits that were exceeded
sum_per_limit object No Summed quantity per limit category
exceeded_quantities array No Quantities that exceeded a limit

Coupons

5 endpoints
GET /api/v3/venue/coupons/{coupon_id}/coupon_customers

List customers with access to a customer specific coupon

Parameters

Name Type In Required Description
coupon_id integer path Yes Coupon ID
page integer query No Page Number
per_page integer query No Results per page (default 1000)

Example

curl -X GET "https://app.posabit.com/api/v3/venue/coupons/{coupon_id}/coupon_customers" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized
404 Not Found
POST /api/v3/venue/coupons/{coupon_id}/coupon_customers

Give a customer access to a customer specific coupon

Post JSON in body {"coupon_customer": {"customer_id": 123, "notes": "Referral reward", "expires_at": "2026-12-31T23:59:59Z"}}

Parameters

Name Type In Required Description
coupon_id integer path Yes Coupon ID
body coupon_customer body Yes JSON formatted body

Example

curl -X POST "https://app.posabit.com/api/v3/venue/coupons/{coupon_id}/coupon_customers" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
201 Success
401 Unauthorized
404 Not Found
422 Unprocessable Entity
PATCH /api/v3/venue/coupons/{coupon_id}/coupon_customers/{id}

Update a customer's access to a customer specific coupon

Patch JSON in body {"coupon_customer": {"active": false, "notes": "Updated note", "expires_at": "2026-12-31T23:59:59Z"}}

Parameters

Name Type In Required Description
coupon_id integer path Yes Coupon ID
id integer path Yes CouponCustomer ID
body coupon_customer body Yes JSON formatted body

Example

curl -X PATCH "https://app.posabit.com/api/v3/venue/coupons/{coupon_id}/coupon_customers/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
401 Unauthorized
404 Not Found
422 Unprocessable Entity
GET /api/v3/venue/coupons

Get all available coupons for a venue

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return coupons updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return coupons updated before this time, e.g. q[updated_at_lt]='2019-07-01'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/coupons" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Example

{
  "code": 1,
  "total_records": 67,
  "current_page": 1,
  "total_pages": 67,
  "per_page": 1,
  "coupons": [
    {
      "id": 47667,
      "kind": "discount",
      "applies_to": "item",
      "auto_apply": true,
      "allow_stacking": true,
      "name": "Thirsty Thursday - 10% Off",
      "active": true,
      "points": "0",
      "redeemable_once": false,
      "manager_approve": false,
      "barcode": "460884203",
      "venue_id": 3264,
      "external_ref": null,
      "amount": 1000,
      "coupon_type": "percent",
      "rounding": "none",
      "expires_at": null,
      "starts_at": null,
      "image": {
        "url": "https://pbit-qa.s3.amazonaws.com/coupons/47667/barcode.png"
      },
      "background_image": {
        "url": "https://pbit-qa.s3.amazonaws.com/coupon_backgrounds/47667/background.png",
        "thumb": {
          "url": "https://pbit-qa.s3.amazonaws.com/coupon_backgrounds/47667/thumb_background.png"
        },
        "half_page": {
          "url": "https://pbit-qa.s3.amazonaws.com/coupon_backgrounds/47667/half_page_background.png"
        }
      },
      "payment_method_id": null,
      "payment_method_total": 0,
      "order_type": null,
      "order_source": "",
      "product_type_ids": [
        "",
        "4446"
      ],
      "product_ids": [
        ""
      ],
      "product_tag_ids": [
        ""
      ],
      "product_brand_ids": [
        ""
      ],
      "product_strain_ids": [
        ""
      ],
      "customer_tag_ids": [
        ""
      ],
      "manifest_item_ids": [
        ""
      ],
      "supplier_ids": [
        ""
      ],
      "venue_room_ids": [
        ""
      ],
      "one_item": false,
      "customer_type": "",
      "customer_level_ids": [
        ""
      ],
      "birthday": false,
      "product_weights": [
        ""
      ],
      "min_quantity": null,
      "min_amount": 0,
      "min_weight": "0.0",
      "min_weight_unit": null,
      "days": [
        "",
        "thu"
      ],
      "hours": null,
      "hour_start": "",
      "hour_end": "",
      "created_by": null,
      "created_at": "2019-10-21T15:55:35.000Z",
      "updated_at": "2021-01-25T19:53:14.000Z",
      "clicks": 1,
      "inventory_tier_ids": [
        ""
      ],
      "get_quantity": 1,
      "get_product_type_ids": [
        ""
      ],
      "get_product_ids": [
        ""
      ],
      "get_product_tag_ids": [
        ""
      ],
      "get_product_brand_ids": [
        ""
      ],
      "get_product_strain_ids": [
        ""
      ],
      "get_supplier_ids": null,
      "get_venue_room_ids": null,
      "get_manifest_item_ids": null,
      "get_product_weights": null,
      "get_inventory_tier_ids": null,
      "tier_weights": null,
      "profile_type": "any",
      "first_sale": false,
      "is_private": false,
      "external_redemption_failure_count": 0
    }
  ]
}
GET /api/v3/venue/coupons/{id}

Get a single discount

Parameters

Name Type In Required Description
id integer path Yes Discount id

Example

curl -X GET "https://app.posabit.com/api/v3/venue/coupons/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Models

CouponResponse

A single discount.

Property Type Required Description
coupon Coupon Yes The discount
CouponListResponse

Paginated list of the venue's discounts.

Property Type Required Description
code integer No Legacy status field, always 1
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
coupons array (Coupon) Yes Discounts
Coupon

A discount. The *_ids arrays are the qualifying criteria: a sale line matches when it satisfies every criterion that is set, and criteria left empty impose no restriction. The ids in them are the same ids the other v3 endpoints return -- product tags from product_tags, brands from product_brands, and so on -- and the menu feed reports them per item and per price so a caller can work out which discounts apply.

Property Type Required Description
id integer Yes Discount id
kind string No discount or reward
applies_to string No Whether the discount applies to the order or to individual items
auto_apply boolean No Whether the discount applies without being asked for
allow_stacking boolean No Whether the discount may combine with others
name string No Internal name
active boolean No Whether the discount is active
points string No Loyalty points cost
redeemable_once boolean No Whether a customer may redeem it only once
manager_approve boolean No Whether a manager must approve the redemption
barcode string No Scannable barcode
owner_id integer No Id of the venue or merchant that owns the discount
owner_type string No Venue or Merchant
external_ref string No Identifier in an external system
amount integer No Discount amount, in cents or basis points depending on coupon_type
coupon_type string No How amount is interpreted, e.g. percent or fixed
rounding string No Rounding rule applied to the result
expires_at datetime No When the discount stops being valid
starts_at datetime No When the discount becomes valid
image string No Discount image URL
background_image string No Background image URL
payment_method_id integer No Payment method the discount requires
payment_method_total integer No Amount that must be paid with that method, in cents
order_type string No Order type the discount is limited to
order_source string No Order source the discount is limited to
product_type_ids array No Qualifying criterion: product types the discount applies to. Empty means no restriction
product_ids array No Qualifying criterion: products the discount applies to. Empty means no restriction
product_tag_ids array No Qualifying criterion: product tags the discount applies to. Empty means no restriction
product_brand_ids array No Qualifying criterion: product brands the discount applies to. Empty means no restriction
product_strain_ids array No Qualifying criterion: product strains the discount applies to. Empty means no restriction
customer_tag_ids array No Customer tags the discount is limited to
manifest_item_ids array No Qualifying criterion: lots the discount applies to. Empty means no restriction
supplier_ids array No Qualifying criterion: suppliers the discount applies to. Empty means no restriction
venue_room_ids array No Qualifying criterion: venue rooms the discount applies to. Empty means no restriction
one_item boolean No Whether the discount applies to a single item only
customer_type string No Customer type the discount is limited to
customer_level_ids array No Loyalty levels the discount is limited to
birthday boolean No Whether it applies only around the customer's birthday
product_weights array No Qualifying criterion: display weights the discount applies to. Empty means no restriction
min_quantity integer No Minimum quantity required
min_amount integer No Minimum order or item amount required, in cents
min_weight string No Minimum weight required
min_weight_unit string No Unit of min_weight
days array No Days of week the discount is valid on
hours string No Hours the discount is valid during
hour_start string No Start of the valid window
hour_end string No End of the valid window
created_by string No Who created the discount
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
clicks integer No Number of times the discount tile has been clicked
inventory_tier_ids array No Qualifying criterion: pricing tiers the discount applies to. Empty means no restriction
get_quantity integer No Buy-x-get-y: how many items are given
get_product_type_ids array No Buy-x-get-y reward criterion: product types eligible to be given
get_product_ids array No Buy-x-get-y reward criterion: products eligible to be given
get_product_tag_ids array No Buy-x-get-y reward criterion: product tags eligible to be given
get_product_brand_ids array No Buy-x-get-y reward criterion: product brands eligible to be given
get_product_strain_ids array No Buy-x-get-y reward criterion: product strains eligible to be given
get_supplier_ids array No Buy-x-get-y reward criterion: suppliers eligible to be given
get_venue_room_ids array No Buy-x-get-y reward criterion: venue rooms eligible to be given
get_manifest_item_ids array No Buy-x-get-y reward criterion: lots eligible to be given
get_product_weights array No Buy-x-get-y reward criterion: display weights eligible to be given
get_inventory_tier_ids array No Buy-x-get-y reward criterion: pricing tiers eligible to be given
tier_weights array No Qualifying criterion: tier weights the discount applies to. Empty means no restriction
profile_type string No Customer profile the discount is limited to
first_sale boolean No Whether it applies only to a customer's first sale
is_private boolean No Whether the discount is restricted to specific customers, assigned through the coupon_customers endpoint
external_redemption_failure_count integer No Consecutive failures redeeming against the external system
max_redeem_times integer No Maximum number of redemptions
updated_by string No Who last updated the discount
blocked_venue_ids string No Venues the discount is withheld from
display_name string No Customer facing name, when set
max_amount integer No Maximum item price the discount may apply to, in cents. 0 means no limit
online_menu_tile_image string No Menu tile image URL
display_on_menu_deals boolean No Whether the discount shows on the menu deals page
position integer No Sort position on the deals page
image_assocs_count integer No Number of associated images
excluded_product_ids array No Exclusion: products the discount never applies to
excluded_product_type_ids array No Exclusion: product types the discount never applies to
excluded_product_tag_ids array No Exclusion: product tags the discount never applies to
excluded_product_brand_ids array No Exclusion: product brands the discount never applies to
excluded_product_strain_ids array No Exclusion: product strains the discount never applies to
excluded_supplier_ids array No Exclusion: suppliers the discount never applies to
excluded_venue_room_ids array No Exclusion: venue rooms the discount never applies to
excluded_manifest_item_ids array No Exclusion: lots the discount never applies to
excluded_product_weights array No Exclusion: display weights the discount never applies to
rounding_amount integer No Amount to round to, when rounding is set
integrator_id integer No Integrator the discount is limited to
client_type string No Originating client the discount is limited to, e.g. web, app, kiosk, pos
employee_ids array No Employees permitted to apply the discount
access_levels array No Access levels permitted to apply the discount
images array (CouponImage) No Discount images and their size variants
CouponImage

An image attached to a discount.

Property Type Required Description
name string No Image name
og string No Original image URL
lg string No Large (web) image URL
md string No Medium image URL
thumb string No Thumbnail image URL

Customers

4 endpoints
POSaBIT offers custom profiles for each of your loyalty customers. With just the scan of the customer's ID, the point of sale pulls up the customer’s favorite types of products, displays their purchase history, shows their available loyalty points/rewards, and even has an area where you can easily make notes about the customer.
GET /api/v3/venue/customers

Get all customers for a venue

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return customers updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return customers updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[telephone_eq] string query No Filter results using ransack syntax (e.g. q[customer_telephone_eq]='8085550100' would return customers where telephone = 8085550100)

Example

curl -X GET "https://app.posabit.com/api/v3/venue/customers" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success (returns an array of customers)
401 Unauthorized

Response Fields

Field Type Required Description
customer_type string No Default: recreational
active boolean No Default: true
gender string(15) No
loyalty boolean No Default: false
loyalty_number string No
customer_level_id integer No
points integer Yes Default: 0
lifetime_points integer Yes Default: 0
birthday date No
first_name string No
full_name string No
id_number string No
id_expiration date No
id_type string No Default: drivers_license
profile_image string No
last_name string No
telephone string No
created_at datetime No
updated_at datetime No
zipcode string(10) No
address string No
city string No Default:
apns boolean No Default: false
referral_code string No Default:
state string No Default:
email string No
was_first_created_on_pos boolean No Default: false
country string(2) No Default: US
sms_opt_out boolean No Default: true
status string No
employee_hire_date date No
medical_card string No
medical_card_exp date No
caregiver_id string No
caregiver_id_exp date No
loyalty_member_since date No
sms_reachable boolean Yes Default: true
sms_sent_at datetime No
coupons_count integer Yes Default: 0
reviewed boolean No Default: false
terms_agreed boolean No Default: false
referral_source string No
ext_signature_src string No
certifying_provider string No
sms_opt_source string No
custom_allotment string No
medical_card_state string No
token string No
token_expires_at datetime No
medical_card_effective date No
core_token string No
one_time_pin string No
otp_expires_at datetime No
core_consumer_ref string No
last_online_login datetime No
online_account_created_at datetime No
sms_first_message_sent_at datetime No
middle_name string No
doctor_id integer No
caregiver_first_name string No
caregiver_last_name string No
recommendation_issue_date date No
refills_authorized string No

Response Example

{
  "total_records": 34,
  "current_page": 1,
  "total_pages": 34,
  "per_page": 1,
  "customers": [
    {
      "customer": {
        "id": 279160,
        "first_name": "Jane",
        "last_name": "Doe",
        "birth_year": null,
        "gender": "female",
        "telephone": "5551111111",
        "email": "test@gmail.com",
        "active": true,
        "sms_opt_out": false,
        "sms_opt_in": true,
        "signature": "",
        "address": "",
        "zipcode": "98033",
        "city": "",
        "state": "WA",
        "birthday": null,
        "customer_type": "medical",
        "terms_agreed": false,
        "points": 105
      }
    }
  ]
}
POST /api/v3/venue/customers

Create a Customer

Post JSON in body {"customer": {"first_name": "John"...}}

Parameters

Name Type In Required Description
body customer body Yes JSON formatted body

Example

curl -X POST "https://app.posabit.com/api/v3/venue/customers" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
  "customer": {
    "first_name": "Test",
    "last_name": "User",
    "gender": "female",
    "telephone": "5551234567",
    "email": "test@posabit.com",
    "active": 1,
    "sms_opt_out": 1,
    "address": "123 water lane",
    "zipcode": "12345",
    "city": "Seattle",
    "state": "WA",
    "birthday": "01/01/1990",
    "terms_agreed": 1,
    "customer_type": "medical"
  }
}'

Request Body

{
  "customer": {
    "first_name": "Test",
    "last_name": "User",
    "gender": "female",
    "telephone": "5551234567",
    "email": "test@posabit.com",
    "active": 1,
    "sms_opt_out": 1,
    "address": "123 water lane",
    "zipcode": "12345",
    "city": "Seattle",
    "state": "WA",
    "birthday": "01/01/1990",
    "terms_agreed": 1,
    "customer_type": "medical"
  }
}

Responses

Status Description
200 Success
204 Record not found
400 Bad Request

Response Fields

Field Type Required Description
id integer Yes Customer Id (Read-only)
first_name string No First Name (in responses, requires enhanced_customer_data_access)
last_name string No Last Name (in responses, requires enhanced_customer_data_access)
birth_year integer No Birth Year (Read-only)
gender string No Gender
telephone string No Telephone (Update not allowed)
email string No Email
active boolean No Active
sms_opt_out boolean No SMS Opt Out
sms_opt_in boolean No SMS Opt In (Read-only)
signature string No Signature (base64 encoded jpeg) (Input only; not returned in responses)
address string No Address
zipcode string No ZIP Code
city string No City
state string No State
birthday string No Birthday
customer_type string No Customer Type
id_expiration string No ID expiration date (Read-only; requires enhanced_customer_data_access)
medical_card_expiration string No Medical card expiration date (Read-only; requires enhanced_customer_data_access)
drivers_license string No Driver's license / ID number (Read-only; requires enhanced_customer_data_access)
customer_tags array No Customer tags (Read-only; requires enhanced_customer_data_access)
terms_agreed boolean No Terms Agreed
points integer No Points (Read-only)
points_adjustment string No Points to add or subtract (Input only; not returned in responses)
loyalty boolean No Loyalty enrolled (Read-only)
loyalty_number string No Loyalty number (Read-only)
qr_code string No Loyalty QR code (Read-only)
created_at string No Created timestamp (Read-only)
updated_at string No Updated timestamp (Read-only)

Response Example

{
  "customer": {
    "id": 279160,
    "first_name": "Jane",
    "last_name": "Doe",
    "birth_year": null,
    "gender": "female",
    "telephone": "5551111111",
    "email": "test@gmail.com",
    "active": true,
    "sms_opt_out": false,
    "sms_opt_in": true,
    "signature": "",
    "address": "",
    "zipcode": "98033",
    "city": "",
    "state": "WA",
    "birthday": null,
    "customer_type": "medical",
    "terms_agreed": false,
    "points": 105
  }
}
GET /api/v3/venue/customers/{id}

Read a customer

Parameters

Name Type In Required Description
id integer path Yes Customer ID

Example

curl -X GET "https://app.posabit.com/api/v3/venue/customers/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
400 Bad Request
422 Invalid parameters
500 Internal Server Error

Response Fields

Field Type Required Description
customer_type string No Default: recreational
active boolean No Default: true
gender string(15) No
loyalty boolean No Default: false
loyalty_number string No
customer_level_id integer No
points integer Yes Default: 0
lifetime_points integer Yes Default: 0
birthday date No
first_name string No
full_name string No
id_number string No
id_expiration date No
id_type string No Default: drivers_license
profile_image string No
last_name string No
telephone string No
created_at datetime No
updated_at datetime No
zipcode string(10) No
address string No
city string No Default:
apns boolean No Default: false
referral_code string No Default:
state string No Default:
email string No
was_first_created_on_pos boolean No Default: false
country string(2) No Default: US
sms_opt_out boolean No Default: true
status string No
employee_hire_date date No
medical_card string No
medical_card_exp date No
caregiver_id string No
caregiver_id_exp date No
loyalty_member_since date No
sms_reachable boolean Yes Default: true
sms_sent_at datetime No
coupons_count integer Yes Default: 0
reviewed boolean No Default: false
terms_agreed boolean No Default: false
referral_source string No
ext_signature_src string No
certifying_provider string No
sms_opt_source string No
custom_allotment string No
medical_card_state string No
token string No
token_expires_at datetime No
medical_card_effective date No
core_token string No
one_time_pin string No
otp_expires_at datetime No
core_consumer_ref string No
last_online_login datetime No
online_account_created_at datetime No
sms_first_message_sent_at datetime No
middle_name string No
doctor_id integer No
caregiver_first_name string No
caregiver_last_name string No
recommendation_issue_date date No
refills_authorized string No

Response Example

{
  "customer": {
    "id": 279160,
    "first_name": "Jane",
    "last_name": "Doe",
    "birth_year": null,
    "gender": "female",
    "telephone": "5551111111",
    "email": "test@gmail.com",
    "active": true,
    "sms_opt_out": false,
    "sms_opt_in": true,
    "signature": "",
    "address": "",
    "zipcode": "98033",
    "city": "",
    "state": "WA",
    "birthday": null,
    "customer_type": "medical",
    "terms_agreed": false,
    "points": 105
  }
}
PATCH /api/v3/venue/customers/{id}

Update a Customer

Patch JSON in body {"customer": {"first_name": "John"...}}

Parameters

Name Type In Required Description
id integer path Yes Customer ID
body customer body Yes JSON formatted body

Example

curl -X PATCH "https://app.posabit.com/api/v3/venue/customers/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
204 Record not found
400 Bad Request

Response Fields

Field Type Required Description
id integer Yes Customer Id (Read-only)
first_name string No First Name (in responses, requires enhanced_customer_data_access)
last_name string No Last Name (in responses, requires enhanced_customer_data_access)
birth_year integer No Birth Year (Read-only)
gender string No Gender
telephone string No Telephone (Update not allowed)
email string No Email
active boolean No Active
sms_opt_out boolean No SMS Opt Out
sms_opt_in boolean No SMS Opt In (Read-only)
signature string No Signature (base64 encoded jpeg) (Input only; not returned in responses)
address string No Address
zipcode string No ZIP Code
city string No City
state string No State
birthday string No Birthday
customer_type string No Customer Type
id_expiration string No ID expiration date (Read-only; requires enhanced_customer_data_access)
medical_card_expiration string No Medical card expiration date (Read-only; requires enhanced_customer_data_access)
drivers_license string No Driver's license / ID number (Read-only; requires enhanced_customer_data_access)
customer_tags array No Customer tags (Read-only; requires enhanced_customer_data_access)
terms_agreed boolean No Terms Agreed
points integer No Points (Read-only)
points_adjustment string No Points to add or subtract (Input only; not returned in responses)
loyalty boolean No Loyalty enrolled (Read-only)
loyalty_number string No Loyalty number (Read-only)
qr_code string No Loyalty QR code (Read-only)
created_at string No Created timestamp (Read-only)
updated_at string No Updated timestamp (Read-only)

Models

customer

A Customer. Used for both request bodies (create/update) and responses; fields marked Read-only or Input only apply to a single direction.

Property Type Required Description
id integer Yes Customer Id (Read-only)
first_name string No First Name (in responses, requires enhanced_customer_data_access)
last_name string No Last Name (in responses, requires enhanced_customer_data_access)
birth_year integer No Birth Year (Read-only)
gender string No Gender
telephone string No Telephone (Update not allowed)
email string No Email
active boolean No Active
sms_opt_out boolean No SMS Opt Out
sms_opt_in boolean No SMS Opt In (Read-only)
signature string No Signature (base64 encoded jpeg) (Input only; not returned in responses)
address string No Address
zipcode string No ZIP Code
city string No City
state string No State
birthday string No Birthday
customer_type string No Customer Type
id_expiration string No ID expiration date (Read-only; requires enhanced_customer_data_access)
medical_card_expiration string No Medical card expiration date (Read-only; requires enhanced_customer_data_access)
drivers_license string No Driver's license / ID number (Read-only; requires enhanced_customer_data_access)
customer_tags array No Customer tags (Read-only; requires enhanced_customer_data_access)
terms_agreed boolean No Terms Agreed
points integer No Points (Read-only)
points_adjustment string No Points to add or subtract (Input only; not returned in responses)
loyalty boolean No Loyalty enrolled (Read-only)
loyalty_number string No Loyalty number (Read-only)
qr_code string No Loyalty QR code (Read-only)
created_at string No Created timestamp (Read-only)
updated_at string No Updated timestamp (Read-only)
customers

Paginated list of customers. Each element of the customers array is itself wrapped under a "customer" key.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
customers array Yes customer

Customer Tags

1 endpoints
Customer tags are the perfect way to organize your different customer groups. Building customer groups allows for easier filtering, targeted discounts, and custom data metrics. Customer tags are completely customizable by easily creating new tags and connecting them to specific customers.
GET /api/v3/venue/customer_tags

Get the merchant's active customer tags

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return customer tags updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return customer tags updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/customer_tags" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
active boolean No Default: true
pos_enabled boolean Yes Default: true
manager_approval boolean Yes Default: false
description string(500) No
discount_limit decimal No
taggings_count integer No Default: 0
color string(7) No
created_at datetime Yes
updated_at datetime Yes

Response Example

{
  "total_records": 13,
  "current_page": 1,
  "total_pages": 1,
  "per_page": 1000,
  "customer_tags": [
    {
      "id": 1,
      "merchant_id": 7684,
      "name": "veteran",
      "active": true,
      "pos_enabled": true,
      "description": "",
      "discount_limit": null,
      "taggings_count": 2226,
      "color": "#AE2014",
      "created_at": "2019-05-30T22:49:21.000Z",
      "updated_at": "2019-10-07T19:47:10.000Z"
    },
    {
      "id": 2,
      "merchant_id": 7684,
      "name": "Industry",
      "active": true,
      "pos_enabled": true,
      "description": "",
      "discount_limit": null,
      "taggings_count": 275,
      "color": "#5B77D0",
      "created_at": "2019-06-03T16:58:55.000Z",
      "updated_at": "2019-10-07T19:47:17.000Z"
    }
  ]
}

Models

CustomerTagListResponse

Paginated list of the merchant's active customer tags.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
customer_tags array (CustomerTag) Yes Customer tags
CustomerTag

A customer tag. Only active tags are returned.

Property Type Required Description
id integer Yes Customer tag id
merchant_id integer No Merchant id
name string No Tag name
description string No Tag description
color string No Display colour
active boolean No Whether the tag is active
pos_enabled boolean No Whether the tag is selectable in the POS
discount_limit float No Maximum discount allowed for customers with this tag
taggings_count integer No Number of customers carrying the tag
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Customer Queues

1 endpoints
GET /api/v3/venue/customer_queues

Get the venue's available customer queue entries

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page
q[updated_at_gt] datestring query No Only return customer queue entries updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return customer queue entries updated before this time, e.g. q[updated_at_lt]='2019-07-01'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/customer_queues" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
customer_id integer No
name string No
source string No
created_on date No
queue integer No
pickup boolean No Default: false
aasm_state string No
customer_notes string No
created_at datetime No
updated_at datetime No
processed_at datetime No
birthday date No
scan_data json No

Response Example

{
  "total_records": 2,
  "current_page": 1,
  "total_pages": 1,
  "per_page": 50,
  "customer_queues": [
    {
      "queue": 1,
      "customer_queue_id": 5355,
      "customer_id": 183218,
      "user_id": 12507,
      "user_name": "Test User",
      "name": "John Doe",
      "telephone": "",
      "birth_year": 1959,
      "sms_opt_out": false,
      "sms_opt_in": true,
      "email": "test@gmail.com",
      "source": "walk_in",
      "pickup": false,
      "created_on": "2024-10-03",
      "aasm_state": "open",
      "customer_notes": null,
      "created_at": "2024-10-03T20:04:14.000Z",
      "updated_at": "2024-10-03T20:04:14.000Z",
      "processed_at": null,
      "saved_order": "",
      "saved_order_data": "",
      "saved_order_total": ""
    },
    {
      "queue": 2,
      "customer_queue_id": 5356,
      "customer_id": 183219,
      "user_id": 12507,
      "user_name": "Test User",
      "name": "Jane Doe",
      "telephone": "",
      "birth_year": 1975,
      "sms_opt_out": true,
      "sms_opt_in": false,
      "email": "test@gmail.com",
      "source": "walk_in",
      "pickup": false,
      "created_on": "2024-10-03",
      "aasm_state": "open",
      "customer_notes": null,
      "created_at": "2024-10-03T20:04:16.000Z",
      "updated_at": "2024-10-03T20:04:16.000Z",
      "processed_at": null,
      "saved_order": "",
      "saved_order_data": "",
      "saved_order_total": ""
    }
  ]
}

Models

CustomerQueueListResponse

Paginated list of the venue's available queue entries.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
customer_queues array (CustomerQueueEntry) Yes Queue entries
CustomerQueueEntry

One customer waiting in a queue. The personal detail fields require enhanced_customer_data_access on the venue token and are omitted without it.

Property Type Required Description
customer_queue_id integer Yes Queue entry id
queue string No Which queue the customer is in
aasm_state string No Entry state
customer_id integer No Customer id, when the entry is linked to a customer record
user_id integer No Id of the employee handling the entry
user_name string No Full name of that employee. Omitted when no employee is assigned
name string No Customer name. Requires enhanced_customer_data_access
telephone string No Telephone. Requires enhanced_customer_data_access
email string No Email. Requires enhanced_customer_data_access
birth_year integer No Year of birth. Requires enhanced_customer_data_access
sms_opt_in boolean No SMS opt in. Requires enhanced_customer_data_access
sms_opt_out boolean No SMS opt out. Requires enhanced_customer_data_access
customer_notes string No Notes about the customer. Requires enhanced_customer_data_access
source string No Where the entry came from
pickup boolean No Whether the customer is here for a pickup
created_on string No Date the entry was created (a date, not a timestamp)
processed_at datetime No When the entry was processed
saved_order string No Always an empty string. Retained for backwards compatibility
saved_order_data string No Always an empty string. Retained for backwards compatibility
saved_order_total string No Always an empty string. Retained for backwards compatibility
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Inventories

3 endpoints
The default view of the inventory page will show you all of your active inventory, from lowest to highest number of units (or grams) on hand - this is so you can easily see which products are running low. Using the filters on the left side of the page, you can narrow down your search results by a particular product type, brand, supplier, etc.
GET /api/v3/venue/inventories

Get all inventories for a venue

Returns paginated inventory SKUs (only those with stock on hand) for the authenticated venue. Response envelope: { total_records, current_page, total_pages, per_page, max_per_page, inventory: [ {...} ] }. Each element matches InventoryResponse. per_page is capped at max_per_page (100). Larger values are silently reduced to the cap, so page through the result set using total_pages. Fields marked "Enterprise only" are returned only when the integrator has advanced_inventory_access.

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 100, max 100)
q[updated_at_gt] datestring query No Only return inventory records updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return inventory records updated before this time, e.g. q[updated_at_lt]='2019-07-01'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/inventories" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

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

Response Example

{
  "total_records": 1161,
  "current_page": 1,
  "total_pages": 1161,
  "per_page": 1,
  "inventory": [
    {
      "id": 210113,
      "product_id": 902429,
      "name": "Phat Panda - Lemon Danish Glaze",
      "unit": "280.0 gm",
      "price": 1300,
      "med_price": null,
      "last_price": 1300,
      "quantity_on_hand": "369.7",
      "sellable_quantity": "369.7",
      "ecomm_quantity": "369.7",
      "vendor": "PIONEER PRODUCTION AND PROCESSING",
      "vendor_license": null,
      "brand": "Phat Panda",
      "category": "Bulk Flower",
      "flower_type": "hybrid",
      "concentrate_type": null,
      "product_type": "hybrid",
      "product_family": "Flower",
      "description": "A perfect wake and bake strain. Sweet lemon and mell...",
      "image": [
        null
      ],
      "active": false,
      "bulk_item": true,
      "strain": "Lemon Danish",
      "thc_measure": "21.5%",
      "cbd_measure": "0.7%",
      "sku": "3264-902429",
      "discountable": true,
      "tier_name": "Top Shelf Tier",
      "created_at": "2019-10-16T20:37:49.000Z",
      "updated_at": "2022-07-05T17:31:23.000Z",
      "rooms": [
        {
          "Display Case 3": "369.7"
        }
      ]
    }
  ]
}
GET /api/v3/venue/inventories/{id}

Get a single inventory for a venue

Returns a single inventory SKU by id. Responds 404 with { message: "Inventory not found" } when the id does not belong to the venue. The response matches InventoryDetailResponse. Fields marked "Enterprise only" are returned only when the integrator has advanced_inventory_access.

Parameters

Name Type In Required Description
id integer path Yes Inventory SKU id

Example

curl -X GET "https://app.posabit.com/api/v3/venue/inventories/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized
404 Inventory 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

Response Example

{
  "id": 107890,
  "product_id": 800566,
  "name": " zz Panacea - Cherry OG Trim (14g)",
  "unit": "14.0 gm",
  "price": 1000,
  "med_price": null,
  "last_price": 5400,
  "quantity_on_hand": "95.0",
  "sellable_quantity": "94.0",
  "ecomm_quantity": "94.0",
  "vendor": "Solar Joes",
  "vendor_license": "415819",
  "brand": "Panacea",
  "category": "Flower",
  "compliance_type": "Usable Cannabis",
  "flower_type": "hybrid",
  "concentrate_type": null,
  "product_type": "hybrid",
  "product_family": "Flower",
  "tags": [
    "Industry",
    "Sale Day"
  ],
  "description": "Double trimmed premium shake bag with Cherry OG, a very balanced hybrid. Great flavors.",
  "description_html": "<div>Double <strong>trimmed</strong> premium <em>shake</em> bag with <del>Cherry</del> OG, a very balanced hybrid. Great flavors.</div>",
  "image": [
    "https://pbit-staging.s3.amazonaws.com/images/image/3194/leaf_2.jpeg"
  ],
  "active": true,
  "bulk_item": true,
  "strain": "Cherry OG Trim",
  "thc_measure": "61.9%",
  "thca_measure": "0.0",
  "total_thc_measure": "0.0",
  "cbd_measure": "5.4%",
  "cbda_measure": "0.0",
  "total_cbd_measure": "0.0",
  "sku": "6033512330004399",
  "discountable": true,
  "tier_name": "Top Tier",
  "doh_compliant": false,
  "tier_prices": [
    {
      "weight": "1.0",
      "weight_unit": "grams",
      "weight_in_grams": 1,
      "price": 1000,
      "med_price": null
    },
    {
      "weight": "3.5",
      "weight_unit": "grams",
      "weight_in_grams": 3.5,
      "price": 3000,
      "med_price": null
    },
    {
      "weight": "7.0",
      "weight_unit": "grams",
      "weight_in_grams": 7,
      "price": 5500,
      "med_price": null
    },
    {
      "weight": "14.0",
      "weight_unit": "grams",
      "weight_in_grams": 14,
      "price": 10000,
      "med_price": null
    }
  ],
  "terpenes": [],
  "effects": [],
  "flavors": [],
  "images": [
    {
      "name": "leaf_2.jpeg",
      "og": "https://pbit-staging.s3.amazonaws.com/images/image/3194/leaf_2.jpeg",
      "lg": "https://pbit-staging.s3.amazonaws.com/images/image/3194/web_leaf_2.jpeg",
      "md": "https://pbit-staging.s3.amazonaws.com/images/image/3194/medium_leaf_2.jpeg",
      "thumb": "https://pbit-staging.s3.amazonaws.com/images/image/3194/thumb_leaf_2.jpeg",
      "is_product_specific_image": true,
      "position": 1
    },
    {
      "name": "brand.jpeg",
      "og": "https://pbit-staging.s3.amazonaws.com/images/image/2620/brand.jpeg",
      "lg": "https://pbit-staging.s3.amazonaws.com/images/image/2620/web_brand.jpeg",
      "md": "https://pbit-staging.s3.amazonaws.com/images/image/2620/medium_brand.jpeg",
      "thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2620/thumb_brand.jpeg",
      "is_product_specific_image": true,
      "position": 4
    }
  ],
  "created_at": "2018-08-08T18:37:47.000Z",
  "updated_at": "2024-12-10T18:54:53.000Z"
}
PATCH /api/v3/venue/inventories/{id}

Update pricing for a single inventory

Updates the pricing fields of an inventory SKU. The request body must be wrapped under the "inventory_sku" key and only price, med_price and last_price may be set. On success responds with the updated record (InventoryDetailResponse). Responds 404 when the id does not belong to the venue, and 422 when no valid attributes are supplied or validation fails.

Parameters

Name Type In Required Description
id integer path Yes Inventory SKU id
body InventoryUpdateInput body Yes Pricing payload, wrapped under the "inventory_sku" key

Example

curl -X PATCH "https://app.posabit.com/api/v3/venue/inventories/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{...}'

Responses

Status Description
200 Success
401 Unauthorized
404 Inventory not found
422 No valid attributes to update / validation failed

Response Fields

Field Type Required Description
price float No Retail (recreational) price
med_price float No Medical price
last_price float No Previous price (used to show strike-through / sale pricing)

Models

InventoryUpdateInput

Pricing fields that may be updated on an inventory SKU (wrapped under the "inventory_sku" key).

Property Type Required Description
price float No Retail (recreational) price
med_price float No Medical price
last_price float No Previous price (used to show strike-through / sale pricing)
InventoryResponse

An inventory SKU as returned by the index action. Enterprise-only fields require advanced_inventory_access.

Property Type Required Description
id integer Yes Inventory SKU id
product_id integer No Product id
active boolean No Whether the SKU is active
name string No Product name
display_name string No Display name (falls back to product name)
description string No Plain-text product description (HTML stripped)
unit string No Unit size, weight plus short unit (e.g. "1.0 g")
image array No Cover image URL(s)
description_html string No Enterprise only. Product description including HTML
internal_product_identifier string No Enterprise only. Internal product id
price float No Enterprise only. Retail (recreational) price
med_price float No Enterprise only. Medical price (null unless the venue uses medical pricing)
last_price float No Enterprise only. Previous price (for strike-through / sale display)
tier_name string No Enterprise only. Pricing tier name (weighable products only)
quantity_on_hand float No Enterprise only. Quantity on hand
sellable_quantity float No Enterprise only. Quantity available to sell
ecomm_quantity float No Enterprise only. Quantity available for e-commerce
vendor_id integer No Enterprise only. Supplier id
vendor string No Enterprise only. Supplier name
vendor_license string No Enterprise only. Supplier license number
brand string No Enterprise only. Product brand name
category string No Enterprise only. Product type / category name
compliance_type string No Enterprise only. Product type external (compliance) name
flower_type string No Enterprise only. Flower type
concentrate_type string No Enterprise only. Concentrate type
product_type string No Enterprise only. Concentrate type, else flower type, else blank
product_family string No Enterprise only. Product family name
pack_size string No Enterprise only. Pack size
tags array No Enterprise only. Product tags for the venue
bulk_item boolean No Enterprise only. Whether the product is weighable / sold in bulk
strain string No Enterprise only. Product strain name
thc_measure string No Enterprise only. THC measure (from the first lot)
cbd_measure string No Enterprise only. CBD measure (from the first lot)
sku string No Enterprise only. SKU barcode
discountable boolean No Enterprise only. Whether the SKU is discountable
doh_compliant boolean No Enterprise only. DOH compliance flag (CCRS regions only)
terpenes array No Enterprise only. Terpenes
effects array No Enterprise only. Effect trait names
flavors array No Enterprise only. Flavor trait names
rooms object No Enterprise only. Map of room name to quantity on hand (rooms with positive quantity only)
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
InventoryDetailResponse

An inventory SKU as returned by the show / update actions. Includes the index fields plus tier pricing, full cannabinoid measures and image variants. Enterprise-only fields require advanced_inventory_access.

Property Type Required Description
id integer Yes Inventory SKU id
product_id integer No Product id
active boolean No Whether the SKU is active
name string No Product name
display_name string No Display name (falls back to product name)
unit string No Unit size, weight plus short unit (e.g. "1.0 g")
description string No Plain-text product description (HTML stripped)
image array No Cover image URL(s)
description_html string No Enterprise only. Product description including HTML
internal_product_identifier string No Enterprise only. Internal product id
price float No Enterprise only. Retail (recreational) price
med_price float No Enterprise only. Medical price
last_price float No Enterprise only. Previous price (for strike-through / sale display)
quantity_on_hand float No Enterprise only. Quantity on hand
sellable_quantity float No Enterprise only. Quantity available to sell
ecomm_quantity float No Enterprise only. Quantity available for e-commerce
vendor string No Enterprise only. Supplier name
vendor_license string No Enterprise only. Supplier license number
brand string No Enterprise only. Product brand name
category string No Enterprise only. Product type / category name
compliance_type string No Enterprise only. Product type external (compliance) name
flower_type string No Enterprise only. Flower type
concentrate_type string No Enterprise only. Concentrate type
product_type string No Enterprise only. Concentrate type, else flower type, else blank (kept for backwards compatibility)
product_family string No Enterprise only. Product family name
pack_size string No Enterprise only. Pack size
tags array No Enterprise only. Product tags for the venue
bulk_item boolean No Enterprise only. Whether the product is weighable / sold in bulk
strain string No Enterprise only. Product strain name
thc_measure string No Enterprise only. THC measure (from the first lot)
thca_measure string No Enterprise only. THCA measure (from the first lot)
total_thc_measure string No Enterprise only. Total THC measure (from the first lot)
cbd_measure string No Enterprise only. CBD measure (from the first lot)
cbda_measure string No Enterprise only. CBDA measure (from the first lot)
total_cbd_measure string No Enterprise only. Total CBD measure (from the first lot)
sku string No Enterprise only. SKU barcode
discountable boolean No Enterprise only. Whether the SKU is discountable
tier_name string No Enterprise only. Pricing tier name (weighable products only)
doh_compliant boolean No Enterprise only. DOH compliance flag (CCRS regions only)
tier_prices array (InventoryTierPrice) No Enterprise only. Tier pricing by weight
terpenes array No Enterprise only. Terpenes
effects array No Enterprise only. Effect names
flavors array No Enterprise only. Flavor names
images array (InventoryImage) No Enterprise only. Product image variants
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
InventoryTierPrice

A tier price entry for a weighable product (only weights with a price or med_price are returned).

Property Type Required Description
weight string No Tier weight
weight_unit string No Tier weight unit
weight_in_grams float No Tier weight in grams (rounded to 2 decimals)
price float No Retail (recreational) price for this weight
med_price float No Medical price for this weight
InventoryImage

A product image with its rendered size variants.

Property Type Required Description
name string No Image name
og string No Original image URL
lg string No Large (web) image URL
md string No Medium image URL
thumb string No Thumbnail image URL
is_product_specific_image boolean No Whether the image is specific to this product (not the default)
position integer No Image sort position

Inventory Transactions

1 endpoints
GET /api/v3/venue/inventory_transactions

Get the venue's inventory transactions

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return inventory transactions updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return inventory transactions updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[transaction_type_eq] string query No Only return transactions of this type: sale, purchase, refund, adjustment, manifest_adjustment, manifest_cost_adjustment, reset, item_destroyed, split_parent, split_child, transferred_out, voided_transfer_out, void_sale, item_removed, item_added, import, item_transformed, transformed_adjustment, lot_merge, cost_change
q[manifest_item_id_eq] integer query No Only return transactions for this manifest item id
q[order_id_eq] integer query No Only return transactions for this order id
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/inventory_transactions" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
sku_id integer Yes
order_id integer No
order_type string No
manifest_item_id integer No
transaction_type string Yes
quantity decimal Yes Default: 0.0
created_on date No
updated_at datetime No
reason string No
updated_by string No
sts_sync boolean Yes Default: false
note text No
sts_transaction_id integer No
weight decimal No
weight_unit string No
cost_diff integer No Default: 0
previous_qoh decimal No
item_cost integer No

Response Example

{
  "total_records": 116327,
  "current_page": 1,
  "total_pages": 116327,
  "per_page": 1,
  "inventory_transactions": [
    {
      "id": 8984553,
      "manifest_item_id": 178188,
      "sku_id": 107893,
      "transaction_type": "purchase",
      "order_id": 178188,
      "order_type": "ManifestItem",
      "quantity": "5.0",
      "reason": "auto replenish",
      "updated_by": null,
      "note": null,
      "cost_diff": 1000,
      "previous_cost": 2000,
      "updated_cost": 3000,
      "previous_quantity": 3791,
      "updated_quantity": 3796,
      "created_at": "2024-02-22",
      "updated_at": "2024-02-22T10:37:02.000Z"
    }
  ]
}

Models

InventoryTransactionListResponse

Paginated list of the venue's inventory transactions.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
inventory_transactions array (InventoryTransaction) Yes Inventory transactions
InventoryTransaction

A single movement of stock. previous_* is the state before the movement and updated_* the state after.

Property Type Required Description
id integer Yes Transaction id
sku_id integer No Inventory SKU id the movement applies to
manifest_item_id integer No Lot the movement applies to, when it came from one
transaction_type string No One of: sale, purchase, refund, adjustment, manifest_adjustment, manifest_cost_adjustment, reset, item_destroyed, split_parent, split_child, transferred_out, voided_transfer_out, void_sale, item_removed, item_added, import, item_transformed, transformed_adjustment, lot_merge, cost_change
order_id integer No Id of the record that caused the movement, when there is one
order_type string No Class of the record named by order_id, e.g. Order
quantity string No Signed quantity moved. Negative for stock leaving
reason string No Reason code, for adjustments
note string No Free-text note
updated_by string No Who recorded the movement
cost_diff integer No Change in unit cost in cents
previous_cost integer No Unit cost in cents before the movement
updated_cost integer No Unit cost in cents after the movement
previous_quantity float No Quantity on hand before the movement
updated_quantity float No Quantity on hand after the movement
created_at string No Date the movement was recorded (a date, not a timestamp)
updated_at datetime No Updated timestamp

Manifest Items

1 endpoints
GET /api/v3/venue/manifest_items

Get all manifest items for a venue

Returns paginated manifest items (individual lots/packages) for the authenticated venue. Requires advanced_inventory_access. Response envelope: { total_records, current_page, total_pages, per_page, max_per_page, manifest_items: [ {...} ] }. Each element matches ManifestItemResponse. per_page is capped at max_per_page (100). Larger values are silently reduced to the cap, so page through the result set using total_pages. Supports ransack filters under q[...]: state_eq (aliased to aasm_state_eq), inventory_id_eq (aliased to inventory_sku_id_eq), updated_at_gt, updated_at_lt, quantity_on_hand_gt, quantity_on_hand_lt, quantity_on_hand_eq, id_eq, barcode_eq, and s (sort).

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 100, max 100)
q[updated_at_gt] datestring query No Only return manifest items updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return manifest items updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[aasm_state_eq] string query No Only return lots in this state: pending, active, active_unassigned, quarantined, destruction_scheduled, item_destroyed, closed, transferred_out, rejected, unsellable, locked. Also accepted as q[state_eq]
q[id_eq] integer query No Only return the manifest item with this id
q[barcode_eq] string query No Only return manifest items with this barcode
q[inventory_sku_id_eq] integer query No Only return manifest items for this inventory sku id. Also accepted as q[inventory_id_eq]
q[quantity_on_hand_gt] string query No Only return manifest items with quantity on hand greater than this
q[quantity_on_hand_lt] string query No Only return manifest items with quantity on hand less than this
q[quantity_on_hand_eq] string query No Only return manifest items with exactly this quantity on hand
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/manifest_items" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
manifest_id integer No
sts_license_id integer No
lot_number string No
item_type string No
strain string No
name text No
description text No
expires_on date No
barcode string No
barcode_dupe boolean Yes Default: false
barcode_image string No
inventory_sku_id integer No
venue_room_id integer No
aasm_state string No Default: pending
position integer No Default: 0
quantity decimal Yes Default: 0.0
weight decimal Yes Default: 0.0
net_weight decimal No
weight_unit string(15) No Default: grams
testing_lab string No
testing_date datetime No
testing_lab_license string No
test_results text No
test_contaminants_pass boolean No
test_cannabinoids_pass boolean No
test_pesticides_pass boolean No
thc decimal No
cbd decimal No
cbn decimal No
old_harvest_date datetime No
cost integer No Default: 0
received_cost integer No Default: 0
tax integer No
created_at datetime No
updated_at datetime No
last_sold datetime No
updated_by string No
is_sample boolean No Default: false
is_medical_only boolean No Default: false
ancestry string No
a_split boolean No Default: false
quantity_on_hand decimal Yes Default: 0.0
api_id string No
received_quantity decimal Yes Default: 0.0
batch_number string No
return_manifest_id integer No
pre_return_state string No
pre_return_quantity decimal No
custom_barcode_image string No
sample_type string No
product_sample_type string No
custom_barcode_image_version string No
transformed_from_id integer No
transformed_conversion decimal Yes Default: 0.0
transformed_from_quantity decimal Yes Default: 0.0
transformed_conversion_weight string No
original_sts_quantity decimal Yes Default: 0.0
original_sts_unit string No
sts_quantity decimal No
sts_category string No
sts_state string No
sts_last_modified string No
quantity_adj decimal Yes Default: 0.0
discrepancy_detected datetime No
last_audit datetime No
number_of_doses decimal No
coa_file string No
coa_url text No
excise_tax integer No
thca decimal No
cbda decimal No
total_thc decimal No
growth_method string No
total_terpene decimal No
weight_in_grams decimal No
cbc decimal No
cbg decimal No
cbga decimal No
cbca decimal No
cbgv decimal No
thcv decimal No
cbdv decimal No
cbcv decimal No
harvest_date string No
custom_field_1 string No
custom_field_2 string No
custom_field_3 string No
accepted_date date No
sdp_category string No
sdp_compass string No
lab_result_link text No
doh_compliant boolean No Default: false
total_cbd decimal No
doh_type string No
has_unique_barcodes boolean No Default: false
is_recreational_only boolean No Default: false
sku_reference string No

Response Example

{
  "total_records": 208,
  "current_page": 1,
  "total_pages": 208,
  "per_page": 1,
  "manifest_items": [
    {
      "id": 261878,
      "manifest_id": null,
      "state": "active",
      "supplier_quantity": "365.0",
      "accepted_quantity": "365.0",
      "quantity_on_hand": "369.7",
      "pre_return_quantity": null,
      "cost_per_unit": 300,
      "inventory_id": 210113,
      "lot_number": "WAR414871.IN6BJ9N",
      "barcode": "WAJ416063.IN6AEJ2",
      "batch_number": null,
      "last_audit": null,
      "venue_room": "Display Case 3",
      "harvest_date": null,
      "thc_measure": "21.5%",
      "cbd_measure": "0.7%",
      "coa_url": null,
      "created_at": "2019-10-16T20:37:50.000Z",
      "updated_at": "2022-06-27T21:25:45.000Z"
    }
  ]
}

Models

ManifestItemResponse

A manifest item (an individual lot / package of inventory) as returned by the index action.

Property Type Required Description
id integer Yes Manifest item id
manifest_id integer No Parent manifest id
state string No Workflow state (aasm_state)
supplier_quantity float No Quantity received from the supplier
accepted_quantity float No Accepted quantity
quantity_on_hand float No Quantity currently on hand
pre_return_quantity float No Quantity prior to any return
cost_per_unit float No Cost per unit
inventory_id integer No Inventory SKU id
lot_number string No Lot number
barcode string No Barcode
batch_number string No Batch number
sku_reference string No Supplier's own SKU for the product, as sent on the transfer manifest (WCIA product_sku)
last_audit string No Timestamp of the last audit
venue_room string No Name of the room the item is stored in
harvest_date string No Harvest date
thc_measure string No THC measure (formatted for display)
cbd_measure string No CBD measure (formatted for display)
thca_measure string No THCA measure (formatted for display)
cbda_measure string No CBDA measure (formatted for display)
total_thc_measure string No Total THC measure (formatted for display)
total_cbd_measure string No Total CBD measure (formatted for display)
other_cannabinoids string No Minor / other cannabinoids label
coa_url string No Certificate of analysis URL
unit_weight float No Weight per unit
unit_of_weight string No Unit of weight (e.g. g, oz)
weight_in_grams float No Weight per unit converted to grams
accepted_date string No Date the item was accepted
doh_compliant boolean No DOH compliance flag (CCRS regions only)
parent_id integer No Parent manifest item id (when split from another item)
parent_manifest_id integer No Manifest id of the parent item
transformed_from_id integer No Manifest item id this was transformed from
transformed_from_manifest_id integer No Manifest id of the item this was transformed from
sdp_category string No SDP category
sdp_compass string No SDP compass value
terpenes array (ManifestItemTerpene) No Terpene results
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
ManifestItemTerpene

A terpene result on a manifest item.

Property Type Required Description
name string No Terpene name
potency float No Terpene potency

Manifests

1 endpoints
GET /api/v3/venue/manifests

Get all manifest items for a venue

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return manifests updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return manifests updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[aasm_state_eq] string query No Only return manifests in this state: pending, accepted, rejected, accepted_unassigned, voided, pre_import. Also accepted as q[state_eq]
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/manifests" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

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

Response Example

{
  "total_records": 46,
  "current_page": 1,
  "total_pages": 46,
  "per_page": 1,
  "manifests": [
    {
      "id": 364,
      "reference_no": "2",
      "supplier": "Oregon Top Shelf",
      "state": "accepted",
      "transfer_date": "2019-10-22",
      "delivery_time": null,
      "notes": "",
      "accepted_at": "2019-12-05T18:13:24.000Z",
      "accepted_by": "Matt McCullough",
      "received_cost": 10000,
      "accepted_cost": null,
      "received_quantity": 100,
      "accepted_quantity": null,
      "has_marijuana": true,
      "import_source": null,
      "discount": null,
      "manifest_items": [
        {
          "id": 276454,
          "manifest_id": 364,
          "state": "active",
          "supplier_quantity": "100.0",
          "accepted_quantity": "100.0",
          "quantity_on_hand": "5.0",
          "pre_return_quantity": null,
          "cost_per_unit": 100,
          "inventory_id": 214643,
          "lot_number": "1A4FFFB0007A122000003899",
          "barcode": "1A4FFFB0007A122000003899",
          "batch_number": "ncx7pmo24XXNGt0H",
          "last_audit": null,
          "venue_room": "Display Case 1",
          "harvest_date": null,
          "thc_measure": "70.0%",
          "cbd_measure": "0.0%",
          "coa_url": null,
          "created_at": "2019-10-22T00:18:31.000Z",
          "updated_at": "2020-05-04T20:21:26.000Z"
        }
      ],
      "created_at": "2019-10-22T00:18:31.000Z",
      "updated_at": "2019-12-05T18:13:24.000Z"
    }
  ]
}

Models

ManifestListResponse

Paginated list of manifests.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
manifests array (Manifest) Yes Manifests
Manifest

An inbound manifest and its lots. The same shape serves the return_manifests and transfer_manifests paths, which swap the receiving fields for the destination ones as noted per property.

Property Type Required Description
id integer Yes Manifest id
reference_no string No Reference number
state string No One of: pending, accepted, rejected, accepted_unassigned, voided, pre_import
supplier string No Supplier name
supplier_license string No Supplier license number
transfer_date datetime No Transfer date
delivery_time datetime No Delivery time
notes string No Free-text notes
accepted_at datetime No Inbound manifests only. When the manifest was accepted
accepted_by string No Inbound manifests only. Who accepted it
received_cost integer No Inbound manifests only. Cost as received, in cents
accepted_cost integer No Inbound manifests only. Cost as accepted, in cents
received_quantity string No Inbound manifests only. Quantity as received
accepted_quantity string No Inbound manifests only. Quantity as accepted
has_marijuana boolean No Inbound manifests only. Whether the manifest contains cannabis
import_source string No Inbound manifests only. Where the manifest was imported from
discount integer No Inbound manifests only. Discount in cents
return_destination_name string No Return and transfer manifests only. Destination name
return_destination_license string No Return and transfer manifests only. Destination license number
transferred_at datetime No Return and transfer manifests only. When the transfer happened
manifest_items array Yes The lots on this manifest. Each entry has the same shape as ManifestItemResponse on the manifest_items endpoint, which renders from the same partial
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Sales Histories

2 endpoints
The Sales window, is where you can see and sort through all of your previous transactions. Use the filters on the left side of the page to sort the transactions however you'd like. You can use this tab when looking for a return or if you'd like to dive into the details of a specific transaction.
GET /api/v3/venue/sales_histories

Get all sales histories for a venue

When no filters are provided, results are limited to sales ordered since the start of day (venue-local) two days ago. The applied ordered_at_gt value is echoed in the response along with default_filter_applied.

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[ordered_at_gt] datestring query No Limit results to sales ordered after this time (defaults to the start of day, venue-local, two days ago when no other filters are given)
q[updated_at_gt] datestring query No Only return sales updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return sales updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[ordered_at_lt] datestring query No Only return sales ordered before this time
q[customer_id_eq] integer query No Only return sales for this customer id
q[incoming_order_id_eq] integer query No Only return the sale for this incoming order id
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/sales_histories" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
order_type string No Default: regular
order_source string No Default: walk_in
incoming_order_id integer No
order_origin string(30) No
customer_id integer No
age integer No
gender string No
terminal_till_id integer No
order_id integer No
venue_name string No
customer_name string No
payment_source string No
payment_type string No
ordered_at datetime No
local_time datetime No
fulfilled_at datetime No
discount integer No
service_charge integer No
delivery_charge integer No
gratuity integer No
tax integer No
total integer No
open_credits integer No
restricted_credits integer No
promo_credits integer No
gopago_credits integer No
merchant_credits integer No
location string No
subtotal integer No
adjusted_time datetime No
venue_timezone string No
employee_name string No
status string No
local_order_id string No
fraction_of_day string No
bag_fee integer No Default: 0
terminal_id integer No
tuid string No
order_discount integer No Default: 0
pos_coupon_id integer No
pos_coupon_value integer No
cc_type string No
full_credit integer No Default: 0
full_discount integer No Default: 0
coupon_count integer Yes Default: 0
created_at datetime Yes
updated_at datetime Yes
revisions integer Yes Default: 0
description string No
proc_time integer No Default: 0
cost integer No Default: 0
sts_status string No
medical_card string No
medical_card_exp date No
api_id string No
breadcrumbs text No
is_caregiver boolean No Default: false
medical_card_effective date No
pmp_file string No
client_type string(20) No
fulfillment_method string(20) No
fulfillment_sub_type string(30) No
integrator_id integer No
api_version string(10) No
client_version string No

Response Example

{
  "total_records": 36,
  "current_page": 1,
  "total_pages": 36,
  "per_page": 1,
  "sales_histories": [
    {
      "id": 49053313,
      "is_medical": false,
      "ordered_at": "2022-06-14T19:37:28.000Z",
      "ordered_at_local": "2022-06-14T12:37:28.000-07:00",
      "sale_type": "sale",
      "order_source": "walk_in",
      "terminal_till_id": 4676,
      "local_order_id": "3264-3-8881-123727",
      "customer_id": 544773,
      "user_id": 12777,
      "sub_total": 1127,
      "discount": 260,
      "tax": 173,
      "total": 1040,
      "cost": 275,
      "items": [
        {
          "item_id": 91312852,
          "sales_history_id": 49053313,
          "product_id": 902427,
          "inventory_id": 210111,
          "lot_id": 261876,
          "lot_number": "WAR414871.IN5SAJM",
          "is_marijuana": true,
          "quantity": 1,
          "weight": "1.0",
          "cost": 275,
          "sub_total": 1127,
          "tax": 173,
          "discount": 260,
          "sku": "WAJ416746.IN5NZ29",
          "category": "Bulk Flower",
          "brand": "High Five Farms",
          "product_name": "High Five Farms - Ghost Train Haze",
          "family_name": "Flower",
          "unit_of_weight": "gm",
          "tier_name": "Top Shelf Tier",
          "discount_list": [
            {
              "coupon_id": 47769,
              "coupon_name": "test happy hour"
            }
          ],
          "total": 1040
        }
      ],
      "sales_tenders": [
        {
          "sales_tender_id": 11738303,
          "subtotal": 867,
          "tax": 173,
          "total": 1040,
          "payment_method_name": "Cash"
        }
      ],
      "created_at": "2022-06-14T19:37:30.000Z",
      "updated_at": "2022-06-14T19:37:30.000Z"
    }
  ]
}
GET /api/v3/venue/sales_histories/{id}

Get a sales history for a venue

Parameters

Name Type In Required Description
id integer path Yes Sales History ID

Example

curl -X GET "https://app.posabit.com/api/v3/venue/sales_histories/{id}" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
order_type string No Default: regular
order_source string No Default: walk_in
incoming_order_id integer No
order_origin string(30) No
customer_id integer No
age integer No
gender string No
terminal_till_id integer No
order_id integer No
venue_name string No
customer_name string No
payment_source string No
payment_type string No
ordered_at datetime No
local_time datetime No
fulfilled_at datetime No
discount integer No
service_charge integer No
delivery_charge integer No
gratuity integer No
tax integer No
total integer No
open_credits integer No
restricted_credits integer No
promo_credits integer No
gopago_credits integer No
merchant_credits integer No
location string No
subtotal integer No
adjusted_time datetime No
venue_timezone string No
employee_name string No
status string No
local_order_id string No
fraction_of_day string No
bag_fee integer No Default: 0
terminal_id integer No
tuid string No
order_discount integer No Default: 0
pos_coupon_id integer No
pos_coupon_value integer No
cc_type string No
full_credit integer No Default: 0
full_discount integer No Default: 0
coupon_count integer Yes Default: 0
created_at datetime Yes
updated_at datetime Yes
revisions integer Yes Default: 0
description string No
proc_time integer No Default: 0
cost integer No Default: 0
sts_status string No
medical_card string No
medical_card_exp date No
api_id string No
breadcrumbs text No
is_caregiver boolean No Default: false
medical_card_effective date No
pmp_file string No
client_type string(20) No
fulfillment_method string(20) No
fulfillment_sub_type string(30) No
integrator_id integer No
api_version string(10) No
client_version string No

Models

SalesHistoryListResponse

Paginated list of completed sales.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
ordered_at_gt string No The ordered_at lower bound actually applied, whether supplied or defaulted. Omitted when no bound applies
default_filter_applied boolean No True when no bounding filter was supplied and the default two-day window was applied
sales_histories array (SalesHistory) Yes Sales
SalesHistoryResponse

A single sale.

Property Type Required Description
sales_history SalesHistory Yes The sale
SalesHistory

A completed sale. Fields marked Enterprise only require advanced_sales_access on the integrator; without it the sale is reduced to its identity, timing and total, and items carry only their basic fields.

Property Type Required Description
id integer Yes Sale id
ordered_at datetime No When the sale was placed, in UTC
ordered_at_local datetime No When the sale was placed, in the venue's timezone
sale_type string No Either sale or refund
total integer No Sale total in cents
user_id integer No Id of the employee who rang the sale
is_medical boolean No Enterprise only. Whether this was a medical sale
order_source string No Enterprise only. Channel the order came from
status string No Enterprise only. Sale status
terminal_id integer No Enterprise only. Terminal the sale was rung on
terminal_till_id integer No Enterprise only. Till the sale was rung against
local_order_id integer No Enterprise only. Order number local to the venue
incoming_order_id integer No Enterprise only. Incoming order this sale fulfilled, when it came from one
customer_id integer No Enterprise only. Customer id
sub_total integer No Enterprise only. Subtotal in cents, before discount and tax
discount integer No Enterprise only. Order level discount in cents
tax integer No Enterprise only. Tax in cents
cost integer No Enterprise only. Cost of goods in cents
sales_tenders array (SalesTender) No Enterprise only. How the sale was paid for
items array (SalesHistoryItem) Yes Line items
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
SalesHistoryItem

A line item on a sale. Fields marked Enterprise only require advanced_sales_access.

Property Type Required Description
item_id integer Yes Line item id
sales_history_id integer No Id of the sale this line belongs to
product_id integer No Product id
product_name string No Product name
inventory_id integer No Inventory SKU id, resolved through the lot. Null when the line has no lot
total integer No Line total in cents
quantity string No Enterprise only. Quantity sold
weight string No Enterprise only. Quantity per unit
lot_id integer No Enterprise only. Manifest item (lot) id
lot_number string No Enterprise only. Lot number
sku string No Enterprise only. Lot barcode
is_marijuana boolean No Enterprise only. Whether the item is cannabis
unit_weight string No Enterprise only. Weight of one unit, from the lot
unit_of_weight string No Enterprise only. Unit the weight is expressed in
weight_in_grams string No Enterprise only. Unit weight converted to grams
cost integer No Enterprise only. Cost of goods in cents
sub_total integer No Enterprise only. Line price in cents before discount and tax
tax integer No Enterprise only. Line tax in cents
discount integer No Enterprise only. Line discount in cents
category string No Enterprise only. Product type name
brand string No Enterprise only. Product brand name
family_name string No Enterprise only. Product family name
tier_name string No Enterprise only. Pricing tier the line was sold at
discount_list array (SalesItemDiscount) No Enterprise only. Discounts applied to this line
SalesItemDiscount

A discount applied to a line item.

Property Type Required Description
coupon_id integer No Discount id, matching the coupons endpoint. Null if the discount has since been deleted
coupon_name string No Discount name as recorded at the time of sale
SalesTender

One payment against a sale. A sale may be split across several.

Property Type Required Description
sales_tender_id integer Yes Tender id
payment_method_name string No Payment method used
subtotal integer No Subtotal covered by this tender, in cents
tax integer No Tax covered by this tender, in cents
total integer No Total value of this tender, in cents

Suppliers

1 endpoints
GET /api/v3/venue/suppliers

Get the venue's suppliers

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return suppliers updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return suppliers updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[used_eq] boolean query No When true, only return suppliers that have a manifest at this venue
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/suppliers" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
vendor_id integer No
name string No
license_number string No
telephone_number string(50) No
email string(50) No
inv_notify_emails string No
address string No
city string No
state string(25) No
zipcode string(25) No
country string No Default: US
notes text No
created_at datetime No
updated_at datetime No
api_id string No
deactivated boolean No Default: false
type string No
inheritor_id integer No
manifest_freq_in_days integer No
lead_time integer No
velocity_days integer Yes Default: 30
manifests_count integer Yes Default: 0
last_adj_levels datetime No
transporter_id string No
excise_tax boolean Yes Default: false
color string(7) No Default: #117671
certificate_number string No
notification_day string No Default: Sunday
is_default boolean No Default: false
core_supplier_id integer No

Response Example

{
  "total_records": 104,
  "current_page": 1,
  "total_pages": 104,
  "per_page": 1,
  "suppliers": [
    {
      "id": 123456,
      "merchant_id": 1111,
      "name": "POSaBIT Farms",
      "license_number": "12345",
      "telephone_number": "5551234567",
      "email": "",
      "address": "123 Test Ln",
      "city": "Seattle",
      "state": "WA",
      "zipcode": "12345",
      "country": "US",
      "notes": "",
      "created_at": "2022-02-14T04:08:30.000Z",
      "updated_at": "2022-03-31T18:56:49.000Z",
      "deactivated": false,
      "manifest_freq_in_days": 13,
      "lead_time": 2,
      "velocity_days": 30,
      "manifests_count": 4,
      "last_adj_levels": null
    }
  ]
}

Models

SupplierListResponse

Paginated list of the venue's suppliers.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
suppliers array (Supplier) Yes Suppliers
Supplier

A supplier.

Property Type Required Description
id integer Yes Supplier id. Discounts scoped to a supplier match on this
merchant_id integer No Merchant id
vendor_id integer No Vendor id, when the supplier is linked to a connected vendor
core_supplier_id integer No Shared catalog supplier id
name string No Supplier name
license_number string No License number
certificate_number string No Certificate number
telephone_number string No Telephone number
email string No Contact email
inv_notify_emails string No Comma separated emails notified about inventory levels
address string No Street address
city string No City
state string No State
zipcode string No ZIP code
country string No Country
notes string No Free-text notes
color string No Display colour
deactivated boolean No Whether the supplier is deactivated
is_default boolean No Whether this is the venue's default supplier
excise_tax boolean No Whether excise tax applies
manifest_freq_in_days integer No Expected days between manifests
lead_time integer No Order lead time in days
velocity_days integer No Window in days used for velocity calculations
manifests_count integer No Number of manifests from this supplier
last_adj_levels datetime No When inventory levels were last adjusted
notification_day string No Day of week for inventory notifications
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Product Brands

1 endpoints
Check out the Brand library and view sales metrics for any brand, by any date range. Various insights can be easily surfaced with the click of a button to help the store figure out how well different brands are performing throughout the store. Information such as: top selling products, top employee sales, total applied discounts/loyalty rewards, and sales by age and gender are all included.
GET /api/v3/venue/product_brands

Get the venue's product brands

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return product brands updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return product brands updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[used_eq] boolean query No When true, only return brands that have inventory at this venue
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/product_brands" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
abbreviation string No
quality_tier string No
image string No
created_at datetime No
updated_at datetime No
inheritor_id integer No
curated_brand_id integer No
color string(7) No
core_brand_id integer No
image_assocs_count integer No Default: 0
display_name string No

Response Example

{
  "total_records": 297,
  "current_page": 1,
  "total_pages": 297,
  "per_page": 1,
  "product_brands": [
    {
      "id": 8222,
      "merchant_id": 7705,
      "name": "High Five Farms",
      "abbreviation": null,
      "image": {
        "url": null,
        "large": {
          "url": null
        },
        "medium": {
          "url": null
        },
        "small": {
          "url": null
        },
        "thumb": {
          "url": null
        }
      },
      "created_at": "2019-10-16T20:37:49.000Z",
      "updated_at": "2019-10-16T20:37:49.000Z",
      "imported_from": "file",
      "curated_brand_id": null
    }
  ]
}

Models

ProductBrandListResponse

Paginated list of the venue's product brands.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
product_brands array (ProductBrand) Yes Product brands
ProductBrand

A product brand.

Property Type Required Description
id integer Yes Brand id. Discounts scoped to a brand match on this
merchant_id integer No Merchant id
name string No Brand name
display_name string No Display name, when it differs from name
abbreviation string No Short form of the name
color string No Display colour
image BrandImage No Brand image and its size variants
image_assocs_count integer No Number of images associated with the brand
curated_brand_id integer No Curated catalog brand id
core_brand_id integer No Shared catalog brand id
imported_from string No Source system, when the brand was imported
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
BrandImage

A brand image. Every variant is present; url is null when no image has been uploaded.

Property Type Required Description
url string No Original image URL
large BrandImageVariant No Large variant
medium BrandImageVariant No Medium variant
small BrandImageVariant No Small variant
thumb BrandImageVariant No Thumbnail variant
BrandImageVariant

One rendered size of a brand image.

Property Type Required Description
url string No Image URL, null when no image has been uploaded

Product Tags

1 endpoints
Product tags can be created at either the venue or merchant level. These tags can be used when setting up discounts as well as provide in-depth sales data for a specific group of products. First you'll create your tag(s), then you can assign products to each tag! Tags can be added to products one by one or you can use our bulk tagging feature that allows you to filter and apply tags to a group of products. <ul><li>Venue Tags: These tags are specific to your store and cannot be seen by any other venue within your merchant account.</li> <li>Merchant Tags: These tags are shared across all venues within your merchant account.</li></ul>
GET /api/v3/venue/product_tags

Get the venue's product tags

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return product tags updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return product tags updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/product_tags" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
active boolean No Default: true
pos_enabled boolean Yes Default: true
manager_approval boolean Yes Default: false
description string(500) No
taggings_count integer No Default: 0
created_at datetime Yes
updated_at datetime Yes
color string(7) No

Response Example

{
  "total_records": 510,
  "current_page": 1,
  "total_pages": 510,
  "per_page": 1,
  "product_tags": [
    {
      "id": 26439,
      "merchant_id": 7684,
      "venue_id": null,
      "name": "$1offlighter",
      "active": true,
      "pos_enabled": true,
      "description": null,
      "taggings_count": 16,
      "created_at": "2023-07-31T17:29:33.000Z",
      "updated_at": "2023-07-31T17:29:34.000Z",
      "color": "#674E21",
      "qr_code": {
        "url": "https://pbit-staging.s3.amazonaws.com/uploads/ptag_26439.png"
      }
    }
  ]
}

Models

ProductTagListResponse

Paginated list of the product tags available to the venue.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
product_tags array (ProductTag) Yes Product tags
ProductTag

A product tag.

Property Type Required Description
id integer Yes Tag id. Discounts scoped to product tags match on this, and it is what menu feed items report in tag_ids
merchant_id integer No Merchant id
venue_id integer No Venue id when the tag belongs to a single venue, null when it is merchant wide
name string No Tag name
description string No Tag description
color string No Display colour
active boolean No Whether the tag is active
pos_enabled boolean No Whether the tag is selectable in the POS
taggings_count integer No Number of products carrying the tag
qr_code TagQrCode No Generated QR code image
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
TagQrCode

A generated QR code image.

Property Type Required Description
url string No Image URL, null when no QR code has been generated

Product Types

1 endpoints
Product types are used to classify and group like products. They should be set up upon installation and maintained as you create and add new product types. It is important to take extra care when configuring each type and ensure compliance-related settings such as purchase limits and taxes are properly set.
GET /api/v3/venue/product_types

Get the venue's product types

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return product types updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return product types updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/product_types" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
description string No
ext_name string No
color string(7) No Default: #00ADEE
image string No
created_at datetime No
updated_at datetime No
is_marijuana boolean Yes Default: false
edit_weight boolean No Default: false
edit_test_results boolean No Default: false
edit_concentrate_type boolean No Default: false
is_default boolean No Default: false
weighable boolean Yes Default: false
products_count integer No Default: 0
inheritor_id integer No
test_result_unit string No Default: %
family_id integer No
tier_pricing string No
min_threshold integer No
aged_days integer Yes Default: 90
image_assocs_count integer Yes Default: 0
combine_weights boolean No Default: false

Response Example

{
  "total_records": 90,
  "current_page": 1,
  "total_pages": 18,
  "per_page": 5,
  "product_types": [
    {
      "id": 3673,
      "name": "Default",
      "description": null,
      "created_at": "2018-08-08T17:28:52.000Z",
      "updated_at": "2023-01-06T17:08:09.000Z",
      "is_marijuana": true,
      "weighable": false,
      "family_id": 2,
      "family_name": "Flower"
    }
  ]
}

Models

ProductTypeListResponse

Paginated list of the venue's product types.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
product_types array (ProductType) Yes Product types
ProductType

A product type.

Property Type Required Description
id integer Yes Product type id. Discounts scoped to a product type match on this
name string No Product type name
description string No Product type description
is_marijuana boolean No Whether products of this type are cannabis
weighable boolean No Whether products of this type are sold by weight
family_id integer No Product family id
family_name string No Product family name
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Product Strains

1 endpoints
Under the Product Strain tab, you can create new strain names ahead of time when you know you are expecting new product, and manage strains to ensure your library remains free of duplicate names with our handy strain migration tool.
GET /api/v3/venue/product_strains

Get the venue's product strains

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return product strains updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return product strains updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[used_eq] boolean query No When true, only return strains that have inventory at this venue
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/product_strains" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
created_at datetime No
updated_at datetime No
inheritor_id integer No
color string(7) No Default: #A8A8A8
sanitized_name string No
image_assocs_count integer No Default: 0

Response Example

{
  "total_records": 532,
  "current_page": 1,
  "total_pages": 532,
  "per_page": 1,
  "product_strains": [
    {
      "id": 32041,
      "merchant_id": 7705,
      "name": "Ghost Train Haze",
      "created_at": "2019-10-16T20:37:49.000Z",
      "updated_at": "2019-10-16T20:37:49.000Z",
      "imported_from": "file"
    }
  ]
}

Models

ProductStrainListResponse

Paginated list of the venue's product strains.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
product_strains array (ProductStrain) Yes Product strains
ProductStrain

A product strain.

Property Type Required Description
id integer Yes Strain id. Discounts scoped to a strain match on this
merchant_id integer No Merchant id
name string No Strain name
sanitized_name string No Name with punctuation and spacing removed, used for matching
color string No Display colour
image_assocs_count integer No Number of images associated with the strain
imported_from string No Source system, when the strain was imported
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Terminal Tills

1 endpoints
GET /api/v3/venue/terminal_tills

Get all terminal tills for a venue

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return terminal tills updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return terminal tills updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[terminal_id_eq] integer query No Only return tills for this terminal id
q[aasm_state_eq] string query No Only return tills in this state: open, reopened, pending, discrepancy, closed, reconciled. Also accepted as q[state_eq]
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/terminal_tills" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
aasm_state string No Default: open
terminal_id integer Yes
till_ref string Yes
start_time datetime No
end_time datetime No
start_amount integer Yes Default: 0
end_amount integer Yes Default: 0
end_calc_amount integer Yes Default: 0
left_in_drawer integer Yes Default: 0
expected_amount integer No Default: 0
notes text No
opened_by string No
closed_by string No
review_later boolean No
reviewed_by string No
reviewed_at datetime No
created_at datetime Yes
updated_at datetime Yes
terminal_data text No
oc1 integer No
oc5 integer No
oc10 integer No
oc25 integer No
od1 integer No
od5 integer No
od10 integer No
od20 integer No
od50 integer No
od100 integer No
cc1 integer No
cc5 integer No
cc10 integer No
cc25 integer No
cd1 integer No
cd5 integer No
cd10 integer No
cd20 integer No
cd50 integer No
cd100 integer No
open_notes text No
rounding_total integer No

Response Example

{
  "total_records": 1408,
  "current_page": 1,
  "total_pages": 1408,
  "per_page": 1,
  "terminal_tills": [
    {
      "id": 1673,
      "terminal_id": 8216,
      "state": "pending",
      "till_ref": "326411571689226811",
      "start_time": "2019-10-21T20:20:26.000Z",
      "end_time": "2019-10-21T22:11:54.000Z",
      "start_amount": 20000,
      "end_amount": 0,
      "left_in_drawer": 0,
      "notes": "",
      "opened_by": "Andy Sweet",
      "closed_by": "Andy Sweet",
      "created_at": "2019-10-21T20:20:27.000Z",
      "updated_at": "2019-10-21T22:11:55.000Z",
      "adjustments": []
    }
  ]
}

Models

TerminalTillListResponse

Paginated list of the venue's terminal tills.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
terminal_tills array (TerminalTill) Yes Terminal tills
TerminalTill

A till session on a terminal, from open to reconcile. Amounts are in cents.

Property Type Required Description
id integer Yes Till id
terminal_id integer No Terminal the till belongs to
till_ref string No Till reference
state string No One of: open, reopened, pending, discrepancy, closed, reconciled
start_time datetime No When the till was opened
end_time datetime No When the till was closed
start_amount integer No Cash in the drawer at open
end_amount integer No Cash counted at close
left_in_drawer integer No Cash left in the drawer after close
notes string No Free-text notes
opened_by string No Who opened the till. Requires employee_data_access on the venue token
closed_by string No Who closed the till. Requires employee_data_access on the venue token
adjustments array (TerminalTillAdjustment) Yes Paid in and paid out movements against this till
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
TerminalTillAdjustment

Cash added to or removed from a till outside of a sale.

Property Type Required Description
id integer Yes Adjustment id
adjustment_type string No Paid In when the amount is positive, Paid Out when negative
amount integer No Signed amount in cents
reason string No Reason given
adjusted_by string No Full name of the employee who made the adjustment
adjusted_at datetime No When the adjustment was made
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Users

1 endpoints
GET /api/v3/venue/users

Get all users for a venue

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return employees updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return employees updated before this time, e.g. q[updated_at_lt]='2019-07-01'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/users" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
company string No
first_name string No
last_name string No
language string(5) Yes Default: en
created_at datetime No
updated_at datetime No
telephone string No Default:
email string Yes Default:
business_type integer No
address string No
city string No
state string No
zip string No
bank_routing integer No
bank_account integer No
ein integer No
perm_level integer No Default: 100
first_login boolean No Default: true
user_image_source string No
active boolean No Default: true
ratings integer No
is_signed_in boolean No
session_timeout_value integer No Default: 24
session_timeout_unit integer No Default: 1
credit_discount_validation_option integer No Default: 1
est_monthly_sales float No
avg_ticket_transaction float No
delivery_minimum integer No
delivery_fee integer No
menu_creation_fee string No
current_business_bank string No
current_credit_card_processor string No
other_social_info string No
sales_code string No
shipping_option integer No
customer_id integer No
encrypted_password string(128) Yes Default:
confirmation_token string No
confirmed_at datetime No
confirmation_sent_at datetime No
reset_password_token string No
remember_token string No
remember_created_at datetime No
current_sign_in_at datetime No
current_sign_in_ip string No
last_sign_in_ip string No
last_sign_in_at datetime No
reset_password_sent_at datetime No
temporary_initial_password string No
uid string No
nfc string No
last_password_reset datetime No
failed_login_timeout datetime No
sts_api_key string No
sts_api_key_valid boolean No

Response Example

{
  "total_records": 10,
  "current_page": 1,
  "total_pages": 10,
  "per_page": 1,
  "users": [
    {
      "id": 12926,
      "first_name": "Budtender 2",
      "last_name": "Budtender 2",
      "perm_level": "none",
      "access_level": "cashier",
      "email": "budtender2@posabit.com",
      "created_at": "2019-11-08T00:54:36.000Z",
      "updated_at": "2021-04-19T21:25:19.000Z"
    }
  ]
}

Models

User

A User (venue employee).

Property Type Required Description
id integer Yes Employee Id
first_name string No First Name (requires employee_data_access)
last_name string No Last Name (requires employee_data_access)
email string No Email (requires employee_data_access)
perm_level string No Permission level name
access_level string No Access level name for this venue
created_at datetime No Created At
updated_at datetime No Updated At
EmployeeList

Paginated list of venue employees.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
users array Yes User

Venue Rooms

1 endpoints
GET /api/v3/venue/venue_rooms

Get the venue's rooms

Parameters

Name Type In Required Description
page integer query No Page Number
per_page integer query No Results per page (default 1000)
q[updated_at_gt] datestring query No Only return venue rooms updated after this time, e.g. q[updated_at_gt]='2019-07-01'
q[updated_at_lt] datestring query No Only return venue rooms updated before this time, e.g. q[updated_at_lt]='2019-07-01'
q[s] string query No Sort order, e.g. q[s]='updated_at desc'

Example

curl -X GET "https://app.posabit.com/api/v3/venue/venue_rooms" \
  -H "Authorization: Basic BASE64(INTEGRATOR_TOKEN:VENUE_TOKEN)" \
  -H "Accept: application/json"

Responses

Status Description
200 Success
401 Unauthorized

Response Fields

Field Type Required Description
name string No
pos_visible boolean No Default: true
default boolean No Default: false
description string No
color string No Default: #00ADEE
created_at datetime No
updated_at datetime No
api_id string No
ecommerce_visible boolean Yes Default: true
updated_by string No
created_by string No
active boolean No Default: true

Response Example

{
  "total_records": 11,
  "current_page": 1,
  "total_pages": 4,
  "per_page": 3,
  "venue_rooms": [
    {
      "id": 14,
      "name": "Drawer #1",
      "pos_visible": true,
      "description": "",
      "color": "#00ADEE",
      "created_at": "2018-08-13T20:55:54.000Z",
      "updated_at": "2024-06-24T20:52:17.000Z",
      "ecommerce_visible": true
    },
    {
      "id": 15,
      "name": "Drawer #2",
      "pos_visible": true,
      "description": "",
      "color": "#ffd966",
      "created_at": "2018-08-13T20:56:08.000Z",
      "updated_at": "2022-04-18T20:31:22.000Z",
      "ecommerce_visible": true
    },
    {
      "id": 16,
      "name": "Drawer #3",
      "pos_visible": true,
      "description": "",
      "color": "#f9cb9c",
      "created_at": "2018-08-13T21:01:17.000Z",
      "updated_at": "2022-04-18T20:31:22.000Z",
      "ecommerce_visible": true
    }
  ]
}

Models

VenueRoomListResponse

Paginated list of the venue's rooms.

Property Type Required Description
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
venue_rooms array (VenueRoom) Yes Venue rooms
VenueRoom

A room within the venue. Every venue has a "Default" room.

Property Type Required Description
id integer Yes Room id. Discounts scoped to a room match on this
name string No Room name
description string No Room description
color string No Display colour
pos_visible boolean No Whether the room is selectable in the POS
ecommerce_visible boolean No Whether inventory in this room is published to e-commerce
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp

Models

0 endpoints

Models

CouponCustomerListResponse

Paginated list of the customers a private discount has been assigned to.

Property Type Required Description
code integer No Legacy status field, always 1
total_records integer No Total number of matching records
current_page integer No Current page number
total_pages integer No Total number of pages
per_page integer No Results per page
coupon_customers array (CouponCustomer) Yes Assignments
CouponCustomerResponse

A single assignment, as returned by create and update.

Property Type Required Description
code integer No Legacy status field, always 1
coupon_customer CouponCustomer Yes The assignment. The nested customer object is present on the index action only
CouponCustomer

An assignment of a private discount to one customer.

Property Type Required Description
id integer Yes Assignment id
coupon_id integer No Discount id
customer_id integer No Customer id
redeemed boolean No Whether the customer has redeemed it
redeemed_at datetime No When it was redeemed
expires_at datetime No When the assignment expires
active boolean No Whether the assignment is active
notes string No Free-text notes
created_by_type string No Class of the actor that created the assignment
created_by_id integer No Id of the actor that created the assignment
customer CouponCustomerSummary No Basic customer details. Returned by the index action only
created_at datetime No Created timestamp
updated_at datetime No Updated timestamp
CouponCustomerSummary

The customer an assignment points at.

Property Type Required Description
id integer Yes Customer id
first_name string No First name
last_name string No Last name
telephone string No Telephone
email string No Email