Operations related to inventory transfer orders
Merchant API v2 (2.0.0)
The Merchant API v2 provides programmatic access to merchant data across all their sales channels.
This version shifts from sales channel-scoped access to merchant-scoped access, allowing access to data across all sales channels owned by a single merchant.
The access tokens remain the same as in v1, but now they provide access to all sales channels.
All endpoints are rate limited to 100 requests per minute per merchant. The following headers are included in every response:
X-Rate-Limit-Used: The number of requests used in the current minute.X-Rate-Limit-Max: The maximum number of requests allowed per minute (100). If the limit is exceeded, a 429 Too Many Requests response is returned.
v1 of the Merchant API will remain available as long as clients use it, but new features and improvements will only be added to v2. We recommend all new integrations use v2.
All list endpoints use cursor-based pagination. The pagination.next_page_url field in the response indicates the next page. If null, there are no more results. Use the limit query parameter to control page size. See each endpoint's response schema for details.
Hive sends webhook notifications to inform you about important events in your merchant account. Configure webhook endpoints in your merchant dashboard. See the webhooks section below for available webhook events and their payloads.
Hive signs all webhook requests with an x-hive-signature header to prevent malicious actors from sending invalid requests. This header contains a hex-encoded HMAC-SHA256 digest of the request body, using your API token as the key. Requests without this header or with invalid signatures should be ignored.
Ruby signature validation example:
def request_valid?(req)
  return false if !req.post?
  request_sig = req.get_header("x-hive-signature")
  expected_sig = OpenSSL::HMAC.hexdigest("sha256", ENV["API_TOKEN"], req.body)
  Rack::Utils.secure_compare(request_sig, expected_sig)
endWebhook URLs should be idempotent as Hive cannot guarantee the order of calls or retry attempts for the same event. What this means in practice, is that you should check the timestamp of the object in the payload. Ignore payloads with a timestamp older than the last update you saved. Only process the webhook if the updated timestamp is newer than the one you have on file.
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/
https://app.hive.app/merchant_api/v2/
https://staging.app.hive.app/merchant_api/v2/
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_orders
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_orders
 
- curl
 - JavaScript
 - Node.js
 - Python
 - Java
 - C#
 - PHP
 - Go
 - Ruby
 - R
 - Payload
 
curl -i -X GET \
  'https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders?limit=20&created_at%5Bgt%5D=2019-08-24T14%3A15%3A22Z&created_at%5Blt%5D=2019-08-24T14%3A15%3A22Z&created_at%5Bgte%5D=2019-08-24T14%3A15%3A22Z&created_at%5Blte%5D=2019-08-24T14%3A15%3A22Z' \
  -H 'Authorization: Bearer <YOUR_token_HERE>'{ "data": [ { … } ], "pagination": { "first_page_url": "https://app.hive.app/merchant_api/v2/collection_of_items?limit=20", "limit": 20, "next_page_url": "https://app.hive.app/merchant_api/v2/collection_of_items?limit=20&page=eyJpZCI6MTIzNDU2fQ" } }
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_orders
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_orders
 
- curl
 - JavaScript
 - Node.js
 - Python
 - Java
 - C#
 - PHP
 - Go
 - Ruby
 - R
 - Payload
 
curl -i -X POST \
  https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders \
  -H 'Authorization: Bearer <YOUR_token_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "origin_id": 39,
    "destination_id": 38,
    "order_notes": "",
    "items": [
      {
        "inventory_batch_id": null,
        "quantity": 100,
        "sku_id": 586004
      }
    ]
  }'Inventory transfer order created successfully
List of documents associated with the inventory transfer order
List of items in the inventory transfer order
List of restocking shipments associated with the inventory transfer order
Items in the restocking shipment
Quantity of this item in the shipment
Arrived quantity of this item (after shipment is received)
Damaged quantity of this item (after shipment is received)
Missing quantity of this item (after shipment is received)
The merchant's SKU identifier - required if sku_id is not provided
Hive SKU identifier - required if sku_code is not provided
List of shipments associated with the inventory transfer order
Items in the shipment
{ "id": 297, "status": "processing", "created_at": "2025-06-05T15:15:12.256+02:00", "completed_at": null, "order": { "id": 1195780, "status": "processing" }, "origin_id": 4, "destination_id": 2, "order_notes": "", "documents": [], "restocking_shipments": [ { … } ], "shipments": [ { … } ], "items": [ { … } ], "updated_at": "2025-06-05T16:20:15.300+02:00" }
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}
 
- curl
 - JavaScript
 - Node.js
 - Python
 - Java
 - C#
 - PHP
 - Go
 - Ruby
 - R
 - Payload
 
curl -i -X GET \
  'https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}' \
  -H 'Authorization: Bearer <YOUR_token_HERE>'An inventory transfer order
