Tutorial: Order additional services
Order CAD floor plans, 3D models and other add-on deliverables by creating additional work orders for your published iGUIDE.
Time to complete: ~15 minutes
What you'll learn:
- How to create work orders for add-on deliverables
- Which add-ons are available for your iGUIDE package
- How to monitor work order status until completion
- How to check billing info before ordering
Prerequisites
Before you begin, you need:
- App ID and Access Token (see Your First iGUIDE for setup)
- A published iGUIDE with the initial work order completed (status
done) - Understanding of the Work Order Lifecycle
You can create additional work orders immediately after creating an iGUIDE—they'll remain on hold until the initial work order completes. However, it's usually better to wait until the initial work order is done so you can verify the iGUIDE processed successfully before ordering add-ons.
What are additional services?
Additional services are deliverables beyond the base iGUIDE package—things like CAD floor plans, 3D models, Xactimate ESX reports and package upgrades. Each additional service requires its own work order.
Available add-on deliverables:
| Service | Task Type | Standard | Premium | Radix |
|---|---|---|---|---|
| CAD Floor Plans (DWG) | dwg-init | Yes | Yes | After upgrade |
| 3D Model (Revit) | rvt-init | No | Yes | No |
| Xactimate ESX | esx-init | Yes | Yes | After upgrade |
| CoreLogic FML (Beta) | corelogic-fml | Yes | Yes | After upgrade |
| Site Plan | siteplan | Yes | Yes | No |
For the complete list of task types, prerequisites and package-specific availability, see Packages & Industry Types.
- Standard iGUIDEs cannot order Revit models—upgrade to Premium first using
premium-upgrade - Radix iGUIDEs must be upgraded to Standard or Premium before ordering any ADS deliverables
- Photos iGUIDEs do not support additional work orders
Step 1: Verify your iGUIDE is ready
Before ordering add-ons, confirm the initial work order is complete:
export APP_ID="your-app-id"
export APP_TOKEN="your-access-token"
export IGUIDE_ID="ig12345"
export WORK_ORDER_ID="Z1T9"
curl https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders/$WORK_ORDER_ID \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN"
Response:
{
"id": "Z1T9",
"status": "done",
"iguideId": "ig12345",
"iguideType": "standard"
}
Look for "status": "done" before proceeding. If the status is still pending_draft or another processing state, wait for it to complete.
Step 2: Check billing info (optional)
Before creating an add-on work order, you can check the billable area and enabled add-ons to estimate cost:
curl https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders/$WORK_ORDER_ID/billing \
-H "Accept: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN"
Response:
{
"billableArea": 2450,
"billableAreaUnit": "sqft",
"addOns": []
}
The billableArea is used to calculate pricing for most add-on deliverables. The addOns array shows which ADS add-ons are already enabled—if you haven't ordered any yet, it will be empty.
Add-ons are billed when the work order reaches done status. An invoice is generated and associated with the work order at that point. Most task types are billed based on billable area (square footage or square meters).
Step 3: Create a work order for CAD floor plans
Let's order CAD floor plans (DWG format). This requires the dwg-init task type and a units attribute specifying imperial or metric:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["dwg-init"],
"attrs": {
"units": "imperial"
}
}'
Response:
{
"id": "A3K9",
"status": "pending_draft",
"iguideId": "ig12345",
"iguideType": "standard",
"attrs": {
"units": "imperial"
}
}
What just happened?
- A new work order was created with ID
A3K9 - The status is
pending_draft, meaning it's in the drafting queue - The iGUIDE's
dwgadd-on was automatically enabled - The work order will be processed by the drafting team (typically within 24 hours)
Save the work order ID from the response—you'll need it to poll status and download the deliverables when complete.
export DWG_WORK_ORDER_ID="A3K9"
Step 4: Order multiple add-ons at once
You can order multiple add-on deliverables in a single work order by passing multiple task types:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["dwg-init", "esx-init"],
"attrs": {
"units": "imperial"
}
}'
This creates a single work order that produces both CAD floor plans (DWG) and an Xactimate ESX report when complete.
Not all task types can be combined in a single work order. The API will return a validation error if you attempt an invalid combination. When in doubt, create separate work orders for each deliverable.
Step 5: Monitor work order status
Poll the work order to check when it's complete:
curl https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders/$DWG_WORK_ORDER_ID \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN"
Response (processing):
{
"id": "A3K9",
"status": "pending_draft",
"iguideId": "ig12345",
"iguideType": "standard"
}
Response (completed):
{
"id": "A3K9",
"status": "done",
"iguideId": "ig12345",
"iguideType": "standard"
}
- Poll every 30 minutes for add-on work orders (drafting can take several hours)
- Check for terminal statuses:
done(success),cancelled, orrejected(failure) - Implement exponential backoff if the work order remains in a processing state
- There are no webhooks for individual work order state changes—you must poll
All possible statuses:
| Status | Meaning | Terminal? |
|---|---|---|
empty | Awaiting data upload | No |
on_hold | Queued behind another work order | No |
pending_draft | In the drafting queue | No |
pending_qa | In quality assurance review | No |
pending_publish | Being published | No |
exception | Flagged for supervisor review | No |
done | Complete—deliverables ready | Yes |
cancelled | Work order was cancelled | Yes |
rejected | Rejected due to data quality issues | Yes |
For a complete explanation of the work order state machine, see Work Order Lifecycle.
Step 6: Download your deliverables
Once the work order status is done, download the CAD floor plans using the Portal API:
curl -fsSL -o floorplans.zip \
https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/download-dwg \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN"
Use the Get asset URLs endpoint to retrieve download URLs for all completed ADS deliverables in a single API call, along with media URLs for base deliverables.
Download endpoints by deliverable type:
| Deliverable | Endpoint |
|---|---|
| All ADS files | Get asset URLs (returns URLs in ads array) |
| CAD Floor Plans (DWG) | Download CAD Floor Plan |
| 3D Model (Revit) | Download 3D Model Files |
| Xactimate ESX Report | Download ESX File |
| CoreLogic FML | Download CoreLogic FML File |
For a complete guide on downloading all iGUIDE deliverables, see Download Deliverables.
Code examples
JavaScript (Node.js)
const axios = require('axios');
const APP_ID = 'your-app-id';
const APP_TOKEN = 'your-access-token';
const IGUIDE_ID = 'ig12345';
async function orderCADFloorPlans() {
try {
const response = await axios.post(
`https://manage.youriguide.com/api/v1/iguides/${IGUIDE_ID}/workOrders`,
{
types: ['dwg-init'],
attrs: {
units: 'imperial'
}
},
{
headers: {
'Content-Type': 'application/json',
'X-Plntr-App-Id': APP_ID,
'X-Plntr-App-Token': APP_TOKEN
}
}
);
console.log('Work order created:', response.data.id);
return response.data.id;
} catch (error) {
console.error('Failed to create work order:', error.response?.data);
throw error;
}
}
async function pollWorkOrderStatus(workOrderId) {
const maxAttempts = 50; // Poll for ~25 hours (30 min intervals)
for (let i = 0; i < maxAttempts; i++) {
const response = await axios.get(
`https://manage.youriguide.com/api/v1/iguides/${IGUIDE_ID}/workOrders/${workOrderId}`,
{
headers: {
'X-Plntr-App-Id': APP_ID,
'X-Plntr-App-Token': APP_TOKEN
}
}
);
const status = response.data.status;
console.log(`Work order status: ${status}`);
if (status === 'done') {
console.log('Work order complete!');
return true;
} else if (status === 'cancelled' || status === 'rejected') {
console.error(`Work order ${status}`);
return false;
}
// Wait 30 minutes before next poll
await new Promise(resolve => setTimeout(resolve, 30 * 60 * 1000));
}
throw new Error('Work order polling timed out');
}
// Usage
(async () => {
const workOrderId = await orderCADFloorPlans();
await pollWorkOrderStatus(workOrderId);
})();
Python
import requests
import time
APP_ID = 'your-app-id'
APP_TOKEN = 'your-access-token'
IGUIDE_ID = 'ig12345'
def order_cad_floor_plans():
"""Create a work order for CAD floor plans."""
response = requests.post(
f'https://manage.youriguide.com/api/v1/iguides/{IGUIDE_ID}/workOrders',
headers={
'Content-Type': 'application/json',
'X-Plntr-App-Id': APP_ID,
'X-Plntr-App-Token': APP_TOKEN
},
json={
'types': ['dwg-init'],
'attrs': {
'units': 'imperial'
}
}
)
response.raise_for_status()
work_order_id = response.json()['id']
print(f'Work order created: {work_order_id}')
return work_order_id
def poll_work_order_status(work_order_id):
"""Poll work order status until completion."""
max_attempts = 50 # Poll for ~25 hours (30 min intervals)
for i in range(max_attempts):
response = requests.get(
f'https://manage.youriguide.com/api/v1/iguides/{IGUIDE_ID}/workOrders/{work_order_id}',
headers={
'X-Plntr-App-Id': APP_ID,
'X-Plntr-App-Token': APP_TOKEN
}
)
response.raise_for_status()
status = response.json()['status']
print(f'Work order status: {status}')
if status == 'done':
print('Work order complete!')
return True
elif status in ['cancelled', 'rejected']:
print(f'Work order {status}')
return False
# Wait 30 minutes before next poll
time.sleep(30 * 60)
raise TimeoutError('Work order polling timed out')
# Usage
if __name__ == '__main__':
work_order_id = order_cad_floor_plans()
poll_work_order_status(work_order_id)
Common add-on ordering scenarios
Order a 3D Model (Revit)
Revit models are only available for Premium iGUIDEs:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["rvt-init"],
"attrs": {
"units": "imperial"
}
}'
Order an Xactimate ESX report
ESX reports are available for Standard and Premium iGUIDEs:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["esx-init"]
}'
Upgrade Standard to Premium
To unlock VR tours and Revit eligibility, upgrade a Standard iGUIDE to Premium:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["premium-upgrade"]
}'
Once the upgrade work order completes, the iGUIDE's package type changes to Premium and you can order Revit models.
Order a Site Plan
Site plans are available for Standard and Premium iGUIDEs:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["siteplan"]
}'
If you request a site plan before the initial work order finishes, the siteplan task is automatically appended to the initial work order instead of creating a separate one. You'll receive the initial work order ID in the response.
You cannot create a new siteplan work order while an existing one is still pending. The API returns an error in that case. Wait for the current one to reach done status before requesting another.
Upgrade Radix to Standard
Radix iGUIDEs must be upgraded before ordering ADS deliverables:
curl -X POST https://manage.youriguide.com/api/v1/iguides/$IGUIDE_ID/workOrders \
-H "Content-Type: application/json" \
-H "X-Plntr-App-Id: $APP_ID" \
-H "X-Plntr-App-Token: $APP_TOKEN" \
-d '{
"types": ["draft-convert"]
}'
This triggers manual floor plan drafting. After the upgrade completes, the iGUIDE becomes a Standard iGUIDE and can order CAD floor plans, ESX reports and other Standard-compatible add-ons.
Error handling
Work order creation fails (400)
Problem: {"code": "invalid_argument"}
Common causes:
- Task type not supported for your package (e.g., ordering
rvt-initfor a Standard iGUIDE) - Missing required
attrs(e.g.,unitsfor DWG orders) - Invalid task type name (check spelling and case)
- Package must be upgraded first (e.g., Radix attempting ADS orders)
Solution: Check Packages & Industry Types for task type availability and required attributes.
Work order is rejected
If a work order reaches rejected status, check the work order details for a reason code. This can happen if:
- The initial work order data quality is insufficient for the requested deliverable
- The iGUIDE package was downgraded after the work order was created
- There's a technical issue with the scan data
Contact support if you need help understanding why a work order was rejected.
Work order stays in processing
If a work order remains in a processing state for more than 48 hours, contact support—there may be a processing error or the work order may be flagged for manual review.
Next steps
Now that you can order additional services, here's what to explore next:
- Download Deliverables—Download all iGUIDE deliverables including ADS files
- Work Order Lifecycle—Understand all work order statuses and transitions
- Packages & Industry Types—Complete reference of task types and package compatibility