Ordering new equipment for a worker
When a new hire joins your organization, or an existing worker needs a device, IT needs to get them the right equipment. With the Deel IT Public API you can reproduce the Deel IT ordering flow from your own onboarding or procurement workflow: browse the catalog, pick a product variant, then place an order for the worker.
In the Deel app, the same flow happens under Equipment > Orders > Create Order.
The GET /rest/it/orders/{order_id} endpoint is stable. Other Deel IT endpoints in this guide are in Beta, require the X-Beta: true header, and may have changes to their request and response shapes. The examples below include the header where it is required. See API versioning for details on endpoint lifecycle states.
You can also equip a worker by shipping a device from your own inventory, or by reassigning a stored rental. See Sending your equipment to a worker for those two paths.
Prerequisites
A Deel account with Deel IT enabled
Your organization must be onboarded to Deel IT. See Getting Started with Deel IT for the account setup steps.
An API token with the required scopes
Four scopes cover the full flow:
people:readto resolve a worker to anhris_profile_id.it-products:readto browse the catalog and read product variants.it-orders:writeto place the order.it-orders:readto track the order.
A worker with a Human Resource Information System (HRIS) profile
The order is placed for a worker’s HRIS profile. For workers without an active Deel contract, the profile must include first name, last name, group, country of residence, and email address.
A full delivery address for the worker
Every order ends in a shipment. Collect the full address the equipment ships to. See Delivery Coverage, Delivery Times, and Express Shipping for the countries Deel logistics operates in and available service tiers.
Resolve the worker’s HRIS profile
The Deel IT Public API identifies people by hris_profile_id. If your workflow does not already have it, look it up via the List people endpoint on the Deel core Public API.
Example response:
Searching by name is one way to find the worker; use whichever filter fits your system. search matches on name, so confirm the match against emails[].value in your own code. The id field is the person’s hris_profile_id. The rest of the workflow uses it as destination.hris_profile_id in the order request.
Query the catalog
List the products available in the Deel IT catalog, filtered by the worker’s delivery country and any other criteria. This is the equivalent of choosing from the available devices for the worker’s country in the Deel app. Requires the it-products:read scope. See the List products in the catalog reference.
Use the query parameters to narrow the catalog:
country: ISO 3166 alpha-2 country code. Restricts results to products whose variants ship to this country.category: Filter by one product category, such asLAPTOPorMONITOR.acquisition_types: Restrict results to products offering at least one ofPURCHASE,RENTAL, orREUSE.stock_condition:NEWorREFURBISHED.brands,operating_systems,keyboard_layouts: Filter by manufacturer, operating system, or keyboard layout. Repeat a parameter for OR semantics.search: Case-insensitive match on product name or brand.it_policy_ids: Restrict results to products approved by these IT policies, to see what workers on those policies can order.
Example response:
The response returns product metadata only: no variants, pricing, taxes, fees, or contract settings. Pick a product and use its id in the next step.
When has_more is true, pass the next_cursor value as the cursor query parameter on the next request to page through the rest of the catalog.
Choose a variant and addons
Retrieve the product to see its variants and the addons you can attach to it. Pass the same country to restrict the variants to those that ship to the worker. Requires the it-products:read scope. See the Retrieve a product’s catalog details reference.
Example response:
Pick the variant whose specifications match what the worker needs. Its id is the variant_id you pass in the order. Check allowed_acquisition_types and allowed_rental_terms to see which contract settings the variant supports. Each entry in available_addons has an id you can pass as an addon_id in the order, and a type of SERVICE or WARRANTY. You can attach at most one of each.
Place the order
Create the order for the worker. The order is created pre-approved, so it does not wait on an approval step. Requires the it-orders:write scope. See the Create an IT order reference.
Placing the order commits your organization to the equipment, addons, and fees shown in pricing_details. You can cancel the order only before its shipment is prepared.
Set destination.assign_to to USER and identify the worker with destination.hris_profile_id. For each device, pass the variant_id and its contract_setting:
acquisition_type:PURCHASE,RENTAL, orREUSE.rental_term:MONTH_12orMONTH_24. Required for rentals, ignored otherwise.payment_schema:MONTHLYorUPFRONT. Required for rentals, ignored for purchases, which are always paid upfront.addons: Required. Pass an empty array when you do not attach any addons. Each variant takes at most two addons: one service and one warranty. Each addon can also take its ownpayment_schemaand, for service addons only, aduration_months.
Provide the full delivery address in destination.delivery_address: line1, line2, city, state, post_code, and country, plus phone_number and delivery_instructions where needed. The schema only requires country, but the order needs a full valid address to ship.
is_express_delivery_requested is required. Set it to true to request express shipping, or false otherwise. Shipping costs and delivery times vary by country and by express shipping availability.
Example response:
The id is the order_id you use to track the order in the next step. A 201 Created response confirms the order was created, not that the device has been delivered.
Track the order to delivery
Fulfillment happens asynchronously. Track the order through to delivery by polling or by subscribing to webhooks.
Polling for the terminal state
Poll GET /rest/it/orders/{order_id} and watch the order status and each item’s status in order_items. Requires the it-orders:read scope.
The response has the same shape as the Create an IT order response, and also includes the worker’s address under user. Item statuses only move forward, in this order: PLACED, PROCESSING, AWAITING_PAYMENT, READY_TO_SHIP, SHIPPED, COMPLETED. An item can also move to CANCELLED. Use this endpoint to check the delivery status of a specific worker’s device.
React to a webhook instead
If you would rather not poll, subscribe to the it-order.created and it-order.updated events. The it-order.updated payload reflects the order’s current state each time it changes. Filter incoming events on the order id you created, and check status and each item’s status in order_items.
Example it-order.updated payload:
See Webhooks for how to register an endpoint and verify signatures, and Discovering available events for the full event catalog.
To cancel an order before its shipment is prepared, see the Cancel an IT order reference.
Example automated flow
If you are building this as an automated service, here is one example of how the steps can be sequenced end to end. The API does not prescribe any particular order, so you can adapt or reorder these steps to fit your own policy.
Query the catalog
Call GET /rest/it/products?country={country}&category={category} to see which products are available for the worker’s country.
Choose a variant
Call GET /rest/it/products/{product_id}?country={country} and apply your own selection logic to pick a variant and any addons.