Visit our blog post on the API wrapper project to learn more about our initiatives.
If you have any questions, please reach us by submitting an issue here or contact [email protected].
The Onfleet Python library provides convenient access to the Onfleet API.
pip install pyonfleet
Before using the API wrapper, you will need to obtain an API key from one of your organization's admins.
Creation and integration of API keys are performed through the Onfleet dashboard.
To authenticate, you will also need to create a file named .auth.json under your working directory –this is where you will store your API credentials.
The format of .auth.json is shown below:
{
"API_KEY": "<your_api_key>"
}You can also opt in to not store your API key here and pass it as param to Onfleet:
from onfleet import Onfleet
# Option 1 - Recommended
onfleet_api = Onfleet() # Using the .auth.json file
# Option 2
onfleet_api = Onfleet(api_key="<your_api_key>") # Without the .auth.json fileAnother optional parameter for Onfleet is custom_headers where you can pass in headers to be applied to all requests. For example:
onfleet_api = Onfleet(custom_headers={"<header_name>": "<header_value>"})Once the Onfleet object is created, you will get access to all the API endpoints as documented in the Onfleet API documentation.
docker-compose up --build
Rate limiting is enforced by the API with a threshold of 20 requests per second across all your organization's API keys. Learn more about it here.
Responses of this library are instances of Response from the requests library.
Here are the operations available for each entity:
| Entity | GET | POST | PUT | DELETE |
|---|---|---|---|---|
| Admins/Administrators | get() | create(body={}) matchMetadata(body={}) |
update(id, body={}) | deleteOne(id) |
| Containers | get(workers=id) get(teams=id) get(organizations=id) |
x | update(id, body={}) | x |
| Destinations | get(id) | create(body={}) matchMetadata(body={}) |
x | x |
| Hubs | get() | create(body={}) | update(id, body={}) | x |
| Organization | get() get(id) |
x | insertTask(id, body={}) | x |
| Recipients | get(id) get(name="") get(phone="") |
create(body={}) matchMetadata(body={}) |
update(id, body={}) | x |
| Route Plans | get(id) get(queryParams="") |
create(body={}) | update(id, body={}) addTasksToRoutePlan(id, body={}) |
deleteOne(id) |
| Tasks | get(queryParams={}) get(id) get(shortId=id) |
create(body={}) clone(id) forceComplete(id) batch(body={}) autoAssign(body={}) matchMetadata(body={}) |
update(id, body={}) | deleteOne(id) |
| Teams | get() get(id) getWorkerEta(id, queryParams={}) getTasks(id, queryParams={}) |
create(body={}) autoDispatch(id, body={}) |
update(id, body={}) insertTask(id, body={}) |
deleteOne(id) |
| Webhooks | get() | create(body={}) | x | deleteOne(id) |
| Workers | get() get(id) get(queryParams={}) getByLocation(queryParams={}) getSchedule(id) getTasks(id, queryParams={}) |
create(body={}) setSchedule(id, body={}) matchMetadata(body={}) getDeliveryManifest(workerId, hubId, googleApiKey, queryParams={}) |
update(id, body={}) insertTask(id, body={}) |
deleteOne(id) |
To get all the documents within an endpoint:
get()onfleet_api.workers.get()
onfleet_api.workers.get(queryParams="")Optionally you can use queryParams for some certain endpoints.
Refer back to API documentation for endpoints that support query parameters.
# Option 1
onfleet_api.workers.get(queryParams={"phones": "<phone_number>"})
# Option 2
onfleet_api.workers.get(queryParams="phones=<phone_number>")To get one of the document within an endpoint, specify the param that you wish to search by:
get(param="<value>")onfleet_api.workers.get(id="<24_digit_ID>")
onfleet_api.workers.get(id="<24_digit_ID>", queryParams={"analytics": "true"})
onfleet_api.tasks.get(shortId="<shortId>")
onfleet_api.recipients.get(phone="<phone_number>")
onfleet_api.recipients.get(name="<name>")
onfleet_api.containers.get(workers="<worker_ID>")
onfleet_api.containers.get(teams="<team_ID>")
onfleet_api.containers.get(organizations="<organization_ID>")Note: don't use Python-style True and False for boolean values - supply these as strings like "true" or "false".
To get a driver by location, use the getByLocation function:
getByLocation(queryParams="<location_params>")location_params = {
"longitude": "-122.4",
"latitude": "37.7601983",
"radius": "6000",
}
onfleet_api.workers.getByLocation(queryParams=location_params)To create a document within an endpoint:
create(body="<data>")data = {
"name": "John Driver",
"phone": "+16173428853",
"teams": ["<team_ID>", "<team_ID> (optional)", "..."],
"vehicle": {
"type": "CAR",
"description": "Tesla Model S",
"licensePlate": "FKNS9A",
"color": "purple",
},
}
onfleet_api.workers.create(body=data)Extended POST requests include clone, forceComplete, batchCreate, autoAssign on the Tasks endpoint; setSchedule on the Workers endpoint; autoDispatch on the Teams endpoint; and matchMetadata on all supported entities. For instance:
onfleet_api.tasks.clone(id="<24_digit_ID>")
onfleet_api.tasks.forceComplete(id="<24_digit_ID>", body="<data>")
onfleet_api.tasks.batchCreate(body="<data>")
onfleet_api.tasks.autoAssign(body="<data>")
onfleet_api.workers.setSchedule(id="<24_digit_ID>", body="<data>")
onfleet.api.workers.getDeliveryManifest(workerId="<workerId>", hubId="<hubId>", googleApiKey="<googleApiKey>", queryParams={"<startDate>", "<endDate>"})
onfleet_api.teams.autoDispatch(id="<24_digit_ID>", body="<data>")
onfleet_api.<entity_name_pluralized>.matchMetadata(body="<data>")For more details, check our documentation on clone, forceComplete, batchCreate, autoAssign, setSchedule, matchMetadata, getDeliveryManifest and autoDispatch.
To update a document within an endpoint:
update(id="<24_digit_ID>", body="<data>")new_data = {
"name": "Jack Driver",
}
onfleet_api.workers.update(id="<24_digit_ID>", body=new_data)onfleet_api.workers.insertTask(id="<24_digit_ID>", body="<data>")To delete a document within an endpoint:
deleteOne(id="<24_digit_ID>")onfleet_api.workers.deleteOne(id="<24_digit_ID>")Go to top.