Common use cases
POS Integration Tiers

Core Integration

10min
level features including all previous integration levels core ability to get transaction history ability to get and update contacts ability to get inventory levels, cost/ margin core integration guide aiq offers two integration methods for point of sale (pos) systems option 1 provide aiq with rest api endpoints option 2 send our endpoints data at your leisure using our public rest api endpoints please reach out to us to determine which integration method best suits your needs! option 1 provide aiq with rest api endpoints to get transactions & customer records by time range it is preferred to make sure that we have inventory stock, margin, and cost within those calls in order to calculate advanced analytics + facilitate automated recommendations of products to customers and staff after we integrate those features all pos systems have the premium option to integrate our loyalty wallet and redemptions of discounts directly within the pos native ui you can see an example of these endpoints in action both within dutchie & leaflogix (videos on page) send us your rest api docu/ endpoints https //alpineiq com/contact html move to next steps with our tier 3+ guide https //support alpineiq com/tier 3 and 4 integration option 2 send our endpoints data at your leisure using the endpoints below if needed, our team is also well versed in pulling the required data in from other sources (database tables, flat files such as csv's, daily onedrive drops, etc add + update pos transactions use this endpoint to post transactions that are occuring on your service to aiq we will handle accruing points for loyalty programs, analyzing, updating inventory, etc we leverage pos user to map to a full contact ("persona") we should attribute the sale to curl x post https //lab alpineiq com/api/v1 1/createupdatesale/\ uid h 'content type application/json' h 'x apikey pearocifwga9mc9mtsbrmuiz60dl0xxcgq9vl4cbboww7kz92akcs4m1xg' d '{ 	"visit" { 	 "pos id" "120 receipt id 120", // receipt id of the sale being submitted 	 "pos user" "1239uoiejaiofje", // primary key of the persona attached to the transaction 	 "sendnotification" 0, 	 "transaction date" "2014 04 20 04 03 53 +0000", // date transaction occurred 	 "transaction total" 40 0, // transaction total amount 	 "location" "muffins miami", //name of your store map this to a friendly name for analysis at configure aiq > retail stores once you submit some sales 	 "visit details attributes" \[ // the quantity within this object should be a negative value if it is a refund 	 { 	 "sku" "aur932k", 	 "price" 40 0, 	 "quantity" 1 0, 	 "category" "pre roll", 	 "brand" "tweed", 	 "name" "12g white widow rollup", 	 "discount" 12 0, 	 "size" "12g", 	 "strain" "blueberry og", 	 "grade" "a", 	 "species" "hybrid", 	 } 	 ] 	}' compressed submit personas attached to transactions use this endpoint so that aiq can "attach" order details to the customer that made the transaction this allows for deep analysis and segmentation on customer preferences aiq can also fire off new opt in requests to join loyalty or member club programs the response will include the contactid and the srcid which you can store to use when submitting sales and redeeming discounts if an invalid phone number is submitted, aiq will process it as a blank value use this v1 1 endpoint submissions to this endpoint are subject to your capture process which can take up to 24 hours to process curl x post https //lab alpineiq com/api/v1 1/createupdatemember/\ uid h 'content type application/json' h 'x apikey pearocifwga9mc9mtsbrmuiz60dl0xxcgq9vl4cbboww7kz92akcs4m1xg' d '{ 	"member" { 	 "pos user" "1239uoiejaiofje", 	 "pos type" "online", 	 "email" "drake\@gmail com", 	 "first name" "drake", 	 "last name" "ross", 	 "address1" "4461 prosper dr", "address2" "apt 2217", "city" "dallas", "state" "tx", "zip" "76008", "birthday" "05/16/1985", "phone number" "##########", "gender" "f", "loyalty" false, // do not set this to true unless the user expects to receive an sms to double optin to loyalty duplicates will be ignored 	} }' compressed update personas to update an existing persona in aiq, you will need to submit a post request to /api/v2/loyaltycontact/override/\ uid/\ contactid this endpoint will allow you to update fields for an existing persona this endpoint will only update fields provided for fields you do not want to update, simply omit them from the payload for every available field, see our swagger example a customer requests to change their phone number and/or email change the customer's record in the pos pull the customer's contactid using this endpoint using their old phone number or email submit the customers new email/phone to the override endpoint (see example below) curl location 'https //lab alpineiq com/api/v2/loyaltycontact/override/\ uid/\ contactid' \\ \ header 'content type application/json' \\ \ header 'x apikey ••••••' \\ \ data raw '{ "email" "first last\@alpineiq com", "mobilephone" "3125555555" }' if an invalid phone number is submitted, aiq will process it as a blank value create and update inventory to update inventory sent post requests with an array of items max items per call is 100 with sku/product id as required params curl x post https //lab alpineiq com/api/v1 1/createupdateinventory/\ uid h 'content type application/json' h 'x apikey pearocifwga9mc9mtsbrmuiz60dl0xxcgq9vl4cbboww7kz92akcs4m1xg' d '\[ { "sku" "100050", "productid" "mu ch pr 100050", "category" "muffins pre rolls", "parentcate" "pre rolls", "name" "chemdawg 2g", "brand" "muffins", "variant" "string", "barcode" "string", "url" "https //google com", "imageurl" "string", "description" "string", "supplierna" "string", "currency" "string", "customattr" \[ { "parent" "string", "key" "string", "value" "string" }, { "parent" "string", "key" "string", "value" "string" } ], "supplierid" "int", "totaltax" "15 50", "dateupdated" "1660073955", "msrp" "12 56", "quantity" "5", "thc" "12 0", "cbd" "1 0", "dateadded" "1660073953", "salesprice" "30 00", "instock" true, "issaleable" true, "isarchived" false } ]' compressed // returns { "code" 200, "success" true, "data" \[] // no data returned for this endpoint }