POSaBIT
Point of Sale
Overview
POSaBIt Point-of-Sale API endpoints. Allows for the ability to read and update inventory, manifests, coupons, customers and transaction data.
Setup
Base URL:
Staging Env | Production Env |
---|---|
https://staging-app.posabit.com/api | https://app.posabit.com/api |
Requirements
- Active POSaBIT merchant account
- Active POSaBIT venue API Token
POSaBIT API Menu
Providing access to a menu partner with POSaBIT requires a few simple steps for the store. Create a menu feed (or re-use an existing feed) the partner will use, if the partner is pulling menu information from POSaBIT. Create an API token for the partner. Share the information with the partner.
The partner will use the information to pull the store’s menu feed and can also use the api_token to push orders to the store, if they have integrated orders with POSaBIT.
Step 1 - Create a menu feed
Follow the directions in Creating a POSaBIT Menu, steps 1-6.
Step 2 - Create an API token
Follow the directions in Creating a POSaBIT Menu, steps 8-9.
Step 3 - Share the information with the partner
Provide the partner the information from the above two steps. They will need: * API Token (e.g. 35uQ1SJ23YdvnBF_pLGUrt ) * Menu feed key (e.g. 6854d0e3-bd04-47ae-9cbc-dbf21060fd38)
How the partner uses this information
The partner will use this information to call the posabit api to get the menu feed as well as to push orders into the POS.
Menu Feed
The POSaBIT menu feed api is just a single call to get menu information as JSON.
The structure of the menu feed is:
menu feed meta data
array of categories
category data
array of products
product data
array of prices (variations of the product)
price data
An example menu feed can be retrieved from our sandbox using:
https://staging-app.posabit.com/api/v1/menu_feeds/
To use the url, you will need the following API Token: 6gnUJZXgtQdXDZn97JkPyQ
The API Token should be passed in the authorization header as a Bearer token (e.g. Bearer 6gnUJZXgtQdXDZn97JkPyQ in the authorization header).
For production, the url would be:
https://app.posabit.com/api/v1/menu_feeds/
The api token would be passed in the authorization header as a bearer token, as above.
Incoming Orders
A 3rd party menu partner can send orders into our POS system using our incoming_order end point. At a high level, it just receives an order header, and the items for the order, including the POSaBIT product_id that is part of the menu feed.
Incoming order staging endpoint: https://staging-app.posabit.com/api/v1/incoming_orders
The incoming_order can use the same api token as above as a Bearer token. See the example payload for an incoming order below.
Swagger Docs for our external api calls: https://app.posabit.com/api-docs/index.html
Menu Feed Description
{
"menu_feed": {
"title": "Menu feed title",
"feed_key": "Menu feed key",
"description": "Menu feed description",
"feed_type": "endpoint",
"menu_groups": [
{
"name": "Group 1 (e.g. Flower)",
"category_guid": "Unique id for category",
"name_template": "internal use for product names",
"combine_weights": "true/false: True: different products of the same brand and strain are combined into 1 product with price variations",
"description": "Category description",
"image": {
"is_default": "true/false: True, this is a default image.",
"og": "URL of original category image.",
"lg": "URL of large category image.",
"md": "URL of medium category image.",
"sm": "URL of small category image."
},
"menu_items": [
{
"id": "Unique ID of product",
"guid": "GUID for product",
"name": "Name of product",
"description": "",
"flower_type": "Flower type",
"brand": "Brand",
"strain": "Strain",
"product_type": "Product Type",
"brand_logo": {
"is_default": "true/false: True, this is a default image. (not specific to brand)",
"og": "URL of original brand image.",
"lg": "URL of large brand image.",
"md": "URL of medium brand image.",
"sm": "URL of small brand image."
},
"product_image": {
"is_default": "true/false: True, this is a default image. (not specific to product)",
"og": "URL of original product image.",
"lg": "URL of large product image.",
"md": "URL of medium product image.",
"sm": "URL of small product image.",
"thumb": "URL of thumbnail product image"
},
"prices": [
{
"id": "product id. It should be used to submit orders",
"name": "product name",
"price_cents": 1100,
"unit": "weight of product (e.g. 3.5)",
"unit_type": "gm",
"quantity_on_hand": "qty on hand"
},
{
"id": "product id 2. Same product just different weight",
"name": "product name",
"price_cents": 1100,
"unit": "weight of product (e.g. 7.0)",
"unit_type": "gm",
"quantity_on_hand": "qty on hand"
}
],
"thc": {
"low": "low thc",
"high": "high thc",
"unit_type": "thc unit (% or mg)"
},
"cbd": {
"low": "low cbd",
"high": "high cbd",
"unit_type": "cbd unit (% or mg)"
}
}
]
}
]
}
}
Incoming Order Example Payload
{
"incoming_order": {
"order_type": "delivery",
"first_name": "Suzie3",
"last_name": "Q",
"email": "Suzie@example.com",
"telephone": "2558806107",
"address": "123 Main St",
"city": "Seattle",
"state_abbrev": "WA",
"zipcode": "98033",
"reference_no": "12349",
"source": "kiosk",
"requested_payment_method": "ACH",
"requested_date": "2021-01-12",
"requested_window_start_time": "11am",
"requested_window_end_time": "12am",
"notes": "Knock 4 times then 20 times",
"order_items_attributes": [{
"product_parent_id": "Blazin' - Treehawk Farms - Flower",
"product_id": 900835,
"product_name": "Blazin' - 9lb Hammer (3.5g)",
"product_brand": "Blazin'",
"product_strain": "9lb Hammer",
"weight": "3.5gm",
"price": 4000,
"quantity": 2
}, {
"product_parent_id": "Granddaddy Purple - Solstice - Pre-Roll",
"product_id": 900936,
"product_name": "Solstice - Granddaddy Purple Pre-Roll (1.5g)",
"product_brand": "Solstice",
"product_strain": "Granddaddy Purple",
"weight": "1.5gm",
"price": 2000,
"quantity": 1
}]
}
}
Incoming Order Status Callbacks
When a 3rd party menu partner sends an order through Posabit, they may want to determine if that order has been completed. There are two different ways of doing this: The first way is to ask Posabit for the status of a particular order with the REST API, using its unique identifier (ID). The second way is to provide a Status Callback URL when you send the message through the API.
Here is a code sample that shows how to set a webhook URL for status callbacks on incoming orders:
{
"incoming_order": {
"order_type": "delivery",
"first_name": "Suzie3",
"last_name": "Q",
"email": "Suzie@example.com",
"telephone": "2558806107",
"address": "123 Main St",
"city": "Seattle",
"state_abbrev": "WA",
"status_callback": "https://third.party.com/posabit/orders",
"zipcode": "98033",
"reference_no": "12349",
"source": "kiosk",
"requested_payment_method": "ACH",
"requested_date": "2021-01-12",
"requested_window_start_time": "11am",
"requested_window_end_time": "12am",
"notes": "Knock 4 times then 20 times",
"order_items_attributes": [{
"product_parent_id": "Blazin' - Treehawk Farms - Flower",
"product_id": 900835,
"product_name": "Blazin' - 9lb Hammer (3.5g)",
"product_brand": "Blazin'",
"product_strain": "9lb Hammer",
"weight": "3.5gm",
"price": 4000,
"quantity": 2
}, {
"product_parent_id": "Granddaddy Purple - Solstice - Pre-Roll",
"product_id": 900936,
"product_name": "Solstice - Granddaddy Purple Pre-Roll (1.5g)",
"product_brand": "Solstice",
"product_strain": "Granddaddy Purple",
"weight": "1.5gm",
"price": 2000,
"quantity": 1
}]
}
}
Posabit will send an update to that URL every time the status changes; you'll find the status information in the status value. Order Status values include:
- Pending: Awaiting Fulfillment
- Change: The Order has been modified and is waiting for Fulfillment.
- Processing: Processing or Paused by Fulfillment.
- Completed: Completed by Fulfillment and awaiting Delivery.
- En Route: Out for Delivery
- STS Failed: Failed to create STS Delivery
- Delivered: Delivery Completed
- Canceled: Canceled
Your status delivery URL will receive an HTTP POST request with the application/x-www-form-urlencoded content type.
The body of the status delivery message will look similar to the following: ```json { "incoming_order": { "id": 12345, "reference_no": "your_internal_order_id", "status": "pending", "order_type": "pickup" } }
API
GET {token} info
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/{venue_token}/v1/info',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/{venue_token}/v1/info', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/{venue_token}/v1/info", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/{venue_token}/v1/info";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /{venue_token}/v1/info \
-H 'Accept: application/json'
GET /{venue_token}/v1/info
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
Example responses
200 Response
{
"code": 1,
"name": "The Bong Marché",
"license": "C11-0001157-LIC",
"region": "Washington State",
"locale": "en-US",
"vertical": "dispensaries",
"logo_thumb": "https://pbit-qa.s3.amazonaws.com/logos/Venue/thumb_3221_logo.png",
"logo_medium": "https://pbit-qa.s3.amazonaws.com/logos/Venue/medium_3221_logo.png",
"telephone": "5556543211",
"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": 1000,
"tax_rate": "10.0",
"price_included": true
},
{
"id": 4286,
"name": "Bellingham, WA",
"rate": 837,
"tax_rate": "8.375",
"price_included": true
},
{
"id": 4415,
"name": "Excise tax",
"rate": 1500,
"tax_rate": "15.0",
"price_included": true
}
],
"payment_methods": [
"Cash",
"POSaBIT Pay",
"Debit Card",
"Other"
],
"venue_settings": {
"online_order_curbside": "1",
"online_order_delivery": "0"
}
}
401 Response
{
"message": "Invalid Token"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
401 | Unauthorized | Unauthorized | Inline |
Response Schema
GET {token} coupons
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/{venue_token}/v1/coupons',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/{venue_token}/v1/coupons', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/{venue_token}/v1/coupons", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/{venue_token}/v1/coupons";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /{venue_token}/v1/coupons \
-H 'Accept: application/json'
GET /{venue_token}/v1/coupons
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
Example responses
200 Response
{
"code": 1,
"total_records": 111,
"current_page": 1,
"total_pages": 4,
"per_page": 30,
"coupons": [
{
"id": 47370,
"name": "B - Student 5% Off",
"display_name": "B - Student 5% Off",
"kind": "discount",
"amount": 500,
"coupon_type": "percent",
"applies_to": "order",
"auto_apply": false,
"customer_type": ""
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
POST {token} incoming_orders
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
result = RestClient.post '/{venue_token}/v1/incoming_orders',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('/{venue_token}/v1/incoming_orders', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "/{venue_token}/v1/incoming_orders", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePostRequest()
{
string url = "/{venue_token}/v1/incoming_orders";
await PostAsync(null, url);
}
/// Performs a POST Request
public async Task PostAsync(undefined content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute POST request
HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
}
/// Serialize an object to Json
private StringContent SerializeObject(undefined content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X POST /{venue_token}/v1/incoming_orders \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'
POST /{venue_token}/v1/incoming_orders
Body parameter
{
"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
}
]
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
body | body | object | false | none |
Example responses
200 Response
{
"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"
}
]
}
422 Response
{
"errors": [
"Reference no has already been taken"
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
422 | Unprocessable Entity | Unprocessable Content | Inline |
Response Schema
GET {token} incoming_orders
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/{venue_token}/v1/incoming_orders/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/{venue_token}/v1/incoming_orders/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/{venue_token}/v1/incoming_orders/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/{venue_token}/v1/incoming_orders/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /{venue_token}/v1/incoming_orders/{id} \
-H 'Accept: application/json'
GET /{venue_token}/v1/incoming_orders/{id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
id | path | string | true | none |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
POST {token} incoming_quotes
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
result = RestClient.post '/{venue_token}/v1/incoming_quotes',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.post('/{venue_token}/v1/incoming_quotes', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "/{venue_token}/v1/incoming_quotes", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePostRequest()
{
string url = "/{venue_token}/v1/incoming_quotes";
await PostAsync(null, url);
}
/// Performs a POST Request
public async Task PostAsync(undefined content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute POST request
HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
}
/// Serialize an object to Json
private StringContent SerializeObject(undefined content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X POST /{venue_token}/v1/incoming_quotes \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'
POST /{venue_token}/v1/incoming_quotes
Body parameter
{
"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": []
}
]
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
body | body | object | false | none |
Example responses
200 Response
{
"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
}
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET {token} incoming_quotes/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/{venue_token}/v1/incoming_quotes/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/{venue_token}/v1/incoming_quotes/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/{venue_token}/v1/incoming_quotes/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/{venue_token}/v1/incoming_quotes/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /{venue_token}/v1/incoming_quotes/{id} \
-H 'Accept: application/json'
GET /{venue_token}/v1/incoming_quotes/{id}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
id | path | string | true | none |
Example responses
200 Response
{
"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
}
}
}
}
404 Response
{
"error": "Quote not found"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
404 | Not Found | Not Found | Inline |
Response Schema
PUT {token} incoming_quotes
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json'
}
result = RestClient.put '/{venue_token}/v1/incoming_quotes/{reference_id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
r = requests.put('/{venue_token}/v1/incoming_quotes/{reference_id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "/{venue_token}/v1/incoming_quotes/{reference_id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePutRequest()
{
int id = 1;
string url = "/{venue_token}/v1/incoming_quotes/{reference_id}";
var result = await PutAsync(id, null, url);
}
/// Performs a PUT Request
public async Task PutAsync(int id, undefined content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute PUT request
HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);
//Return response
return await DeserializeObject(response);
}
/// Serialize an object to Json
private StringContent SerializeObject(undefined content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X PUT /{venue_token}/v1/incoming_quotes/{reference_id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json'
PUT /{venue_token}/v1/incoming_quotes/{reference_id}
Body parameter
{
"quote": {
"fulfillment": {
"source": "posabit_v2",
"order_type": "online",
"requested_date": "2024-10-03",
"requested_window_start_time": null,
"requested_window_end_time": null,
"tip_amount": "10",
"tip_type": 1,
"processing_fee": 1.5,
"delivery_address": {
"address": "321 Test Lane",
"city": "Seattle",
"state_abbrev": "WA",
"zipcode": "12345"
}
},
"incoming_order_id": "3221-102-19299993",
"customer": {
"first_name": "John",
"last_name": "Doe",
"email": "test@posabit.com",
"telephone": "555-111-2222",
"customer_type": "recreational"
},
"payment": {
"requested_payment_method": "ach"
}
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
reference_id | path | string | true | none |
body | body | object | false | none |
Example responses
200 Response
{
"code": 1,
"quote": {
"reference_no": "3221-1727982977-3f59c5f1",
"incoming_order_id": null,
"venue_id": 3221,
"fulfillment": {
"source": "posabit_v2",
"order_type": "online",
"requested_date": "2024-10-03",
"requested_window_start_time": null,
"requested_window_end_time": null,
"tip_amount": 10,
"tip_type": "1",
"processing_fee": 1,
"tip_calculated": 1000,
"delivery_address": {
"address": "321 Test Lane",
"city": "Seattle",
"state_abbrev": "WA",
"zipcode": "12345"
}
},
"customer": {
"first_name": "John",
"last_name": "Doe",
"email": "test@posabit.com",
"telephone": "5551112222",
"customer_type": "recreational"
},
"payment": {
"requested_payment_method": "ach"
},
"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
}
}
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET menu_feeds
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v1/menu_feeds/{feed_key}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v1/menu_feeds/{feed_key}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/menu_feeds/{feed_key}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/menu_feeds/{feed_key}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/menu_feeds/{feed_key} \
-H 'Accept: application/json'
GET /v1/menu_feeds/{feed_key}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feed_key | path | string | true | none |
Example responses
200 Response
{
"menu_feed": {
"title": "Test Menu Feed",
"feed_key": "aebbfb2a-27a2-4d96-a357-94d23794215e",
"description": "",
"feed_type": "posabit menu",
"menu_groups": [
{
"name": "Flower",
"category_guid": "Tlzs2pMnHzR47C5OIUwC7w",
"name_template": "name",
"combine_weights": true,
"description": "",
"image": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"menu_items": [
{
"id": "(C) Gorilla Glue - Phat Panda - Flower",
"guid": "104e4ca0-d909-468d-8623-9ad184602590",
"name": "Sour Super Haze Alien Fruity Pebble",
"description": "Gets you high.",
"is_medical_only": false,
"tag_list": [
"Sale Day",
"Item Box Test"
],
"flower_type": "sativa",
"brand": "Phat Panda",
"strain": "(C) Gorilla Glue",
"terpenes": [
"Caryophyllene"
],
"effects": [],
"flavors": [],
"product_type": "Flower",
"is_marijuana": true,
"tier_name": "Test tier ",
"brand_logo": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"product_image": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"product_image_v2": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"images": [
{
"name": "Flower",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/web_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
{
"name": "flower 2.png",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2611/flower_2.png",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2611/web_flower_2.png",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2611/medium_flower_2.png",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2611/thumb_flower_2.png"
}
],
"prices": [
{
"id": "855277_Test tier_1g",
"name": "Sour Super Haze Alien Fruity Pebble",
"price_cents": 1500,
"med_price_cents": null,
"unit": "1.0",
"unit_type": "grams",
"quantity_on_hand": "4952.0",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "POSaBIT Producer/Processor"
}
],
"thc": {
"current": "20.0",
"low": "20.0",
"high": "20.0",
"unit_type": "%"
},
"cbd": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"thca": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"cbda": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"total_thc": {
"current": 20,
"low": 20,
"high": 20,
"unit_type": "%"
}
}
]
}
]
}
}
404 Response
{
"error": "Could not find menu feed"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
404 | Not Found | Not Found | Inline |
Response Schema
GET {token} menu_feeds v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/{venue_token}/v2/menu_feeds/{feed_key}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/{venue_token}/v2/menu_feeds/{feed_key}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/{venue_token}/v2/menu_feeds/{feed_key}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/{venue_token}/v2/menu_feeds/{feed_key}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /{venue_token}/v2/menu_feeds/{feed_key} \
-H 'Accept: application/json'
GET /{venue_token}/v2/menu_feeds/{feed_key}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
venue_token | path | string | true | none |
feed_key | path | string | true | none |
Example responses
200 Response
{
"menu_feed": {
"title": "Test Menu Feed",
"feed_key": "aebbfb2a-27a2-4d96-a357-94d23794215e",
"description": "",
"feed_type": "posabit menu",
"menu_groups": [
{
"name": "Flower",
"category_guid": "Tlzs2pMnHzR47C5OIUwC7w",
"name_template": "name",
"combine_weights": true,
"description": "",
"image": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"menu_items": [
{
"id": "(C) Gorilla Glue - Phat Panda - Flower",
"guid": "104e4ca0-d909-468d-8623-9ad184602590",
"name": "Sour Super Haze Alien Fruity Pebble",
"description": "Gets you high.",
"is_medical_only": false,
"tag_list": [
"Sale Day",
"Item Box Test"
],
"flower_type": "sativa",
"brand": "Phat Panda",
"strain": "(C) Gorilla Glue",
"terpenes": [
"Caryophyllene"
],
"effects": [],
"flavors": [],
"product_type": "Flower",
"is_marijuana": true,
"tier_name": "Test tier ",
"brand_logo": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"product_image": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"product_image_v2": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"images": [
{
"name": "Flower",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/web_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
{
"name": "flower 2.png",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2611/flower_2.png",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2611/web_flower_2.png",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2611/medium_flower_2.png",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2611/thumb_flower_2.png"
}
],
"prices": [
{
"id": "855277_Test tier _Weight 8oz",
"name": "Sour Super Haze Alien Fruity Pebble",
"price_cents": 160000,
"med_price_cents": null,
"unit": "8.0",
"unit_type": "ounces",
"quantity_on_hand": "4952.0",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "POSaBIT Producer/Processor"
}
],
"thc": {
"current": "20.0",
"low": "20.0",
"high": "20.0",
"unit_type": "%"
},
"cbd": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"thca": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"cbda": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"total_thc": {
"current": 20,
"low": 20,
"high": 20,
"unit_type": "%"
}
}
]
}
]
}
}
404 Response
{
"error": "Could not find menu feed"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
404 | Not Found | Not Found | Inline |
Response Schema
POST incoming_quotes
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.post '/v1/incoming_quotes',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json; charset=utf-8'
}
r = requests.post('/v1/incoming_quotes', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "/v1/incoming_quotes", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePostRequest()
{
string url = "/v1/incoming_quotes";
string json = @"{
""incoming_quote"": {
""reference_no"": ""REF_NO_1"",
""telephone"": ""555-111-1112"",
""quote_items_attributes"": [
{
""inventory_sku_id"": 214772,
""quantity"": 2,
""weight"": ""7g"",
""quote_item_coupons_attributes"": [
{
""amount"": 500,
""ref_number"": 1234,
""ref_name"": ""discount""
}
]
},
{
""inventory_sku_id"": 214604,
""quantity"": 2
}
]
}
}";
IncomingQuoteRequest content = JsonConvert.DeserializeObject(json);
await PostAsync(content, url);
}
/// Performs a POST Request
public async Task PostAsync(IncomingQuoteRequest content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute POST request
HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
}
/// Serialize an object to Json
private StringContent SerializeObject(IncomingQuoteRequest content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X POST /v1/incoming_quotes \
-H 'Content-Type: application/json' \
-H 'Accept: application/json; charset=utf-8'
POST /v1/incoming_quotes
Create a new incoming quote
Body parameter
{
"incoming_quote": {
"reference_no": "REF_NO_1",
"telephone": "555-111-1112",
"quote_items_attributes": [
{
"inventory_sku_id": 214772,
"quantity": 2,
"weight": "7g",
"quote_item_coupons_attributes": [
{
"amount": 500,
"ref_number": 1234,
"ref_name": "discount"
}
]
},
{
"inventory_sku_id": 214604,
"quantity": 2
}
]
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | IncomingQuoteRequest | true | none |
Example responses
200 Response
{
"code": 1,
"incoming_quote": {
"id": 56,
"reference_no": "REF_NO_1",
"subtotal": 1168,
"tax": 332,
"discount": 500,
"total": 1500,
"telephone": "5551111112",
"customer_id": 279161,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z",
"quote_items": [
{
"item_id": 91,
"inventory_sku_id": 214772,
"product_id": 907088,
"product_name": "Freddy's Fuego - Washington Apple Bulk",
"quantity": 2,
"unit_quantity": "14.0",
"price": null,
"discount": 500,
"tax": 0,
"weight": "7g",
"tier_weight": null,
"coupons": [
{
"id": 20,
"quote_item_id": 91,
"pos_coupon_id": null,
"ref_number": "1234",
"ref_name": "discount",
"amount": 500,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
],
"taxes": [
{
"id": 116,
"tax_id": 4324,
"name": "Oregon Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
},
{
"id": 117,
"tax_id": 4325,
"name": "Portland Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
]
}
]
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | IncomingQuote |
401 | Unauthorized | Unauthorized | Unauthorized |
422 | Unprocessable Entity | Invalid parameters | None |
500 | Internal Server Error | Internal Server Error | None |
GET incoming_quotes/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/incoming_quotes/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/incoming_quotes/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/incoming_quotes/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/incoming_quotes/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/incoming_quotes/{id} \
-H 'Accept: application/json; charset=utf-8'
GET /v1/incoming_quotes/{id}
Returns an incoming quote by id
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Incoming Qutoe ID |
Example responses
200 Response
{
"code": 1,
"incoming_quote": {
"id": 56,
"reference_no": "REF_NO_1",
"subtotal": 1168,
"tax": 332,
"discount": 500,
"total": 1500,
"telephone": "5551111112",
"customer_id": 279161,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z",
"quote_items": [
{
"item_id": 91,
"inventory_sku_id": 214772,
"product_id": 907088,
"product_name": "Freddy's Fuego - Washington Apple Bulk",
"quantity": 2,
"unit_quantity": "14.0",
"price": null,
"discount": 500,
"tax": 0,
"weight": "7g",
"tier_weight": null,
"coupons": [
{
"id": 20,
"quote_item_id": 91,
"pos_coupon_id": null,
"ref_number": "1234",
"ref_name": "discount",
"amount": 500,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
],
"taxes": [
{
"id": 116,
"tax_id": 4324,
"name": "Oregon Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
},
{
"id": 117,
"tax_id": 4325,
"name": "Portland Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
]
}
]
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | IncomingQuote |
401 | Unauthorized | Unauthorized | Unauthorized |
GET customers v1
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/venue/customers',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/venue/customers', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/venue/customers", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/venue/customers";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/venue/customers \
-H 'Accept: application/json; charset=utf-8'
GET /v1/venue/customers
Returns a list of customers
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
Example responses
200 Response
{
"total_records": 475,
"current_page": 1,
"total_pages": 475,
"per_page": 1,
"customers": [
{
"customerId": 279159,
"firstName": "JANE",
"created_at": "2019-10-21T20:21:19.000Z",
"updated_at": "2021-10-05T19:31:24.000Z",
"birthyear": 1992,
"gender": "female",
"phone": "5551111111"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | CustomerResponseV1 |
401 | Unauthorized | Unauthorized | Unauthorized |
GET employees v1
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/venue/employees',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/venue/employees', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/venue/employees", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/venue/employees";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/venue/employees \
-H 'Accept: application/json; charset=utf-8'
GET /v1/venue/employees
Returns a list of employees
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
Example responses
200 Response
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"employees": [
{
"employeeId": 12998,
"firstName": "Jane",
"created_at": "2022-04-21T22:41:04.000Z",
"updated_at": "2022-04-21T22:41:04.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | EmployeeResponse |
401 | Unauthorized | Unauthorized | Unauthorized |
GET inventories v1
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/venue/inventories',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/venue/inventories', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/venue/inventories", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/venue/inventories";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/venue/inventories \
-H 'Accept: application/json; charset=utf-8'
GET /v1/venue/inventories
Returns a list of inventory skus
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
Example responses
200 Response
{
"total_records": 1182,
"current_page": 1,
"total_pages": 1182,
"per_page": 1,
"products": [
{
"productId": 210111,
"name": "High Five Farms - Ghost Train Haze",
"unit": "280.0 gm",
"price": 1300,
"quantityInStock": "0.0",
"vendor": "High Five Farms",
"vendor_license": null,
"brand": "High Five Farms",
"category": "Bulk Flower",
"flowertype": "hybrid",
"concentratetype": null,
"producttype": "hybrid",
"productfamily": "Flower",
"description": "Conducive to concentration and creativity, this sati...",
"image": [
null
],
"active": false,
"bulkitem": true,
"strain": "Ghost Train Haze",
"thcMeasure": "0.0%",
"cbdMeasure": "0.0%",
"sku": "3264-902427",
"discountable": true,
"rooms": [],
"created_at": "2019-10-16T20:37:49.000Z",
"updated_at": "2022-06-14T19:37:38.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | InventoriesResponseV1 |
401 | Unauthorized | Unauthorized | Unauthorized |
GET manifest_items v1
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/venue/manifest_items',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/venue/manifest_items', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/venue/manifest_items", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/venue/manifest_items";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/venue/manifest_items \
-H 'Accept: application/json; charset=utf-8'
GET /v1/venue/manifest_items
Returns a list of manifest items
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
Example responses
200 Response
{
"total_records": 1325,
"current_page": 1,
"total_pages": 1325,
"per_page": 1,
"restocks": [
{
"restockId": 261876,
"parent_id": null,
"utcDate": "2019-10-16T20:37:49.000Z",
"quantity": "396.0",
"quantityInStock": "-1755.422",
"costPerUnit": 275,
"productId": 210111,
"inventoryId": "WAR414871.IN5SAJM",
"thcMeasure": "19.2%",
"cbdMeasure": "0.0%",
"created_at": "2019-10-16T20:37:49.000Z",
"updated_at": "2022-06-14T19:37:31.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ManifestItemsResponseV1 |
401 | Unauthorized | Unauthorized | Unauthorized |
GET sales_histories v1
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/venue/sales_histories',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/venue/sales_histories', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/venue/sales_histories", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/venue/sales_histories";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/venue/sales_histories \
-H 'Accept: application/json; charset=utf-8'
GET /v1/venue/sales_histories
Returns a list of sales history
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
Example responses
200 Response
{
"total_records": 197,
"current_page": 1,
"total_pages": 197,
"per_page": 1,
"tickets": [
{
"ticketId": 49052949,
"isMedical": true,
"utcDate": "2022-01-14T23:52:34.000Z",
"localTime": "2022-01-14T15:52:34.000-08:00",
"ticketType": "sale",
"customerId": 279560,
"employeeId": 12777,
"paymentType": "",
"subTotal": 9498,
"discount": 1900,
"tax": 0,
"total": 7857,
"items": [
{
"ticketItemId": 91311967,
"ticketId": 49052949,
"productId": 318604,
"inventoryId": "WAR421642.INOLNTM",
"quantity": 1,
"weight": "1.0",
"cost": 800,
"subTotal": 2500,
"tax": 0,
"discount": 500,
"discountList": [
{
"couponId": 47831,
"couponName": "buy more than $30 of whatever"
}
],
"total": 2000
}
],
"created_at": "2022-01-14T23:52:36.000Z",
"updated_at": "2022-01-14T23:52:36.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | SalesHistoriesV1 |
401 | Unauthorized | Unauthorized | Unauthorized |
GET incoming_orders/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/incoming_orders/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/incoming_orders/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/incoming_orders/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/incoming_orders/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/incoming_orders/{id} \
-H 'Accept: application/json; charset=utf-8'
GET /v1/incoming_orders/{id}
Returns an incoming order by id
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Incoming Order ID |
Example responses
200 Response
{
"code": 1,
"incoming_order": {
"id": 1857,
"aasm_state": "pending",
"reference_no": "123456",
"first_name": "Snoop",
"last_name": "Dogg",
"source": "online_store",
"order_type": "pickup",
"notes": null,
"delivered_at": null,
"requested_date": null,
"requested_window_start_time": {},
"requested_window_end_time": {},
"requested_payment_method": "debit",
"payment_verified": false,
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
"order_items": [
{
"item_id": 3270,
"product_id": 900835,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Blazin' - 9lb Hammer - 3.5g",
"product_brand": "Trail Blazin'",
"product_strain": "9lb Hammer",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
{
"item_id": 3271,
"product_id": 900875,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Honu - Peanut Butter Cup Sativa 10pk (100mg)",
"product_brand": "Honu",
"product_strain": "Mixed",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | IncomingOrders |
401 | Unauthorized | Unauthorized | Unauthorized |
404 | Not Found | Not Found | None |
422 | Unprocessable Entity | Invalid parameters | None |
500 | Internal Server Error | Internal Server Error | None |
POST incoming_orders
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.post '/v1/incoming_orders',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json; charset=utf-8'
}
r = requests.post('/v1/incoming_orders', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "/v1/incoming_orders", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePostRequest()
{
string url = "/v1/incoming_orders";
string json = @"{
""incoming_order"": {
""order_type"": ""pickup"",
""source"": ""online_store"",
""first_name"": ""Snoop"",
""last_name"": ""Dogg"",
""email"": ""bluedream@deathrow.com"",
""telephone"": ""5551111112"",
""address"": """",
""city"": """",
""state_abbrev"": """",
""zipcode"": """",
""reference_no"": ""123456"",
""requested_payment_method"": ""debit"",
""order_items_attributes"": [
{
""product_parent_id"": ""Blazin' - 9lb Hammer - 3.5g"",
""product_id"": 900835,
""product_name"": ""Blazin' - 9lb Hammer - 3.5g"",
""product_brand"": ""Trail Blazin'"",
""product_strain"": ""9lb Hammer"",
""weight"": null,
""price"": 4000,
""quantity"": 2
},
{
""product_parent_id"": ""Lemon Meringue - Avitas - Flower"",
""product_id"": 900875,
""product_name"": ""Honu - Peanut Butter Cup Sativa 10pk (100mg)"",
""product_brand"": ""Honu"",
""product_strain"": ""Mixed"",
""weight"": null,
""price"": 2999,
""quantity"": 2
}
],
""payment_prepaid"": true,
""payment_source"": ""posabit"",
""payment_reference_id"": ""12345"",
""payment_amount"": 13500
}
}";
IncomingOrdersRequest content = JsonConvert.DeserializeObject(json);
await PostAsync(content, url);
}
/// Performs a POST Request
public async Task PostAsync(IncomingOrdersRequest content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute POST request
HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
}
/// Serialize an object to Json
private StringContent SerializeObject(IncomingOrdersRequest content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X POST /v1/incoming_orders \
-H 'Content-Type: application/json' \
-H 'Accept: application/json; charset=utf-8'
POST /v1/incoming_orders
Create a new incoming order
Body parameter
{
"incoming_order": {
"order_type": "pickup",
"source": "online_store",
"first_name": "Snoop",
"last_name": "Dogg",
"email": "bluedream@deathrow.com",
"telephone": "5551111112",
"address": "",
"city": "",
"state_abbrev": "",
"zipcode": "",
"reference_no": "123456",
"requested_payment_method": "debit",
"order_items_attributes": [
{
"product_parent_id": "Blazin' - 9lb Hammer - 3.5g",
"product_id": 900835,
"product_name": "Blazin' - 9lb Hammer - 3.5g",
"product_brand": "Trail Blazin'",
"product_strain": "9lb Hammer",
"weight": null,
"price": 4000,
"quantity": 2
},
{
"product_parent_id": "Lemon Meringue - Avitas - Flower",
"product_id": 900875,
"product_name": "Honu - Peanut Butter Cup Sativa 10pk (100mg)",
"product_brand": "Honu",
"product_strain": "Mixed",
"weight": null,
"price": 2999,
"quantity": 2
}
],
"payment_prepaid": true,
"payment_source": "posabit",
"payment_reference_id": "12345",
"payment_amount": 13500
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | IncomingOrdersRequest | true | none |
Example responses
200 Response
{
"code": 1,
"incoming_order": {
"id": 1857,
"aasm_state": "pending",
"reference_no": "123456",
"first_name": "Snoop",
"last_name": "Dogg",
"source": "online_store",
"order_type": "pickup",
"notes": null,
"delivered_at": null,
"requested_date": null,
"requested_window_start_time": {},
"requested_window_end_time": {},
"requested_payment_method": "debit",
"payment_verified": false,
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
"order_items": [
{
"item_id": 3270,
"product_id": 900835,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Blazin' - 9lb Hammer - 3.5g",
"product_brand": "Trail Blazin'",
"product_strain": "9lb Hammer",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
{
"item_id": 3271,
"product_id": 900875,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Honu - Peanut Butter Cup Sativa 10pk (100mg)",
"product_brand": "Honu",
"product_strain": "Mixed",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | IncomingOrders |
401 | Unauthorized | Unauthorized | Unauthorized |
422 | Unprocessable Entity | Invalid parameters | None |
500 | Internal Server Error | Internal Server Error | None |
GET info
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v1/info',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v1/info', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v1/info", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v1/info";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v1/info \
-H 'Accept: application/json; charset=utf-8'
GET /v1/info
Returns venue information
Example responses
200 Response
{
"code": 1,
"region": "Oregon",
"locale": "en-US",
"vertical": "dispensaries",
"name": "Oregon Top Shelf",
"logo_thumb": "https://pbit-qa.s3.amazonaws.com/logos/Venue/thumb_3264_logo-ba531584ebfa69b2548e33d3e8b03c94.png",
"logo_medium": "https://pbit-qa.s3.amazonaws.com/logos/Venue/medium_3264_logo-ba531584ebfa69b2548e33d3e8b03c94.png",
"telephone": "5035551234",
"address": "1234 Portland Street, Portland, OR",
"street_address_line_1": "1234 Portland Street",
"city": "Portland",
"state": "OR",
"zip_code": "97035",
"country": "USA",
"timezone": "Pacific Time (US & Canada)",
"latitude": "44.0334",
"longitude": "-123.092",
"domains": [
{
"domain": "app.posabit.com"
}
],
"tax_rates": [
{
"id": 4324,
"name": "Oregon Marijuana Tax",
"rate": 1700,
"tax_rate": "17.0",
"price_included": true
},
{
"id": 4325,
"name": "Portland Marijuana Tax",
"rate": 300,
"tax_rate": "3.0",
"price_included": true
},
{
"id": 4398,
"name": "Bag Tax",
"rate": 0,
"tax_rate": "0.0",
"price_included": true
}
],
"payment_methods": [
"Cash",
"Debit Card",
"Other"
],
"venue_settings": {
"online_order_curbside": "1",
"online_order_delivery": "0"
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Info |
401 | Unauthorized | Unauthorized | Unauthorized |
422 | Unprocessable Entity | Invalid parameters | None |
500 | Internal Server Error | Internal Server Error | None |
GET info v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/info',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/info', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/info", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/info";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/info \
-H 'Accept: application/json'
GET /v2/venue/info
Example responses
200 Response
{
"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"
}
}
401 Response
{
"message": "Invalid Token"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
401 | Unauthorized | Unauthorized | Inline |
Response Schema
GET customers
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/customers',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/customers', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/customers", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/customers";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/customers \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/customers
Returns a list of customers
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[id_number_cont] | query | string | false | Filter where customer ID number contains provided value |
q[telephone_eq] | query | string | false | Filter where telephone equals provided value |
Example responses
200 Response
{
"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
}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | CustomersResponse |
400 | Bad Request | Bad Request | None |
401 | Unauthorized | Unauthorized | None |
422 | Unprocessable Entity | Invalid Parameters | None |
500 | Internal Server Error | Internal Server Error | None |
POST customers
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.post '/v2/venue/customers',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json; charset=utf-8'
}
r = requests.post('/v2/venue/customers', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "/v2/venue/customers", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePostRequest()
{
string url = "/v2/venue/customers";
string json = @"{
""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""
}
}";
CustomerRequest content = JsonConvert.DeserializeObject(json);
await PostAsync(content, url);
}
/// Performs a POST Request
public async Task PostAsync(CustomerRequest content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute POST request
HttpResponseMessage response = await Client.PostAsync(url, jsonContent);
}
/// Serialize an object to Json
private StringContent SerializeObject(CustomerRequest content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X POST /v2/venue/customers \
-H 'Content-Type: application/json' \
-H 'Accept: application/json; charset=utf-8'
POST /v2/venue/customers
Create a new customer
Body parameter
{
"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"
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | CustomerRequest | true | none |
Example responses
200 Response
{
"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
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Customer |
204 | No Content | Record not found | None |
401 | Unauthorized | Unauthorized | Unauthorized |
GET customers/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/customers/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/customers/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/customers/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/customers/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/customers/{id} \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/customers/{id}
Returns a customer by id
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Customer ID |
Example responses
200 Response
{
"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
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Customer |
400 | Bad Request | Bad Request | None |
401 | Unauthorized | Unauthorized | Unauthorized |
422 | Unprocessable Entity | Invalid parameters | None |
500 | Internal Server Error | Internal Server Error | None |
Response Schema
PUT customers/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.put '/v2/venue/customers/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json; charset=utf-8'
}
r = requests.put('/v2/venue/customers/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "/v2/venue/customers/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePutRequest()
{
int id = 1;
string url = "/v2/venue/customers/{id}";
string json = @"{
""customer"": {
""points_adjustment"": ""150""
}
}";
CustomerPut content = JsonConvert.DeserializeObject(json);
var result = await PutAsync(id, content, url);
}
/// Performs a PUT Request
public async Task PutAsync(int id, CustomerPut content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute PUT request
HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);
//Return response
return await DeserializeObject(response);
}
/// Serialize an object to Json
private StringContent SerializeObject(CustomerPut content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X PUT /v2/venue/customers/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json; charset=utf-8'
PUT /v2/venue/customers/{id}
Update an existing customer
Body parameter
{
"customer": {
"points_adjustment": "150"
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Customer ID |
body | body | CustomerPut | true | none |
Example responses
200 Response
{
"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
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Customer |
204 | No Content | Record not found | None |
400 | Bad Request | Bad Request | None |
401 | Unauthorized | Unauthorized | Unauthorized |
GET customer_tags v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/customer_tags',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/customer_tags', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/customer_tags", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/customer_tags";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/customer_tags \
-H 'Accept: application/json'
GET /v2/venue/customer_tags
Update an existing customer
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET customer_queues v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/customer_queues',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/customer_queues', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/customer_queues", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/customer_queues";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/customer_queues \
-H 'Accept: application/json'
GET /v2/venue/customer_queues
Update an existing customer
Example responses
200 Response
{
"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": ""
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET coupons
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/coupons',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/coupons', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/coupons", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/coupons";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/coupons \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/coupons
Returns a list of discounts and rewards
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
Example responses
200 Response
{
"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
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Coupons |
401 | Unauthorized | Unauthorized | Unauthorized |
GET inventories
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/inventories',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/inventories', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/inventories", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/inventories";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/inventories \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/inventories
Returns a list of inventory skus
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
Example responses
200 Response
{
"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"
}
]
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | InventoriesResponse |
401 | Unauthorized | Unauthorized | Unauthorized |
GET inventories/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/inventories/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/inventories/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/inventories/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/inventories/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/inventories/{id} \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/inventories/{id}
Returns an inventory sku
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Inventory Sku ID |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inventory |
401 | Unauthorized | Unauthorized | Unauthorized |
404 | Not Found | Inventory not found | None |
PUT inventories/{id}
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.put '/v2/venue/inventories/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json; charset=utf-8'
}
r = requests.put('/v2/venue/inventories/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "/v2/venue/inventories/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakePutRequest()
{
int id = 1;
string url = "/v2/venue/inventories/{id}";
string json = @"{
""inventory_sku"": {
""med_price"": 1100
}
}";
InventoryRequest content = JsonConvert.DeserializeObject(json);
var result = await PutAsync(id, content, url);
}
/// Performs a PUT Request
public async Task PutAsync(int id, InventoryRequest content, string url)
{
//Serialize Object
StringContent jsonContent = SerializeObject(content);
//Execute PUT request
HttpResponseMessage response = await Client.PutAsync(url + $"/{id}", jsonContent);
//Return response
return await DeserializeObject(response);
}
/// Serialize an object to Json
private StringContent SerializeObject(InventoryRequest content)
{
//Serialize Object
string jsonObject = JsonConvert.SerializeObject(content);
//Create Json UTF8 String Content
return new StringContent(jsonObject, Encoding.UTF8, "application/json");
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X PUT /v2/venue/inventories/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json; charset=utf-8'
PUT /v2/venue/inventories/{id}
Update an inventory sku
Body parameter
{
"inventory_sku": {
"med_price": 1100
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | integer(int32) | true | Inventory Sku ID |
body | body | InventoryRequest | true | none |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inventory |
401 | Unauthorized | Unauthorized | Unauthorized |
404 | Not Found | Inventory not found | None |
422 | Unprocessable Entity | No valid attributes to update | None |
GET inventory_transactions
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/inventory_transactions',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/inventory_transactions', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/inventory_transactions", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/inventory_transactions";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/inventory_transactions \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/inventory_transactions
Returns a list of inventory transactions
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
q[manifest_item_id_eq] | query | integer(int32) | false | Specify manifest item id |
q[transaction_type_eq] | query | string | false | Query by transaction type |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
q[order_id_eq] | query | integer(int32) | false | Specify order id |
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
Example responses
200 Response
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"inventory_transactions": [
{
"id": 747285,
"manifest_item_id": 276279,
"sku_id": 214597,
"transaction_type": "adjustment",
"order_id": 25,
"order_type": "Inventory::Audit",
"quantity": "0.0",
"reason": "entry_error",
"updated_by": "Braden",
"note": null,
"cost_diff": 0,
"created_at": "2022-02-08",
"updated_at": "2022-02-08T00:07:18.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | InventoryTransactions |
401 | Unauthorized | Unauthorized | Unauthorized |
GET manifests
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/manifests',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/manifests', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/manifests", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/manifests";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/manifests \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/manifests
Returns a list of manifests and its manifest items
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
q[aasm_state_eq] | query | string | false | Query for manifests in a specified state |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Manifests |
401 | Unauthorized | Unauthorized | Unauthorized |
GET manifest_items
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/manifest_items',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/manifest_items', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/manifest_items", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/manifest_items";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/manifest_items \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/manifest_items
Returns a list of manifest items
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
q[aasm_state_eq] | query | string | false | Query for manifest items in a specified state |
q[quantity_on_hand_gt] | query | integer(int32) | false | Query for manifest items where quantity on hand is greater than |
q[quantity_on_hand_lt] | query | integer(int32) | false | Query for manifest items where quantity on hand is less than |
q[quantity_on_hand_eq] | query | integer(int32) | false | Query for manifest items where quantity on hand equals |
Example responses
200 Response
{
"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"
}
]
}
401 Response
{
"message": "Invalid Token"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ManifestItems |
401 | Unauthorized | Unauthorized | Unauthorized |
GET menu_feeds v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/menu_feeds/{feed_key}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/menu_feeds/{feed_key}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/menu_feeds/{feed_key}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/menu_feeds/{feed_key}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/menu_feeds/{feed_key} \
-H 'Accept: application/json'
GET /v2/menu_feeds/{feed_key}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
feed_key | path | string | true | none |
Example responses
200 Response
{
"menu_feed": {
"title": "Test Menu Feed",
"feed_key": "aebbfb2a-27a2-4d96-a357-94d23794215e",
"description": "",
"feed_type": "posabit menu",
"menu_groups": [
{
"name": "Flower",
"category_guid": "Tlzs2pMnHzR47C5OIUwC7w",
"name_template": "name",
"combine_weights": true,
"description": "",
"image": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"menu_items": [
{
"id": "(C) Gorilla Glue - Phat Panda - Flower",
"guid": "104e4ca0-d909-468d-8623-9ad184602590",
"name": "Sour Super Haze Alien Fruity Pebble",
"description": "Gets you high.",
"is_medical_only": false,
"tag_list": [
"Sale Day",
"Item Box Test"
],
"flower_type": "sativa",
"brand": "Phat Panda",
"strain": "(C) Gorilla Glue",
"terpenes": [
"Caryophyllene"
],
"effects": [],
"flavors": [],
"product_type": "Flower",
"is_marijuana": true,
"tier_name": "Test tier ",
"brand_logo": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"product_image": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"product_image_v2": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/large_image.jpg",
"sm": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
"images": [
{
"name": "Flower",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2307/image.jpg",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2307/web_image.jpg",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2307/medium_image.jpg",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2307/thumb_image.jpg"
},
{
"name": "flower 2.png",
"og": "https://pbit-staging.s3.amazonaws.com/images/image/2611/flower_2.png",
"lg": "https://pbit-staging.s3.amazonaws.com/images/image/2611/web_flower_2.png",
"md": "https://pbit-staging.s3.amazonaws.com/images/image/2611/medium_flower_2.png",
"thumb": "https://pbit-staging.s3.amazonaws.com/images/image/2611/thumb_flower_2.png"
}
],
"prices": [
{
"id": "855277_Test tier _1g",
"name": "Sour Super Haze Alien Fruity Pebble",
"price_cents": 1500,
"med_price_cents": null,
"unit": "1.0",
"unit_type": "grams",
"quantity_on_hand": "4952.0",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "POSaBIT Producer/Processor"
}
],
"thc": {
"current": "20.0",
"low": "20.0",
"high": "20.0",
"unit_type": "%"
},
"cbd": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"thca": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"cbda": {
"current": "0.0",
"low": "0.0",
"high": "0.0",
"unit_type": "%"
},
"total_thc": {
"current": 20,
"low": 20,
"high": 20,
"unit_type": "%"
}
}
]
}
]
}
}
404 Response
{
"error": "Could not find menu feed"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
404 | Not Found | Not Found | Inline |
Response Schema
GET product_brands
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/product_brands',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/product_brands', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/product_brands", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/product_brands";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/product_brands \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/product_brands
Returns a list of product brands
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
Example responses
200 Response
{
"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
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ProductBrands |
401 | Unauthorized | Unauthorized | Unauthorized |
GET product_tags v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/product_tags',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/product_tags', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/product_tags", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/product_tags";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/product_tags \
-H 'Accept: application/json'
GET /v2/venue/product_tags
Update an existing customer
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer | false | none |
per_page | query | integer | false | none |
Example responses
200 Response
{
"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"
}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET product_types v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/product_types',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/product_types', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/product_types", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/product_types";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/product_types \
-H 'Accept: application/json'
GET /v2/venue/product_types
Update an existing customer
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer | false | none |
per_page | query | integer | false | none |
Example responses
200 Response
{
"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": 14
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET product_strains
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/product_strains',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/product_strains', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/product_strains", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/product_strains";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/product_strains \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/product_strains
Returns a list of product strains
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
q[used_eq] | query | integer(int32) | false | Filter if product strain is used |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ProductStrains |
401 | Unauthorized | Unauthorized | Unauthorized |
GET return_manifests
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/return_manifests',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/return_manifests', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/return_manifests", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/return_manifests";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/return_manifests \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/return_manifests
Returns a list of return manifests
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
q[aasm_state_eq] | query | string | false | Query for manifests in a specified state |
Example responses
200 Response
{
"total_records": 19,
"current_page": 1,
"total_pages": 19,
"per_page": 1,
"manifests": [
{
"id": 212,
"reference_no": "WARPOSABIT.ITDXB",
"supplier": null,
"state": "transferred_out",
"transfer_date": null,
"delivery_time": null,
"notes": "",
"return_destination_name": "POSaBIT Producer/Processor",
"return_destination_license": "",
"transferred_at": "2018-11-01T19:06:00.000Z",
"manifest_items": [
{
"id": 177925,
"manifest_id": null,
"state": "transferred_out",
"supplier_quantity": "0.0",
"accepted_quantity": "0.0",
"quantity_on_hand": "0.0",
"pre_return_quantity": "1.0",
"cost_per_unit": 100,
"inventory_id": 108726,
"lot_number": "WARPOSABIT.IN24YD",
"barcode": "WAJPOSABIT.IN1LOX",
"batch_number": "WARPOSABIT.BA3BJV",
"last_audit": null,
"venue_room": "Drawer #1",
"harvest_date": null,
"thc_measure": "0.0%",
"cbd_measure": "0.0%",
"coa_url": null,
"created_at": "2018-08-28T20:30:16.000Z",
"updated_at": "2018-12-18T17:52:37.000Z"
}
],
"created_at": "2018-08-28T20:33:40.000Z",
"updated_at": "2018-11-01T19:06:30.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ReturnManifests |
401 | Unauthorized | Unauthorized | Unauthorized |
GET venue_rooms v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/v2/venue/venue_rooms',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/v2/venue/venue_rooms', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/venue_rooms", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/venue_rooms";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/venue_rooms \
-H 'Accept: application/json'
GET /v2/venue/venue_rooms
Update an existing customer
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer | false | none |
per_page | query | integer | false | none |
Example responses
200 Response
{
"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
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
GET sales_histories
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/sales_histories',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/sales_histories', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/sales_histories", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/sales_histories";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/sales_histories \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/sales_histories
Returns a list of sales history
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[ordered_at_gt] | query | string | false | Filter sales where ordered date is greater than |
q[ordered_at_lt] | query | string | false | Filter sales where ordered date is less than |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | SalesHistories |
401 | Unauthorized | Unauthorized | Unauthorized |
GET sales_histories/{id} v2
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json'
}
result = RestClient.get '/api/v2/venue/sales_histories/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json'
}
r = requests.get('/api/v2/venue/sales_histories/{id}', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/api/v2/venue/sales_histories/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/api/v2/venue/sales_histories/{id}";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /api/v2/venue/sales_histories/{id} \
-H 'Accept: application/json'
GET /api/v2/venue/sales_histories/{id}
Update an existing customer
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | none |
Example responses
200 Response
{
"sales_history": {
"id": 49054557,
"is_medical": false,
"ordered_at": "2024-08-02T18:42:21.000Z",
"ordered_at_local": "2024-08-02T18:42:21.000Z",
"sale_type": "sale",
"order_source": "walk_in",
"terminal_till_id": 5906,
"terminal_id": 8829,
"local_order_id": "3221-169-8082-114218",
"customer_id": 187408,
"user_id": 12794,
"sub_total": 8063,
"discount": 4130,
"tax": 722,
"total": 4655,
"cost": 764,
"status": "COMPLETE",
"items": [
{
"item_id": 91315881,
"sales_history_id": 49054557,
"product_id": 1031454,
"inventory_id": 334814,
"lot_id": 560579,
"lot_number": "COAIQRT-20240613-001",
"is_marijuana": true,
"quantity": 1,
"weight": "1.0",
"unit_weight": "3.5",
"unit_of_weight": "grams",
"weight_in_grams": "3.5",
"cost": 700,
"sub_total": 1377,
"tax": 123,
"discount": 705,
"sku": "COAIQRT-20240613-001",
"category": "Flower",
"brand": "Global Xtracts",
"product_name": "The Finest Green",
"family_name": "Flower",
"tier_name": null,
"discount_list": [
{
"coupon_id": 47626,
"coupon_name": "Will's Test Employee Discount"
},
{
"coupon_id": 47541,
"coupon_name": "ZZ - Friends & Family 30% Off (Trove Extended)"
},
{
"coupon_id": 47601,
"coupon_name": "Tribal Tag Test"
}
],
"total": 795
},
{
"item_id": 91315882,
"sales_history_id": 49054557,
"product_id": 801385,
"inventory_id": 108709,
"lot_id": 222607,
"lot_number": "WARPOSABIT.IN33TB",
"is_marijuana": true,
"quantity": 1,
"weight": "1.0",
"unit_weight": "3.5",
"unit_of_weight": "grams",
"weight_in_grams": "3.5",
"cost": 64,
"sub_total": 6686,
"tax": 599,
"discount": 3425,
"sku": "WAJPOSABIT.IN1LOY",
"category": "Flower",
"brand": null,
"product_name": "Alta Nova - Blue Hawaiian (3.5g)",
"family_name": "Flower",
"tier_name": null,
"discount_list": [
{
"coupon_id": 47626,
"coupon_name": "Will's Test Employee Discount"
},
{
"coupon_id": 47541,
"coupon_name": "ZZ - Friends & Family 30% Off (Trove Extended)"
},
{
"coupon_id": 47601,
"coupon_name": "Tribal Tag Test"
}
],
"total": 3860
}
],
"sales_tenders": [
{
"sales_tender_id": 11739651,
"subtotal": 3933,
"tax": 722,
"total": 4655,
"payment_method_name": "Cash"
}
],
"created_at": "2024-08-02T18:43:01.000Z",
"updated_at": "2024-08-02T18:43:01.000Z"
}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
Response Schema
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
200 | X-Frame-Options | string | none | |
200 | X-XSS-Protection | integer | none | |
200 | X-Content-Type-Options | string | none | |
200 | X-Permitted-Cross-Domain-Policies | string | none | |
200 | Referrer-Policy | string | none | |
200 | Content-Type | string | none | |
200 | Access-Control-Allow-Origin | string | none | |
200 | Access-Control-Allow-Methods | string | none | |
200 | Access-Control-Allow-Headers | string | none | |
200 | Access-Control-Max-Age | integer | none | |
200 | ETag | string | none | |
200 | Cache-Control | string | none | |
200 | Content-Security-Policy | string | none | |
200 | X-Request-Id | string | none | |
200 | X-Runtime | number | none | |
200 | vary | string | none | |
200 | Content-Length | integer | none |
GET suppliers
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/suppliers',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/suppliers', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/suppliers", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/suppliers";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/suppliers \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/suppliers
Returns a list of suppliers
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
q[used_eq] | query | integer(int32) | false | Filter suppliers that are in use |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
Example responses
200 Response
{
"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
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Suppliers |
401 | Unauthorized | Unauthorized | Unauthorized |
GET terminal_tills
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/terminal_tills',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/terminal_tills', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/terminal_tills", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/terminal_tills";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/terminal_tills \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/terminal_tills
Returns a list of terminal tills
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[s] | query | string | false | Specify field to query |
q[aasm_state_eq] | query | string | false | Filter tills in specified state |
q[terminal_id_eq] | query | integer(int32) | false | Filter by terminal id |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
Example responses
200 Response
{
"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": []
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | TerminalTills |
401 | Unauthorized | Unauthorized | Unauthorized |
GET transfer_manifests
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/transfer_manifests',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/transfer_manifests', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/transfer_manifests", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/transfer_manifests";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/transfer_manifests \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/transfer_manifests
Returns a list of transfer manifests
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
page | query | integer(int32) | false | Page number |
per_page | query | integer(int32) | false | Records per page |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
q[aasm_state_eq] | query | string | false | Query for manifests in a specified state |
Example responses
200 Response
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"manifests": [
{
"id": 207,
"reference_no": "12345",
"supplier": null,
"state": "transferred_out",
"transfer_date": null,
"delivery_time": null,
"notes": "",
"return_destination_name": "Oregon Top Shelf 2",
"return_destination_license": "050-X0002",
"transferred_at": "2020-11-19T20:46:42.000Z",
"manifest_items": [
{
"id": 276458,
"manifest_id": null,
"state": "transferred_out",
"supplier_quantity": "1987.0",
"accepted_quantity": "1987.0",
"quantity_on_hand": "0.0",
"pre_return_quantity": "199.65",
"cost_per_unit": 225,
"inventory_id": 214766,
"lot_number": "PB863700010207B",
"barcode": "PB863700010906B",
"batch_number": null,
"last_audit": null,
"venue_room": "Back Room",
"harvest_date": null,
"thc_measure": "21.7%",
"cbd_measure": "0.4%",
"coa_url": null,
"created_at": "2019-10-22T16:16:27.000Z",
"updated_at": "2021-03-23T21:45:57.000Z"
}
],
"created_at": "2020-11-17T20:46:42.000Z",
"updated_at": "2020-11-19T20:46:42.000Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | TransferManifests |
401 | Unauthorized | Unauthorized | Unauthorized |
GET users
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json; charset=utf-8'
}
result = RestClient.get '/v2/venue/users',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json; charset=utf-8'
}
r = requests.get('/v2/venue/users', headers = headers)
print(r.json())
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json; charset=utf-8"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "/v2/venue/users", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
/// <<summary>>
/// Example of Http Client
/// <</summary>>
public class HttpExample
{
private HttpClient Client { get; set; }
/// <<summary>>
/// Setup http client
/// <</summary>>
public HttpExample()
{
Client = new HttpClient();
}
/// Make a dummy request
public async Task MakeGetRequest()
{
string url = "/v2/venue/users";
var result = await GetAsync(url);
}
/// Performs a GET Request
public async Task GetAsync(string url)
{
//Start the request
HttpResponseMessage response = await Client.GetAsync(url);
//Validate result
response.EnsureSuccessStatusCode();
}
/// Deserialize object from request response
private async Task DeserializeObject(HttpResponseMessage response)
{
//Read body
string responseBody = await response.Content.ReadAsStringAsync();
//Deserialize Body to object
var result = JsonConvert.DeserializeObject(responseBody);
}
}
# You can also use wget
curl -X GET /v2/venue/users \
-H 'Accept: application/json; charset=utf-8'
GET /v2/venue/users
Returns a list of users
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
per_page | query | integer(int32) | false | Records per page |
page | query | integer(int32) | false | Page number |
q[updated_at_gt] | query | string | false | Filter by updates since provided date |
q[updated_at_lt] | query | string | false | Filter by updates prior to the provided date |
Example responses
200 Response
{
"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"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Users |
401 | Unauthorized | Unauthorized | Unauthorized |
Schemas
CustomerResponseV1
{
"total_records": 475,
"current_page": 1,
"total_pages": 475,
"per_page": 1,
"customers": [
{
"customerId": 279159,
"firstName": "JANE",
"created_at": "2019-10-21T20:21:19.000Z",
"updated_at": "2021-10-05T19:31:24.000Z",
"birthyear": 1992,
"gender": "female",
"phone": "5551111111"
}
]
}
/v1/venue/customers Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of customers in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
customers | array | true | none | Customer description |
» customerId | integer(int32) | false | none | Customer ID |
» firstName | string | false | none | Customer first name |
» created_at | string | false | none | Customer created at datetime |
» updated_at | string | false | none | Customer updated at datetime |
» birthyear | string¦null | false | none | Customer birth year |
» gender | string | false | none | Customer gender |
» phone | string | false | none | Customer phone number |
EmployeeResponse
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"employees": [
{
"employeeId": 12998,
"firstName": "Jane",
"created_at": "2022-04-21T22:41:04.000Z",
"updated_at": "2022-04-21T22:41:04.000Z"
}
]
}
/v1/venue/employees Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of employees in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
employees | array | true | none | Employee description |
» employeeId | integer(int32) | false | none | Employee ID |
» firstName | string | false | none | Employee first name |
» created_at | string | false | none | Employee created at datetime |
» updated_at | string | false | none | Employee updated at datetime |
InventoriesResponseV1
{
"total_records": 1182,
"current_page": 1,
"total_pages": 1182,
"per_page": 1,
"products": [
{
"productId": 210111,
"name": "High Five Farms - Ghost Train Haze",
"unit": "280.0 gm",
"price": 1300,
"quantityInStock": "0.0",
"vendor": "High Five Farms",
"vendor_license": null,
"brand": "High Five Farms",
"category": "Bulk Flower",
"flowertype": "hybrid",
"concentratetype": null,
"producttype": "hybrid",
"productfamily": "Flower",
"description": "Conducive to concentration and creativity, this sati...",
"image": [
null
],
"active": false,
"bulkitem": true,
"strain": "Ghost Train Haze",
"thcMeasure": "0.0%",
"cbdMeasure": "0.0%",
"sku": "3264-902427",
"discountable": true,
"rooms": [],
"created_at": "2019-10-16T20:37:49.000Z",
"updated_at": "2022-06-14T19:37:38.000Z"
}
]
}
/v1/venue/inventories Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of inventories in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
products | array | true | none | Product description |
» productId | integer(int32) | false | none | Inventory sku ID |
» name | string | false | none | Inventory sku name |
» unit | string | false | none | Inventory sku weight unit |
» price | integer(int32) | false | none | Inventory sku price |
» quantityInStock | string | false | none | Quantity on hand |
» vendor | string | false | none | Supplier vendor |
» vendor_license | string¦null | false | none | Vendor license |
» brand | string | false | none | Product brand |
» category | string | false | none | Product Type |
» flowertype | string | false | none | Flower type |
» concentratetype | string¦null | false | none | Concentrate type |
» producttype | string | false | none | Flower or Concentrate type |
» productfamily | string | false | none | Product family |
» description | string | false | none | Description of the inventory sku |
» image | [string] | false | none | List of image URLs |
» active | boolean | false | none | Boolean if inventory is active |
» bulkitem | boolean | false | none | Boolean if inventory is a bulk item |
» strain | string | false | none | Inventory strain |
» thcMeasure | string | false | none | THC test results |
» cbdMeasure | string | false | none | CBD test results |
» sku | string | false | none | Barcode |
» discountable | boolean | false | none | Boolean if item is discountable |
» rooms | [string] | false | none | List of rooms product is in |
» created_at | string | false | none | Inventory sku created at datetime |
» updated_at | string | false | none | Inventory sku updated at datetime |
ManifestItemsResponseV1
{
"total_records": 1325,
"current_page": 1,
"total_pages": 1325,
"per_page": 1,
"restocks": [
{
"restockId": 261876,
"parent_id": null,
"utcDate": "2019-10-16T20:37:49.000Z",
"quantity": "396.0",
"quantityInStock": "-1755.422",
"costPerUnit": 275,
"productId": 210111,
"inventoryId": "WAR414871.IN5SAJM",
"thcMeasure": "19.2%",
"cbdMeasure": "0.0%",
"created_at": "2019-10-16T20:37:49.000Z",
"updated_at": "2022-06-14T19:37:31.000Z"
}
]
}
/v1/venue/manifest_items Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of manifest items in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
restocks | array | true | none | Manifest Item description |
» restockId | integer(int32) | false | none | Manifest Item ID |
» parent_id | string¦null | false | none | Manifest ID |
» utcDate | string | false | none | Created at datetime |
» quantity | string | false | none | Received quantity |
» quantityInStock | string | false | none | Quantity on hand |
» costPerUnit | integer(int32) | false | none | Cost |
» productId | integer(int32) | false | none | Inventory sku ID |
» inventoryId | string | false | none | Lot number |
» thcMeasure | string | false | none | THC test results |
» cbdMeasure | string | false | none | CBD test results |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
SalesHistoriesV1
{
"total_records": 197,
"current_page": 1,
"total_pages": 197,
"per_page": 1,
"tickets": [
{
"ticketId": 49052949,
"isMedical": true,
"utcDate": "2022-01-14T23:52:34.000Z",
"localTime": "2022-01-14T15:52:34.000-08:00",
"ticketType": "sale",
"customerId": 279560,
"employeeId": 12777,
"paymentType": "",
"subTotal": 9498,
"discount": 1900,
"tax": 0,
"total": 7857,
"items": [
{
"ticketItemId": 91311967,
"ticketId": 49052949,
"productId": 318604,
"inventoryId": "WAR421642.INOLNTM",
"quantity": 1,
"weight": "1.0",
"cost": 800,
"subTotal": 2500,
"tax": 0,
"discount": 500,
"discountList": [
{
"couponId": 47831,
"couponName": "buy more than $30 of whatever"
}
],
"total": 2000
}
],
"created_at": "2022-01-14T23:52:36.000Z",
"updated_at": "2022-01-14T23:52:36.000Z"
}
]
}
/v1/venue/sales_histories Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of sales history in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
tickets | array | true | none | Sale History description |
» ticketId | integer(int32) | false | none | Sale History ID |
» isMedical | boolean | false | none | Boolean if order type is medical |
» utcDate | string | false | none | Ordered at datetime in UTC |
» localTime | string | false | none | Ordered at datetime in local time zone |
» ticketType | string | false | none | Sale or Refund |
» customerId | integer(int32) | false | none | Customer ID |
» employeeId | integer(int32) | false | none | Employee ID |
» paymentType | string | false | none | Payment Type |
» subTotal | integer(int32) | false | none | Subtotal |
» discount | integer(int32) | false | none | Discount total |
» tax | integer(int32) | false | none | Tax total |
» total | integer(int32) | false | none | Sale total |
» items | array | false | none | Products sold in the sale |
»» ticketItemId | integer(int32) | false | none | Sales History Item ID |
»» ticketId | integer(int32) | false | none | Sales History ID |
»» productId | integer(int32) | false | none | Manifest Item ID or Inventory Sku ID |
»» inventoryId | string | false | none | Lot number |
»» quantity | integer(int32) | false | none | Quantity sold |
»» weight | string | false | none | Quantity weight sold |
»» cost | integer(int32) | false | none | Item cost |
»» subTotal | integer(int32) | false | none | Item Subtotal |
»» tax | integer(int32) | false | none | Item tax |
»» discount | integer(int32) | false | none | Item discount |
»» discountList | array | false | none | Item discounts |
»»» couponId | integer(int32) | false | none | Sale item discount ID |
»»» couponName | string | false | none | Sale item discount name |
»» total | integer(int32) | false | none | Sale item total |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
IncomingOrders
{
"code": 1,
"incoming_order": {
"id": 1857,
"aasm_state": "pending",
"reference_no": "123456",
"first_name": "Snoop",
"last_name": "Dogg",
"source": "online_store",
"order_type": "pickup",
"notes": null,
"delivered_at": null,
"requested_date": null,
"requested_window_start_time": {},
"requested_window_end_time": {},
"requested_payment_method": "debit",
"payment_verified": false,
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
"order_items": [
{
"item_id": 3270,
"product_id": 900835,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Blazin' - 9lb Hammer - 3.5g",
"product_brand": "Trail Blazin'",
"product_strain": "9lb Hammer",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
},
{
"item_id": 3271,
"product_id": 900875,
"sku_id": null,
"manifest_item_id": null,
"product_name": "Honu - Peanut Butter Cup Sativa 10pk (100mg)",
"product_brand": "Honu",
"product_strain": "Mixed",
"weight": null,
"quantity": 2,
"unit_quantity": "2.0",
"price": 0,
"discount": null,
"tax": null,
"tier_weight_id": null,
"coupons": [],
"taxes": [],
"created_at": "2022-07-27T23:32:45.000Z",
"updated_at": "2022-07-27T23:32:45.000Z"
}
]
}
/v1/venue/incoming_orders Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
code | integer(int32) | true | none | none |
incoming_order | array | true | none | Incoming order description |
» id | integer(int32) | false | none | Incoming order ID |
» aasm_state | string | false | none | State of incoming order |
» reference_no | string | false | none | Reference number |
» first_name | string | false | none | Customer first name |
» last_name | string | false | none | Customer last name |
» source | string | false | none | Order source |
» order_type | string | false | none | Order type |
» notes | string¦null | false | none | Order notes |
» delivered_at | string¦null | false | none | Delivered at datetime |
» requested_date | string¦null | false | none | Requested date |
» requested_window_start_time | object | false | none | Requested window start time |
» requested_window_end_time | object | false | none | Requested window end time |
» requested_payment_method | string¦null | false | none | Requested payment method |
» payment_verified | boolean | false | none | Boolean payment verified |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
order_items | array | true | none | Order items description |
» item_id | integer(int32) | false | none | Order item ID |
» product_id | integer(int32) | false | none | Product ID |
» sku_id | integer(int32) | false | none | Inventory sku ID |
» manifest_item_id | integer(int32) | false | none | Manifest item ID |
» product_name | string | false | none | Product name |
» product_brand | string | false | none | Product brand |
» product_strain | string | false | none | Product strain |
» weight | string¦null | false | none | Item weight |
» quantity | integer(int32) | false | none | Item quantity |
» unit_quantity | string | false | none | Item unit quantity |
» price | integer(int32) | false | none | Item price |
» discount | string¦null | false | none | Item discount |
» tax | string¦null | false | none | Item tax |
» tier_weight_id | string¦null | false | none | Item tier weight ID |
» coupons | [string] | false | none | List of coupons applied to item |
» taxes | [string] | false | none | List of taxes applied to item |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
IncomingOrdersRequest
{
"incoming_order": {
"order_type": "pickup",
"source": "online_store",
"first_name": "Snoop",
"last_name": "Dogg",
"email": "bluedream@deathrow.com",
"telephone": "5551111112",
"address": "",
"city": "",
"state_abbrev": "",
"zipcode": "",
"reference_no": "123456",
"requested_payment_method": "debit",
"order_items_attributes": [
{
"product_parent_id": "Blazin' - 9lb Hammer - 3.5g",
"product_id": 900835,
"product_name": "Blazin' - 9lb Hammer - 3.5g",
"product_brand": "Trail Blazin'",
"product_strain": "9lb Hammer",
"weight": null,
"price": 4000,
"quantity": 2
},
{
"product_parent_id": "Lemon Meringue - Avitas - Flower",
"product_id": 900875,
"product_name": "Honu - Peanut Butter Cup Sativa 10pk (100mg)",
"product_brand": "Honu",
"product_strain": "Mixed",
"weight": null,
"price": 2999,
"quantity": 2
}
],
"payment_prepaid": true,
"payment_source": "posabit",
"payment_reference_id": "12345",
"payment_amount": 13500
}
}
/v1/venue/incoming_orders Request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
incoming_order | object | true | none | none |
» order_type | string | false | none | Order type |
» source | string | false | none | Order source |
» first_name | string | false | none | Customer first name |
» last_name | string | false | none | Customer last name |
string | false | none | Customer email | |
» telephone | string | false | none | Customer phone number |
» address | string | false | none | Customer street address |
» city | string | false | none | Customer city |
» state_abbrev | string | false | none | Customer state |
» zipcode | string | false | none | Customer zip code |
» reference_no | string | false | none | Order reference number |
» requested_payment_method | string | false | none | Requested payment method |
» order_items_attributes | array | false | none | Order items description |
»» product_parent_id | string | false | none | Product name |
»» product_id | integer(int32) | false | none | Product ID |
»» product_name | string | false | none | Product name |
»» product_brand | string | false | none | Product brand |
»» product_strain | string | false | none | Product strain |
»» weight | string¦null | false | none | If weighable, product weight |
»» price | integer(int32) | false | none | Product price |
»» quantity | integer(int32) | false | none | Quantity to purchase |
» payment_prepaid | boolean | false | none | Boolean if order is prepaid |
» payment_source | string | false | none | Payment source |
» payment_reference_id | string | false | none | Payment reference ID |
» payment_amount | integer(int32) | false | none | Total payment amount |
IncomingQuote
{
"code": 1,
"incoming_quote": {
"id": 56,
"reference_no": "REF_NO_1",
"subtotal": 1168,
"tax": 332,
"discount": 500,
"total": 1500,
"telephone": "5551111112",
"customer_id": 279161,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z",
"quote_items": [
{
"item_id": 91,
"inventory_sku_id": 214772,
"product_id": 907088,
"product_name": "Freddy's Fuego - Washington Apple Bulk",
"quantity": 2,
"unit_quantity": "14.0",
"price": null,
"discount": 500,
"tax": 0,
"weight": "7g",
"tier_weight": null,
"coupons": [
{
"id": 20,
"quote_item_id": 91,
"pos_coupon_id": null,
"ref_number": "1234",
"ref_name": "discount",
"amount": 500,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
],
"taxes": [
{
"id": 116,
"tax_id": 4324,
"name": "Oregon Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
},
{
"id": 117,
"tax_id": 4325,
"name": "Portland Marijuana Tax",
"price_included": true,
"amount": 0,
"created_at": "2022-07-22T20:57:40.000Z",
"updated_at": "2022-07-22T20:57:40.000Z"
}
]
}
]
}
}
/v1/venue/incoming_quotes GET Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
code | integer(int32) | true | none | none |
incoming_quote | object | true | none | none |
» id | integer(int32) | false | none | Incoming quote ID |
» reference_no | string | false | none | Reference number |
» subtotal | integer(int32) | false | none | Incoming quote subtotal |
» tax | integer(int32) | false | none | Quote tax amount |
» discount | integer(int32) | false | none | Quote discount amount |
» total | integer(int32) | false | none | Quote total amount |
» telephone | string | false | none | Customer phone number |
» customer_id | integer(int32) | false | none | Customer ID |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
» quote_items | array | false | none | Incoming Quote items |
»» item_id | integer(int32) | false | none | Incoming quote item ID |
»» inventory_sku_id | integer(int32) | false | none | Inventory sku ID |
»» product_id | integer(int32) | false | none | Product ID |
»» product_name | string | false | none | Product name |
»» quantity | integer(int32) | false | none | Item quantity |
»» unit_quantity | string | false | none | Item unit quantity |
»» price | integer(int32) | false | none | Item price pre tax |
»» discount | string¦null | false | none | Item discount |
»» tax | integer(int32) | false | none | Item tax |
»» weight | string¦null | false | none | Item weight |
»» tier_weight | string¦null | false | none | Item tier weight |
»» coupons | [any] | false | none | List of coupons applied to item |
»»» id | integer(int32) | false | none | Incoming quote item discount ID |
»»» quote_item_id | integer(int32) | false | none | Incoming quote item ID |
»»» pos_coupon_id | string¦null | false | none | Discount ID |
»»» ref_number | string | false | none | Reference number |
»»» ref_name | string | false | none | Discount reference name |
»»» amount | integer(int32) | false | none | Discount amount |
»»» created_at | string | false | none | Created at datetime |
»»» updated_at | string | false | none | Updated at datetime |
»» taxes | array | false | none | Tax description |
»»» id | integer(int32) | false | none | Incoming quote item tax ID |
»»» tax_id | integer(int32) | false | none | Tax ID |
»»» name | string | false | none | Tax name |
»»» price_included | boolean | false | none | Boolean if tax is included in price |
»»» amount | integer(int32) | false | none | Tax amount |
»»» created_at | string | false | none | Created at datetime |
»»» updated_at | string | false | none | Updated at datetime |
IncomingQuoteRequest
{
"incoming_quote": {
"reference_no": "REF_NO_1",
"telephone": "555-111-1112",
"quote_items_attributes": [
{
"inventory_sku_id": 214772,
"quantity": 2,
"weight": "7g",
"quote_item_coupons_attributes": [
{
"amount": 500,
"ref_number": 1234,
"ref_name": "discount"
}
]
},
{
"inventory_sku_id": 214604,
"quantity": 2
}
]
}
}
/v1/venue/incoming_quotes request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
incoming_quote | object | true | none | Incoming quote description |
» reference_no | string | false | none | Reference number |
» telephone | string | false | none | Customer phone number |
» quote_items_attributes | array | false | none | none |
»» inventory_sku_id | integer(int32) | false | none | Inventory sku ID |
»» quantity | integer(int32) | false | none | Quantity to be sold |
»» weight | string | false | none | Item weight |
»» quote_item_coupons_attributes | array | false | none | Quote item discounts description |
»»» amount | integer(int32) | false | none | Discount amount |
»»» ref_number | integer(int32) | false | none | Discount reference number |
»»» ref_name | string | false | none | Discount reference name |
» description | any | false | none | none |
Info
{
"code": 1,
"region": "Oregon",
"locale": "en-US",
"vertical": "dispensaries",
"name": "Oregon Top Shelf",
"logo_thumb": "https://pbit-qa.s3.amazonaws.com/logos/Venue/thumb_3264_logo-ba531584ebfa69b2548e33d3e8b03c94.png",
"logo_medium": "https://pbit-qa.s3.amazonaws.com/logos/Venue/medium_3264_logo-ba531584ebfa69b2548e33d3e8b03c94.png",
"telephone": "5035551234",
"address": "1234 Portland Street, Portland, OR",
"street_address_line_1": "1234 Portland Street",
"city": "Portland",
"state": "OR",
"zip_code": "97035",
"country": "USA",
"timezone": "Pacific Time (US & Canada)",
"latitude": "44.0334",
"longitude": "-123.092",
"domains": [
{
"domain": "app.posabit.com"
}
],
"tax_rates": [
{
"id": 4324,
"name": "Oregon Marijuana Tax",
"rate": 1700,
"tax_rate": "17.0",
"price_included": true
},
{
"id": 4325,
"name": "Portland Marijuana Tax",
"rate": 300,
"tax_rate": "3.0",
"price_included": true
},
{
"id": 4398,
"name": "Bag Tax",
"rate": 0,
"tax_rate": "0.0",
"price_included": true
}
],
"payment_methods": [
"Cash",
"Debit Card",
"Other"
],
"venue_settings": {
"online_order_curbside": "1",
"online_order_delivery": "0"
}
}
/v1/info Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
code | integer(int32) | true | none | none |
region | string | true | none | Venue region |
locale | string | true | none | Venue locale |
vertical | string | true | none | Venue type: dispensaries, store, CBD store, etc |
name | string | true | none | Venue name |
logo_thumb | string | true | none | Venue logo thumbnail image |
logo_medium | string | true | none | Venue logo medium sized image |
telephone | string | true | none | Venue phone number |
address | string | true | none | Venue street address |
street_address_line_1 | string | true | none | Venue street address cont'd |
city | string | true | none | Venue city |
state | string | true | none | Vnue state |
zip_code | string | true | none | Venue zip code |
country | string | true | none | Venue country |
timezone | string | true | none | Venue timezone |
latitude | string | true | none | Venue latitude location |
longitude | string | true | none | Venue longitude location |
domains | array | true | none | List of venue domain addresses |
» domain | string | false | none | Venue domain address |
tax_rates | array | true | none | Venue taxes |
» id | integer(int32) | false | none | Tax ID |
» name | string | false | none | Tax name |
» rate | integer(int32) | false | none | Tax rate value |
» tax_rate | string | false | none | Tax rate percentage |
» price_included | boolean | false | none | Boolean if tax is included in price |
payment_methods | [string] | true | none | List of accepted payment types |
venue_settings | array | true | none | List of additional venue settings |
» online_order_curbside | string | false | none | Boolean if venue accepts online orders curbside |
» online_order_delivery | string | false | none | Boolean if venue accepts online orders delivery |
MenuFeeds
{
"menu_feed": {
"title": "Oregon Menu Test",
"feed_key": "49c17a0b-fa4e-470c-a69c-f19ad820b457",
"description": "test",
"feed_type": "posabit menu",
"menu_groups": [
{
"name": "Flower",
"category_guid": "X2rCVVCqzZjncz9fb8p6Gg",
"name_template": "name",
"combine_weights": true,
"description": "",
"image": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"menu_items": [
{
"id": "Chemdawg - Boggy Boon - Bulk Flower",
"guid": "8df54d45-ad2e-4efc-ac49-e560dfa1b077",
"name": "Boggy Boon - Chemdawg Bulk",
"description": "Pungent and sharp, this strain well known for its po...",
"tag_list": [
"Flower",
"cartridges"
],
"flower_type": "hybrid",
"brand": "Boggy Boon",
"strain": "Chemdawg",
"terpenes": [],
"product_type": "Bulk Flower",
"is_marijuana": true,
"tier_name": "Top Shelf Tier",
"brand_logo": {
"is_default": true,
"og": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"lg": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"md": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png",
"sm": "https://dlaatut4pkbv4.cloudfront.net/assets/missing_image.png"
},
"product_image": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-qa.s3.amazonaws.com/product_types/4444/image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"lg": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_large_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"md": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_medium_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"sm": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_small_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"thumb": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_thumb_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg"
},
"product_image_v2": {
"is_default": false,
"is_product_specific_image": false,
"og": "https://pbit-qa.s3.amazonaws.com/product_types/4444/image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"lg": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_large_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"md": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_medium_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"sm": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_small_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg",
"thumb": "https://pbit-qa.s3.amazonaws.com/product_types/4444/web_thumb_image-4181e1cdfc26add657e1c0d7487b4f0e.jpeg"
},
"prices": [
{
"id": "907082_Top Shelf Tier_1 g",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 1300,
"med_price_cents": null,
"unit": "1.0",
"unit_type": "grams",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
},
{
"id": "907082_Top Shelf Tier_3.5 g",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 4000,
"med_price_cents": null,
"unit": "3.5",
"unit_type": "grams",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
},
{
"id": "907082_Top Shelf Tier_7 g",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 6500,
"med_price_cents": null,
"unit": "7.0",
"unit_type": "grams",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
},
{
"id": "907082_Top Shelf Tier_1/2 oz",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 8500,
"med_price_cents": null,
"unit": "0.5",
"unit_type": "ounces",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
},
{
"id": "907082_Top Shelf Tier_1 oz",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 14000,
"med_price_cents": null,
"unit": "1.0",
"unit_type": "ounces",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
},
{
"id": "907082_Top Shelf Tier_8 (oz)",
"name": "Boggy Boon - Chemdawg Bulk",
"price_cents": 90000,
"med_price_cents": null,
"unit": "8.0",
"unit_type": "ounces",
"quantity_on_hand": "437.4",
"equivalent_weight": null,
"equivalent_unit": null,
"supplier": "Boggy Boon"
}
],
"thc": {
"current": "21.7",
"low": "21.7",
"high": "21.7",
"unit_type": "%"
},
"cbd": {
"current": "0.4",
"low": "0.4",
"high": "0.4",
"unit_type": "%"
}
}
]
}
]
}
}
/{venue_token}/v1/menu_feeds/{menu_feed_key} Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
menu_feed | array | true | none | none |
» title | string | false | none | Menu title |
» feed_key | string | false | none | Menu feed key |
» description | string | false | none | Menu description |
» feed_type | string | false | none | Menu feed type |
» menu_groups | array | false | none | Menu groups - flower, concentrate, etc |
»» name | string | false | none | Menu group name |
»» category_guid | string | false | none | Menu category GUID |
»» name_template | string | false | none | Menu name |
»» combine_weights | boolean | false | none | Boolean to combine weights on menu |
»» image | array | false | none | none |
»»» is_default | boolean | false | none | Boolean image default |
»»» og | string | false | none | Image link |
»»» lg | string | false | none | Large sized image link |
»»» md | string | false | none | Medium sized image link |
»»» sm | string | false | none | Small sized image link |
»» menu_items | [any] | false | none | Menu feed items |
»»» id | string | false | none | Product name |
»»» guid | string | false | none | Random GUID |
»»» name | string | false | none | Product name |
»»» description | string | false | none | Product description |
»»» tag_list | array | false | none | Product tags list |
»»» flower_type | string¦null | false | none | Flower type |
»»» brand | string¦null | false | none | Product brand |
»»» strain | string¦null | false | none | Product strain |
»»» terpenes | [string] | false | none | Product terpenes list |
»»» product_type | string | false | none | Product type |
»»» is_marijuana | boolean | false | none | Boolean if product is marijuana |
»»» brand_logo | array | false | none | Image links for brand logo |
»»»» is_default | boolean | false | none | none |
»»»» og | string | false | none | none |
»»»» lg | string | false | none | none |
»»»» md | string | false | none | none |
»»»» sm | string | false | none | none |
»»» product_image | array | false | none | Image links for product image |
»»»» is_default | boolean | false | none | none |
»»»» is_product_specific_image | boolean | false | none | none |
»»»» og | string | false | none | none |
»»»» lg | string | false | none | none |
»»»» md | string | false | none | none |
»»»» sm | string | false | none | none |
»»»» thumb | string | false | none | none |
»»» product_image_v2 | array | false | none | Image links for secondary product image |
»»»» is_default | boolean | false | none | none |
»»»» is_product_specific_image | boolean | false | none | none |
»»»» og | string | false | none | none |
»»»» lg | string | false | none | none |
»»»» md | string | false | none | none |
»»»» sm | string | false | none | none |
»»»» thumb | string | false | none | none |
»»» prices | array | false | none | List of price tiers |
»»»» id | string | false | none | Price tier name |
»»»» name | string | false | none | Product name |
»»»» price_cents | integer(int32)¦null | false | none | Price value in pennies |
»»»» med_price_cents | integer(int32)¦null | false | none | Med price in pennies |
»»»» last_price_cents | integer(int32) | false | none | Last price value in pennies |
»»»» unit | string | false | none | Product weight unit |
»»»» unit_type | string¦null | false | none | Product weight unit type |
»»»» quantity_on_hand | string | false | none | Quantity on hand |
»»»» equivalent_weight | string¦null | false | none | Inventory sku equivalent weight |
»»»» equivalent_unit | string¦null | false | none | Inventory sku equivalent weight unit |
»»»» supplier | string¦null | false | none | Supplier |
»»» thc | array | false | none | none |
»»»» current | string | false | none | Current THC test result |
»»»» low | string | false | none | Floor value of THC test result |
»»»» high | string | false | none | Ceiling value of THC test result |
»»»» unit_type | string | false | none | Test result type |
»»» cbd | array | false | none | none |
»»»» current | string | false | none | Current CBD test result |
»»»» low | string | false | none | Floor value of CBD test result |
»»»» high | string | false | none | Ceiling value of CBD test result |
»»»» unit_type | string | false | none | Test result type |
»»» tier_name | string | false | none | Tier name |
Customer
{
"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
}
}
Customer Description
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
customer | array | true | none | none |
» id | integer(int32) | false | none | Customer ID |
» first_name | string | false | none | Customer first name |
» last_name | string | false | none | Customer last name |
» birth_year | integer(int32) | false | none | Customer birth year |
» gender | string | false | none | Customer gender |
» telephone | string | false | none | Customer phone number |
string | false | none | Customer email | |
» active | boolean | false | none | Boolean customer is active or archived |
» sms_opt_out | boolean | false | none | Boolean customer has SMS opt out |
» sms_opt_in | boolean | false | none | Boolean customer has SMS opt in |
» signature | string¦null | false | none | Customer signature |
» address | string | false | none | Customer street address |
» zipcode | string | false | none | Customer zip code |
» city | string | false | none | Customer city |
» state | string | false | none | Customer state |
» birthday | string | false | none | Customer birthday |
» customer_type | string | false | none | Customer Type |
» terms_agreed | boolean | false | none | Boolean customer agreed to terms |
» points | integer(int32) | false | none | Customer loyalty points |
CustomerRequest
{
"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"
}
}
Customer Request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
customer | array | true | none | none |
» first_name | string | false | none | Customer first name |
» last_name | string | false | none | Customer last name |
» gender | string | false | none | Customer gender |
» telephone | string | false | none | Customer phone number |
string | false | none | Customer email | |
» active | integer(int32) | false | none | Boolean customer is active or archived |
» sms_opt_out | integer(int32) | false | none | Boolean customer has SMS opt out |
» address | string | false | none | Customer street address |
» zipcode | string | false | none | Customer zip code |
» city | string | false | none | Customer city |
» state | string | false | none | Customer state |
» birthday | string | false | none | Customer birthday |
» terms_agreed | integer(int32) | false | none | Boolean customer agreed to terms |
» customer_type | string | false | none | Customer Type |
CustomersResponse
{
"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
}
}
]
}
/v2/venue/customers Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total customers in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
customers | Customer | true | none | Customer description |
CustomerPut
{
"customer": {
"points_adjustment": "150"
}
}
/v2/venue/customers PUT request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
customer | array | true | none | none |
» points_adjustment | string | false | none | Loyalty points adjustment |
Coupons
{
"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
}
]
}
/v2/venue/coupons Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
code | integer(int32) | true | none | none |
total_records | integer(int32) | true | none | Total discounts in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
coupons | array | true | none | none |
» id | integer(int32) | false | none | Discount ID |
» kind | string | false | none | Discount Type: Reward or Discount |
» applies_to | string | false | none | Applies to: Item or Order |
» auto_apply | boolean | false | none | Boolean if discount is auto applied |
» allow_stacking | boolean | false | none | Boolean if discount allows stacking with other discounts |
» name | string | false | none | Discount name |
» active | boolean | false | none | Boolean if discount is active |
» points | string | false | none | Points required to use discount/reward |
» redeemable_once | boolean | false | none | Boolean if discount is redeemable used only once |
» manager_approve | boolean | false | none | Boolean if requires manager approval |
» barcode | string | false | none | Discount barcode |
» venue_id | integer(int32) | false | none | Venue ID |
» external_ref | string¦null | false | none | External reference |
» amount | integer(int32) | false | none | Discount amount |
» coupon_type | string | false | none | Coupon type |
» rounding | string | false | none | Discount rounding type |
» expires_at | string¦null | false | none | Discount expires at datetime |
» starts_at | string¦null | false | none | Discount starts at datetime |
» image | object | false | none | none |
»» url | string | false | none | Discount image URL |
» background_image | object | false | none | none |
»» url | string | false | none | Discount background image URL |
»» thumb | object | false | none | none |
»»» url | string | false | none | Discount thumbnail image URL |
»» half_page | object | false | none | none |
»»» url | string | false | none | Discount image URL |
» payment_method_id | string¦null | false | none | Discount payment method |
» payment_method_total | integer(int32) | false | none | Discount payment method total |
» order_type | string¦null | false | none | Discount order type |
» order_source | string | false | none | Discount order source |
» product_type_ids | [string] | false | none | List of product type IDs discount is applied to |
» product_ids | [string] | false | none | List of product IDs discount is applied to |
» product_tag_ids | [string] | false | none | List of product tags discount is applied to |
» product_brand_ids | [string] | false | none | List of product brands discount is applied to |
» product_strain_ids | [string] | false | none | List of product strains discount is applied to |
» customer_tag_ids | [string] | false | none | List of customer tags discount is applied to |
» manifest_item_ids | [string] | false | none | List of manifest items discount is applied to |
» supplier_ids | [string] | false | none | List of suppliers discount is applied to |
» venue_room_ids | [string] | false | none | List of rooms discount is applied to |
» one_item | boolean | false | none | Discount setting if applies to only one item |
» customer_type | string | false | none | List of customer types discount is applied to |
» customer_level_ids | [string] | false | none | List of customer profile types discount is applied to |
» birthday | boolean | false | none | Boolean if discount applicable only on a birthday |
» product_weights | [string] | false | none | List of product weights discount is applied to |
» min_quantity | string¦null | false | none | Minimum quantity requirement for discount |
» min_amount | integer(int32) | false | none | Minimum amount requirement for discount |
» min_weight | string | false | none | Minimum weight requirement for discount |
» min_weight_unit | string¦null | false | none | Minimum weight unit requirement for discount |
» days | [string] | false | none | List of days discount is available |
» hours | string¦null | false | none | Hours discount is available |
» hour_start | string | false | none | Hour start time for discount |
» hour_end | string | false | none | Hour end time for discount |
» created_by | string¦null | false | none | Discount creator |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
» clicks | integer(int32) | false | none | Number of clicks |
» inventory_tier_ids | [string] | false | none | List of inventory tier IDs discount is applied to |
» get_quantity | integer(int32) | false | none | Quantity |
» get_product_type_ids | [string] | false | none | List of product type IDs |
» get_product_ids | [string] | false | none | List of product IDs |
» get_product_tag_ids | [string] | false | none | List of product tags |
» get_product_brand_ids | [string] | false | none | List of product brands |
» get_product_strain_ids | [string] | false | none | List of product strains |
» get_supplier_ids | string¦null | false | none | Supplier ID |
» get_venue_room_ids | string¦null | false | none | Venue room ID |
» get_manifest_item_ids | string¦null | false | none | Manifest item IDs |
» get_product_weights | string¦null | false | none | Product weights |
» get_inventory_tier_ids | string¦null | false | none | Inventory tier IDs |
» tier_weights | string¦null | false | none | Tier weights |
» profile_type | string | false | none | Profile type |
» first_sale | boolean | false | none | First sale |
» is_private | boolean | false | none | Boolean if discount is private |
» external_redemption_failure_count | integer(int32) | false | none | none |
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"
}
]
}
Inventory Description
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | integer(int32) | false | none | Inventory sku ID |
product_id | integer(int32) | false | none | Product ID |
name | string | false | none | Inventory sku name |
unit | string | false | none | Inventory sku weight unit |
price | integer(int32) | false | none | Inventory sku price |
med_price | string¦null | false | none | Inventory sku medical price |
last_price | integer(int32) | false | none | Inventory sku last price price |
quantity_on_hand | string | false | none | Quantity on hand |
sellable_quantity | string | false | none | Sellable quantity |
ecomm_quantity | string | false | none | Ecomm quantity |
vendor | string | false | none | Supplier name |
vendor_license | string¦null | false | none | Vendor license |
brand | string | false | none | Product brand |
category | string | false | none | Product Type |
flower_type | string | false | none | Flower type |
concentrate_type | string¦null | false | none | Concentrate type |
product_type | string | false | none | Flower or Concentrate type |
product_family | string | false | none | Product family |
description | string | false | none | Description of the product |
image | [string] | false | none | List of image URLs |
active | boolean | false | none | Boolean if inventory is active |
bulk_item | boolean | false | none | Boolean if inventory is a bulk item |
strain | string | false | none | Product strain |
thc_measure | string | false | none | THC test results |
cbd_measure | string | false | none | CBD test results |
sku | string | false | none | Barcode |
discountable | boolean | false | none | Boolean if item is discountable |
tier_name | string | false | none | If product is weighable, tier name |
created_at | string | false | none | Created at datetime |
updated_at | string | false | none | Updated at datetime |
rooms | array | false | none | List of rooms and quantity of inventory stored |
» Display Case 3 | string | false | none | none |
InventoriesResponse
{
"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"
}
]
}
]
}
/v2/venue/inventories Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of inventories in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
inventory | Inventory | true | none | Inventory Description |
InventoryRequest
{
"inventory_sku": {
"med_price": 1100
}
}
/v2/venue/inventories request
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
inventory_sku | object | true | none | none |
» med_price | integer(int32) | false | none | Update medical price field |
» price | integer(int32) | false | none | Update recreational price field |
» last_price | integer(int32) | false | none | Update the last price for inventory sku |
InventoryTransactions
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"inventory_transactions": [
{
"id": 747285,
"manifest_item_id": 276279,
"sku_id": 214597,
"transaction_type": "adjustment",
"order_id": 25,
"order_type": "Inventory::Audit",
"quantity": "0.0",
"reason": "entry_error",
"updated_by": "Braden",
"note": null,
"cost_diff": 0,
"created_at": "2022-02-08",
"updated_at": "2022-02-08T00:07:18.000Z"
}
]
}
/v2/venue/inventory_transactions Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of inventory transactions in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
inventory_transactions | array | true | none | Inventory Transaction Description |
» id | integer(int32) | false | none | Inventory Transaction ID |
» manifest_item_id | integer(int32) | false | none | Manifest Item ID |
» sku_id | integer(int32) | false | none | Inventory sku ID |
» transaction_type | string | false | none | Inventory transaction type |
» order_id | integer(int32) | false | none | Inventory transaction order ID |
» order_type | string | false | none | Inventory transaction order type |
» quantity | string | false | none | Inventory transaction quantity |
» reason | string | false | none | Inventory transaction reason |
» updated_by | string | false | none | Inventory transaction updated by |
» note | string¦null | false | none | Inventory transaction note |
» cost_diff | integer(int32) | false | none | Cost difference on an inventory sku |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
Manifests
{
"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"
}
]
}
/v2/venue/manifests Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of manifests in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
manifests | array | true | none | Manifest Description |
» id | integer(int32) | false | none | Manifest ID |
» reference_no | string | false | none | Manifest reference number |
» supplier | string | false | none | Supplier |
» state | string | false | none | Manifest state |
» transfer_date | string | false | none | Manifest transfer date |
» delivery_time | string¦null | false | none | Manifest delivery time |
» notes | string | false | none | Manifest notes |
» accepted_at | string | false | none | Manifest accepted at date |
» accepted_by | string | false | none | Manifest accepted by |
» received_cost | integer(int32) | false | none | Manifest received cost |
» accepted_cost | string¦null | false | none | Manifest accepted cost |
» received_quantity | integer(int32) | false | none | Manifest received quantity |
» accepted_quantity | string¦null | false | none | Manifest accepted quantity |
» has_marijuana | boolean | false | none | Boolean if manifest contains marijuana |
» import_source | string¦null | false | none | Manifest import source |
» discount | string¦null | false | none | Manifest discounted value |
» manifest_items | ManifestItems | false | none | none |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
ManifestItems
{
"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"
}
]
}
/v2/venue/manifest_items Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
manifest_items | array | true | none | Manifest Item Description |
» id | integer(int32) | false | none | Manifest Item ID |
» manifest_id | string¦null | false | none | Manifest ID |
» state | string | false | none | Manifest Item state |
» supplier_quantity | string | false | none | Manifest Item received quantity |
» accepted_quantity | string | false | none | Manifest Item quantity |
» quantity_on_hand | string | false | none | Manifest Item quantity on hand |
» pre_return_quantity | string¦null | false | none | Manifest Item pre return quantity |
» cost_per_unit | integer(int32) | false | none | Manifest Item cost |
» inventory_id | integer(int32) | false | none | Inventory sku ID |
» lot_number | string | false | none | Manifest Item lot number |
» barcode | string | false | none | Manifest Item barcode |
» batch_number | string¦null | false | none | Manifest Item batch number |
» last_audit | string¦null | false | none | Manifest Item last audit value |
» venue_room | string | false | none | Manifest Item room assignment |
» harvest_date | string¦null | false | none | Manifest Item harvest date |
» thc_measure | string | false | none | Manifest Item THC test result |
» cbd_measure | string | false | none | Manifest Item CBD test result |
» coa_url | string¦null | false | none | Manifest Item COA URL |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
ProductBrands
{
"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
}
]
}
/v2/venue/product_brands Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of product brands in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
product_brands | [any] | true | none | Product Brand Description |
» id | integer(int32) | false | none | Product brand ID |
» merchant_id | integer(int32) | false | none | Merchant ID product brand is associated |
» name | string | false | none | Product brand name |
» abbreviation | string¦null | false | none | Product brand abbreviation |
» image | object | false | none | List of image URLs of different sizes |
»» url | string¦null | false | none | none |
»» large | object | false | none | none |
»»» url | string¦null | false | none | none |
»» medium | object | false | none | none |
»»» url | string¦null | false | none | none |
»» small | object | false | none | none |
»»» url | string¦null | false | none | none |
»» thumb | object | false | none | none |
»»» url | string¦null | false | none | none |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
» imported_from | string | false | none | Import source |
» curated_brand_id | string¦null | false | none | Curated brand ID |
ProductStrains
{
"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"
}
]
}
/v2/venue/product_strains Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of product strains in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
product_strains | array | true | none | Product Strain Description |
» id | integer(int32) | false | none | Product strain ID |
» merchant_id | integer(int32) | false | none | Merchant ID product strain is associated |
» name | string | false | none | Product strain name |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
» imported_from | string | false | none | Import source |
ReturnManifests
{
"total_records": 19,
"current_page": 1,
"total_pages": 19,
"per_page": 1,
"manifests": [
{
"id": 212,
"reference_no": "WARPOSABIT.ITDXB",
"supplier": null,
"state": "transferred_out",
"transfer_date": null,
"delivery_time": null,
"notes": "",
"return_destination_name": "POSaBIT Producer/Processor",
"return_destination_license": "",
"transferred_at": "2018-11-01T19:06:00.000Z",
"manifest_items": [
{
"id": 177925,
"manifest_id": null,
"state": "transferred_out",
"supplier_quantity": "0.0",
"accepted_quantity": "0.0",
"quantity_on_hand": "0.0",
"pre_return_quantity": "1.0",
"cost_per_unit": 100,
"inventory_id": 108726,
"lot_number": "WARPOSABIT.IN24YD",
"barcode": "WAJPOSABIT.IN1LOX",
"batch_number": "WARPOSABIT.BA3BJV",
"last_audit": null,
"venue_room": "Drawer #1",
"harvest_date": null,
"thc_measure": "0.0%",
"cbd_measure": "0.0%",
"coa_url": null,
"created_at": "2018-08-28T20:30:16.000Z",
"updated_at": "2018-12-18T17:52:37.000Z"
}
],
"created_at": "2018-08-28T20:33:40.000Z",
"updated_at": "2018-11-01T19:06:30.000Z"
}
]
}
/v2/venue/return_manifests Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total return manifests in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
manifests | array | true | none | Return Manifest Description |
» id | integer(int32) | false | none | Manifest ID |
» reference_no | string | false | none | Manifest reference number |
» supplier | string¦null | false | none | Manifest reference number |
» state | string | false | none | Manifest state |
» transfer_date | string¦null | false | none | Manifest transfer date |
» delivery_time | string¦null | false | none | Manifest delivery time |
» notes | string | false | none | Manifest notes |
» return_destination_name | string | false | none | Return manifest destination name |
» return_destination_license | string | false | none | Return manifest destination license |
» transferred_at | string | false | none | Return manifest transferred date |
» manifest_items | ManifestItems | false | none | none |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
SalesHistories
{
"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"
}
]
}
/v2/venue/sales_histories Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of sale histories in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
sales_histories | array | true | none | Sales History Description |
» id | integer(int32) | false | none | Sales History ID |
» is_medical | boolean | false | none | Boolean if order is medical |
» ordered_at | string | false | none | Ordered at datetime |
» ordered_at_local | string | false | none | Ordered at local datetime |
» sale_type | string | false | none | Sale type: Sale or Refund |
» order_source | string | false | none | Original order source |
» terminal_till_id | integer(int32) | false | none | Terminal Till ID associated |
» local_order_id | string | false | none | Local order ID |
» customer_id | integer(int32) | false | none | Customer ID |
» user_id | integer(int32) | false | none | User ID |
» sub_total | integer(int32) | false | none | Sale History Subtotal |
» discount | integer(int32) | false | none | Sale History Discount |
» tax | integer(int32) | false | none | Sale History Tax |
» total | integer(int32) | false | none | Sale History Total |
» cost | integer(int32) | false | none | Sale History Cost |
» items | array | false | none | Sale History Items |
»» item_id | integer(int32) | false | none | Sale History Item ID |
»» sales_history_id | integer(int32) | false | none | Sale History ID |
»» product_id | integer(int32) | false | none | Product ID |
»» inventory_id | integer(int32) | false | none | Manifest Item or Inventory Sku ID |
»» lot_id | integer(int32) | false | none | Manifest Item ID |
»» lot_number | string | false | none | Lot Number |
»» is_marijuana | boolean | false | none | Boolean if item is marijuana |
»» quantity | integer(int32) | false | none | Item Quantity |
»» weight | string | false | none | Item weight |
»» cost | integer(int32) | false | none | Item cost |
»» sub_total | integer(int32) | false | none | Item subtotal |
»» tax | integer(int32) | false | none | Item tax |
»» discount | integer(int32) | false | none | Item discount |
»» sku | string | false | none | Manifest Item barcode |
»» category | string | false | none | Product type name |
»» brand | string | false | none | Product brand |
»» product_name | string | false | none | Product name |
»» family_name | string | false | none | Product family name |
»» unit_of_weight | string | false | none | Product weight unit |
»» tier_name | string | false | none | Product tier name |
»» discount_list | array | false | none | List of discounts applied to item |
»»» coupon_id | integer(int32) | false | none | Discount ID |
»»» coupon_name | string | false | none | Discount name |
»» total | integer(int32) | false | none | Sale History Item total |
» sales_tenders | array | false | none | List of tender types on the sale |
»» sales_tender_id | integer(int32) | false | none | Sales tender ID |
»» subtotal | integer(int32) | false | none | Tender subtotal |
»» tax | integer(int32) | false | none | Tender tax |
»» total | integer(int32) | false | none | Tender total |
»» payment_method_name | string | false | none | Tender payment type |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
Suppliers
{
"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
}
]
}
/v2/venue/suppliers Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of suppliers in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
suppliers | array | true | none | Supplier Description |
» id | integer(int32) | false | none | Supplier ID |
» merchant_id | integer(int32) | false | none | Merchant ID supplier is associated |
» name | string | false | none | Supplier name |
» license_number | string | false | none | Supplier license number |
» telephone_number | string | false | none | Supplier phone number |
string | false | none | Supplier email | |
» address | string | false | none | Supplier address |
» city | string | false | none | Supplier city |
» state | string | false | none | Supplier state |
» zipcode | string | false | none | Supplier zip code |
» country | string | false | none | Supplier country |
» notes | string | false | none | Supplier notes |
» created_at | string | false | none | Supplier created at datetime |
» updated_at | string | false | none | Supplier updated at datetime |
» deactivated | boolean | false | none | Boolean if supplier is active |
» manifest_freq_in_days | string¦null | false | none | Manifests generated frequency for the supplier |
» lead_time | string¦null | false | none | Time from manifest creation to delivery |
» velocity_days | integer(int32) | false | none | Velocity calculated using the last x days |
» manifests_count | integer(int32) | false | none | Manifests count |
» last_adj_levels | string¦null | false | none | Last adjusted levels datetime |
TerminalTills
{
"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": []
}
]
}
/v2/venue/terminal_tills Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of terminal tills in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
terminal_tills | array | true | none | Terminal Till Description |
» id | integer(int32) | false | none | Terminal Till ID |
» terminal_id | integer(int32) | false | none | Terminal ID |
» state | string | false | none | Terminal current state |
» till_ref | string | false | none | Terminal reference ID |
» start_time | string | false | none | Terminal Till start datetime |
» end_time | string | false | none | Terminal Till end datetime |
» start_amount | integer(int32) | false | none | Terminal Till start amount |
» end_amount | integer(int32) | false | none | Terminal Till end amount |
» left_in_drawer | integer(int32) | false | none | Terminal Till left in drawer amount |
» notes | string | false | none | Terminal Till notes |
» opened_by | string | false | none | Terminal Till opened by |
» closed_by | string | false | none | Terminal Till closed by |
» created_at | string | false | none | Terminal Till created at datetime |
» updated_at | string | false | none | Terminal Till updated at datetime |
» adjustments | [string] | false | none | Terminal Till Adjustments |
TransferManifests
{
"total_records": 1,
"current_page": 1,
"total_pages": 1,
"per_page": 1,
"manifests": [
{
"id": 207,
"reference_no": "12345",
"supplier": null,
"state": "transferred_out",
"transfer_date": null,
"delivery_time": null,
"notes": "",
"return_destination_name": "Oregon Top Shelf 2",
"return_destination_license": "050-X0002",
"transferred_at": "2020-11-19T20:46:42.000Z",
"manifest_items": [
{
"id": 276458,
"manifest_id": null,
"state": "transferred_out",
"supplier_quantity": "1987.0",
"accepted_quantity": "1987.0",
"quantity_on_hand": "0.0",
"pre_return_quantity": "199.65",
"cost_per_unit": 225,
"inventory_id": 214766,
"lot_number": "PB863700010207B",
"barcode": "PB863700010906B",
"batch_number": null,
"last_audit": null,
"venue_room": "Back Room",
"harvest_date": null,
"thc_measure": "21.7%",
"cbd_measure": "0.4%",
"coa_url": null,
"created_at": "2019-10-22T16:16:27.000Z",
"updated_at": "2021-03-23T21:45:57.000Z"
}
],
"created_at": "2020-11-17T20:46:42.000Z",
"updated_at": "2020-11-19T20:46:42.000Z"
}
]
}
/v2/venue/transfer_manifests Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of transfer manifests in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
manifests | array | true | none | Transfer Manifest Description |
» id | integer(int32) | false | none | Manifest ID |
» reference_no | string | false | none | Manifest reference number |
» supplier | string¦null | false | none | Supplier |
» state | string | false | none | Manifest state |
» transfer_date | string¦null | false | none | Manifest transfer date |
» delivery_time | string¦null | false | none | Manifest delivery time |
» notes | string | false | none | Manifest notes |
» return_destination_name | string | false | none | Manifest return destination |
» return_destination_license | string | false | none | Manifest return destination license |
» transferred_at | string | false | none | Manifest transferred at datetime |
» manifest_items | ManifestItems | false | none | Manifest Items Description |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
Users
{
"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"
}
]
}
/v2/venue/users Response
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total_records | integer(int32) | true | none | Total number of users in a venue |
current_page | integer(int32) | true | none | Current page of results |
total_pages | integer(int32) | true | none | Total number of pages for results |
per_page | integer(int32) | true | none | Number of results per page |
users | array | true | none | Users Description |
» id | integer(int32) | false | none | User ID |
» first_name | string | false | none | User first name |
» last_name | string | false | none | User last name |
» perm_level | string | false | none | User permissions |
» access_level | string | false | none | User access levels |
string | false | none | User email | |
» created_at | string | false | none | Created at datetime |
» updated_at | string | false | none | Updated at datetime |
Unauthorized
{
"message": "Invalid Token"
}
401 Unauthorized Error
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
message | string | true | none | none |
MenuFeedNotFound
{
"error": "Could not find menu feed"
}
404 Error Menu Feed Not Found
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
error | string | true | none | none |