POS sync inventory

Synchronize POS item information with your inventory system

post
Sync inventory

https://integrations.mipos.shop/api/v1/inventory/pos/store/{store_id}/system/sync
Send inventory content from the POS to the inventory system.
Request
Response
Request
Path Parameters
store_id
required
string
Id of the store wich you want to sync inventory
Headers
Authorization
required
string
Bearer {access_token}
Content-type
required
string
application/json
Body Parameters
user_id_tps
required
string
ID of the user who owns the inventory system
items
required
array
Items from your POS inventory
inventory_system_id
required
string
ID of the inventory system with wich you want to synchronize
units
required
array
Units of measurement of your POS system
suppliers
required
array
Suppliers that you manage in your POS system
Response
200: OK
{
"message": "Synchronization data was sent to the inventory system.",
"data": null
}
409: Conflict
{
"message": [
"You don't have this store available.",
"The third_party_id does not have an Inventory System role or does not exist.",
"No integration record was found between this user store and the third party system.",
"External id not found for this store in the inventory system.",
"The item must have a name.",
"The item must have an external id.",
"The item must have an purchase unit external id.",
"The item must have an consumption unit external id.",
"The item must have a supplier external id.",
"The item must have a cost.",
"The item must have a stock.",
"The unit must have a name.",
"The unit must have a short name.",
"The unit must have an external id.",
"The supplier must have a name.",
"The supplier must have an external id.",
"Item purchase unit external id (____) not found in units array",
"The item purchase unit external id must be a string.",
"The item consumption unit external id must be a string.",
"Item supplier external id (____) not found in suppliers array",
"The item cost must be a string.",
"The item stock must be a string."
],
"data": null
}
422: Unprocessable Entity
{
"items": [
"The items field is required."
],
"inventory_system_id": [
"The inventory system id field is required.",
"The inventory system id must be a string."
],
"units": [
"The units field is required."
],
"suppliers": [
"The suppliers field is required."
],
"user_id_tps": [
"The user id tps field is required."
]
}

Body example

{
"items": [
{
"name": "Testing item 1",
"external_id": "item_abc123",
"purchase_unit_external_id": "pos_u1",
"consumption_unit_external_id": "pos_u2",
"supplier_external_id": "pos_sup_1",
"cost": "1250",
"stock": "11.22"
},
{
"name": "Testing item 2",
"external_id": "item_abc456",
"purchase_unit_external_id": "pos_u2",
"consumption_unit_external_id": "pos_u2",
"supplier_external_id": "pos_sup_1",
"cost": "100",
"stock": "5.50"
}
],
"user_id_tps": "30",
"inventory_system_id": "3d40a24e-d570-4598-ae68-e20687edd1f9",
"units": [
{
"name": "Unit 1",
"short_name": "u1",
"external_id": "pos_u1"
},
{
"name": "Unit 2",
"short_name": "u2",
"external_id": "pos_u2"
}
],
"suppliers": [
{
"name": "supplier 1",
"external_id": "pos_sup_1"
}
]
}

post
Send update of stock of an item

https://integrations.mipos.shop/api/v1/inventory/pos/store/{store_id}/system/stock/update
Request
Response
Request
Path Parameters
store_id
required
string
Id of the store wich you want to sync inventory
Headers
Authorization
required
string
Bearer {access_token}
Content-type
required
string
application/json
Body Parameters
user_id_tps
required
string
Id of the user who owns the inventory system
inventory_system_id
required
string
Id of the inventory system with wich you want to syncronize
current_stock
required
string
Current stock of the item in your POS system.
quantity
required
string
Stock movement quantity.
date
required
string
Movement date.
movement_type
required
integer
Movement type(1: add, 2: remove)
external_id
required
string
ID of the item in your POS system
Response
204: No Content
409: Conflict
{
"message": [
"This user_id_tps does not own this inventory system.",
"No integration record was found between this user store and the third party system.",
"External id not found for this store in the inventory system.",
"This type of webhook is not available.",
"This inventory system does not have this type of webhook available."
],
"data": null
}
422: Unprocessable Entity
{
"user_id_tps": [
"The user id tps field is required."
],
"inventory_system_id": [
"The inventory system id field is required."
],
"current_stock": [
"The current stock field is required."
],
"quantity": [
"The quantity field is required."
],
"date": [
"The date field is required."
],
"movement_type": [
"The movement type field is required.",
"The selected movement type is invalid."
]
}

Any other error response you receive from this endpoint comes directly from the inventory system.

Body example

{
"user_id_tps": "30",
"inventory_system_id": "4344be8c-c6b9-4c51-88a6-d620144ab406",
"current_stock": "12.44",
"quantity": "1.25",
"date": "2020-05-30 12:45:03",
"movement_type": 2
}

Webhooks

The inventory system can send different types of data about its items, the POS system that you have registered can receive this data by registering the urls of the webhooks where it wants to receive each of these types. Types of information that the POS sends:

  • Type 3: Receive the stock update of an inventory item

post
Manage Webhook

https://integrations.mipos.shop/api/v1/inventory/pos/webhook/manage
Create or update inventory system webhooks.
Request
Response
Request
Headers
Authorization
required
string
Bearer {access_token}
Content-type
required
string
application/json
Body Parameters
type
required
string
Webhook type (3)
url
required
string
Webhook URL
Response
200: OK
{
"message": "Webhook successfully created.",
"data": null
}
409: Conflict
{
"message": [
"Invalid type.",
],
"data": null
}
422: Unprocessable Entity
{
"type": [
"The type field is required.",
"The selected type is invalid."
],
"url": [
"The url field is required."
]
}

These webhook requests will send a header called X-Signature-Request, as a security measure to confirm that the request came from our system.

Webhook(Type 3 - Receive stock update item)

The value of this field is a hexadecimal HMAC signature of the body request payload, using the client secret as a key(generated on account creation) and SHA256 as the hash function.

Example

Using the body example

client_secret:

9468da7ccaed13055abcf183fb05c73e8cfc48c5

Signature: 7c38c67ad234c4cdbe71425b5c961805ac3955d87de40d1d63e09f1f76d1ff61

Content Body

Key

Value

pos_id

ID of your POS

inventory_system_id

ID of the inventory system that sending the event

quantity

Stock movement quantity

date

Inventory movement date

movement_type

Movement type(1: add, 2: remove)

external_id

ID of the item in your POS system

now

Date sent to generate the signature

store_id

Id of the store in your POS system

current_stock

Current stock of the item in the inventory system

JSON received example

{
"pos_id": "1",
"inventory_system_id": "4344be8c-c6b9-4c51-88a6-d620144ab406",
"current_stock": "12.44",
"quantity": "1.25",
"date": "2020-05-30 12:45:03",
"movement_type": 2,
"external_id": "avcc123",
"now": "2020-06-01 02:55:18",
"store_id": 1
}

Expected response

Your service should POST a 204 response status code with an empty response body to acknowledge receipt of the webhook event. If an error occurs in your POS system, the response must be returned with the respective status code and the body must include a field called message, this will be taken to show it to the Inventory System.