How to Match Jobs to Drivers by Skills and Capabilities
- API or service
- Route Planner API
- Task
- Job requirements and agent capabilities → eligible assignments
- Examples
- Difficulty
- Intermediate
- Time
- 8 min
Match jobs to drivers by skills and capabilities
Some work can be completed only by a qualified driver, technician, or vehicle. For example, groceries may require refrigeration while an appliance delivery may require a liftgate.
Give each agent a list of capabilities and each job or shipment a list of requirements. Route Planner considers only eligible agents when assigning the specialized task.
Task flow: agent capabilities and task requirements → Route Planner API → eligible assignments and optimized schedules.
Define matching capability labels
Capability and requirement values are application-defined strings. Use the same canonical label on both sides of the match:
{
"agent": {
"capabilities": ["refrigerated", "liftgate"]
},
"job": {
"requirements": ["refrigerated"]
}
}
An agent must satisfy the task's requirements to be eligible. A task without requirements can be assigned without capability filtering.
Keep labels stable and normalized. For example, choose refrigerated everywhere instead of mixing cold, refrigeration, and Refrigerated. Supported labels contain letters, numbers, spaces, dots, underscores, and hyphens and are limited to 100 characters.
Capabilities determine eligibility; they do not express preference. If several agents satisfy the same requirements, the optimizer may choose among them according to the complete plan.
Match two specialized jobs
This request makes only cold-van eligible for the grocery delivery and only service-van eligible for the appliance delivery.
POST https://api.geoapify.com/v1/routeplanner?apiKey=YOUR_API_KEY
Content-Type: application/json
{
"mode": "drive",
"agents": [
{
"id": "cold-van",
"start_location": [13.4132, 52.5219],
"end_location": [13.4132, 52.5219],
"capabilities": ["refrigerated"]
},
{
"id": "service-van",
"start_location": [13.4132, 52.5219],
"end_location": [13.4132, 52.5219],
"capabilities": ["liftgate"]
}
],
"jobs": [
{
"id": "grocery-delivery",
"location": [13.3777, 52.5163],
"requirements": ["refrigerated"],
"duration": 300
},
{
"id": "appliance-delivery",
"location": [13.4397, 52.505],
"requirements": ["liftgate"],
"duration": 600
}
]
}
The same requirements field is available on shipments when a capability must apply to both pickup and delivery.
Verify eligible assignments
The accepted request produces one matching job for each vehicle. The response is reduced to the assignment and schedule fields.
Reduced response:
{
"features": [
{
"properties": {
"agent_id": "cold-van",
"actions": [
{"type": "job", "job_id": "grocery-delivery", "start_time": 278, "duration": 300, "waypoint_index": 1}
]
}
},
{
"properties": {
"agent_id": "service-van",
"actions": [
{"type": "job", "job_id": "appliance-delivery", "start_time": 243, "duration": 600, "waypoint_index": 1}
]
}
}
]
}
Verify assignments by matching agent_id and job_id, not by relying on feature or action array positions.
If no agent satisfies a task's requirements, inspect properties.issues.unassigned_jobs or unassigned_shipments. Resolve a spelling mismatch, add the missing capability to an eligible agent, or add another agent; do not silently remove a safety- or equipment-related requirement.