List of documents associated with the inventory transfer order
List of items in the inventory transfer order
List of restocking shipments associated with the inventory transfer order
Items in the restocking shipment
Quantity of this item in the shipment
Arrived quantity of this item (after shipment is received)
Damaged quantity of this item (after shipment is received)
Missing quantity of this item (after shipment is received)
The merchant's SKU identifier - required if sku_id is not provided
Hive SKU identifier - required if sku_code is not provided
List of shipments associated with the inventory transfer order
Items in the shipment
{ "id": 297, "status": "processing", "created_at": "2025-06-05T15:15:12.256+02:00", "completed_at": null, "order": { "id": 1195780, "status": "processing" }, "origin_id": 4, "destination_id": 2, "order_notes": "", "documents": [], "restocking_shipments": [ { … } ], "shipments": [ { … } ], "items": [ { … } ], "updated_at": "2025-06-05T16:20:15.300+02:00" }
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}
 
- curl
 - JavaScript
 - Node.js
 - Python
 - Java
 - C#
 - PHP
 - Go
 - Ruby
 - R
 - Payload
 
curl -i -X PATCH \
  'https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}' \
  -H 'Authorization: Bearer <YOUR_token_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "order_notes": "Updated notes",
    "destination_id": 3
  }'Inventory transfer order updated successfully
List of documents associated with the inventory transfer order
List of items in the inventory transfer order
List of restocking shipments associated with the inventory transfer order
Items in the restocking shipment
Quantity of this item in the shipment
Arrived quantity of this item (after shipment is received)
Damaged quantity of this item (after shipment is received)
Missing quantity of this item (after shipment is received)
The merchant's SKU identifier - required if sku_id is not provided
Hive SKU identifier - required if sku_code is not provided
List of shipments associated with the inventory transfer order
Items in the shipment
{ "id": 297, "status": "processing", "created_at": "2025-06-05T15:15:12.256+02:00", "completed_at": null, "order": { "id": 1195780, "status": "processing" }, "origin_id": 4, "destination_id": 2, "order_notes": "", "documents": [], "restocking_shipments": [ { … } ], "shipments": [ { … } ], "items": [ { … } ], "updated_at": "2025-06-05T16:20:15.300+02:00" }
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}/cancel
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}/cancel
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_orders/{id}/cancel
 
- curl
 - JavaScript
 - Node.js
 - Python
 - Java
 - C#
 - PHP
 - Go
 - Ruby
 - R
 - Payload
 
curl -i -X PUT \
  'https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_orders/{id}/cancel' \
  -H 'Authorization: Bearer <YOUR_token_HERE>'Inventory transfer order cancelled successfully
List of documents associated with the inventory transfer order
List of items in the inventory transfer order
List of restocking shipments associated with the inventory transfer order
Items in the restocking shipment
Quantity of this item in the shipment
Arrived quantity of this item (after shipment is received)
Damaged quantity of this item (after shipment is received)
Missing quantity of this item (after shipment is received)
The merchant's SKU identifier - required if sku_id is not provided
Hive SKU identifier - required if sku_code is not provided
List of shipments associated with the inventory transfer order
Items in the shipment
{ "id": 297, "status": "processing", "created_at": "2025-06-05T15:15:12.256+02:00", "completed_at": null, "order": { "id": 1195780, "status": "processing" }, "origin_id": 4, "destination_id": 2, "order_notes": "", "documents": [], "restocking_shipments": [ { … } ], "shipments": [ { … } ], "items": [ { … } ], "updated_at": "2025-06-05T16:20:15.300+02:00" }
When the inventory transfer order was completed
List of documents associated with the inventory transfer order
List of items in the inventory transfer order
The merchant's SKU identifier - required if sku_id is not provided
List of restocking shipments associated with the inventory transfer order
Items in the restocking shipment
Quantity of this item in the shipment
Arrived quantity of this item (after shipment is received)
Damaged quantity of this item (after shipment is received)
Missing quantity of this item (after shipment is received)
The merchant's SKU identifier - required if sku_id is not provided
Hive SKU identifier - required if sku_code is not provided
List of shipments associated with the inventory transfer order
Items in the shipment
- Mock server
https://hive-merchant-api.redocly.app/_mock/merchant-api-v2/mapi_v2_oas31/inventory_transfer_order.status_updated
 - Production API
https://app.hive.app/merchant_api/v2/inventory_transfer_order.status_updated
 - Staging API
https://staging.app.hive.app/merchant_api/v2/inventory_transfer_order.status_updated
 
{ "event_type": "inventory_transfer_order.status_updated", "event_id": "123e4567-e89b-12d3-a456-426614174004", "timestamp": "2023-10-01T19:00:00Z", "data": { "id": 123456, "status": "completed", "created_at": "2023-10-01T19:00:00Z", "completed_at": "2023-10-01T20:00:00Z", "origin_id": 4, "destination_id": 2, "updated_at": "2023-10-01T20:00:00Z", "order": { … }, "order_notes": "", "documents": [], "restocking_shipments": [], "shipments": [], "items": [ … ] } }