Create a new Ticket
Creating a new ticket is a bit more of a complicated process than getting information about tickets. It mainly requires more preparation beforehand. But don't worry, everything that you need is described below.
Examples below
The examples below are written in Python and are using requests library for communication with the API. The response from the API will be represented as JSON.
The examples below were tested and they do work, so you can easily follow along.
API Keys
The API keys used in the examples below are random, and they do not work - use your own API keys.
First steps
Here is the Create a Ticket endpoint that will show you in great detail which fields are required, which fields are optional, and will let you try the endpoint out.
When creating a ticket, you need to have a company set up first. This can be done by going to Settings
> Company
then clicking on the Edit
button in the lower right corner.
Getting the required data
Other than the company data, the creation of a ticket requires providing some information, some of them are IDs of different elements which can be a bit tricky to obtain. Here is the explanation of how to get the required IDs.
A ticket type
is a required field for creating a new ticket. If you do not have the ticket type created, you have to do that first. The ticket type page on the platform can be found by going to Settings
> Company
, clicking on the Edit
button in the lower right corner, and selecting the Tickets
tab. The Ticket Types
will be placed next to the Ticket Categories
in the second tab-bar. Here, you will see your already created ticket types, but you will also be able to create new ones.
But how to get the ID?
The ID of a particular ticket type can be found by calling the Get Ticket Types endpoint and filtering the data out to get only a specific type.
The other fields, that also require the ID, are optional for creating a ticket. This means that they do not have to be provided with the request. Those are the following fields:
property
container
assignee
requested_by
If you want to supply the request with the information of those elements, the best way to obtain their IDs is to call their respective endpoints, get all the elements and then filter them to get only the specific one - the same approach as with getting the ticket type
ID.
Here are the endpoints to call to get all the data of the above elements:
property = "https://platform-api.wastehero.io/api/v3/property/"
container = "https://platform-api.wastehero.io/api/v3/container/"
assignee = "https://platform-api.wastehero.io/api/v3/user/"
requested_by = "https://platform-api.wastehero.io/api/v3/property_user/"
Another optional (and slightly tricky) field is location
, which takes a location object as a parameter. location
should look like this:
location = {
"longitude": "10.203921",
"latitude": "56.092592",
"name": ""
}
Building the request body
If you went through the section above, and have all the data, you are ready to create a ticket. The majority of the fields that are meant to be sent with the body are optional, so if you are not sure what has to be sent, refer to the API reference.
In general, the body for the request could look like the one presented below.
body = {
"ticket_type": "gDuatLM4i4df/MOkXQSaHg==",
"property": "ZpHUiuj5GoPfHI6lGgRmQg==",
"location": {
"longitude": "10.203921",
"latitude": "56.092592",
"name": ""
},
"container": "eo6jLvV82mGGTErfCBhsng==",
"assignee": "01jQ9TYpxlbH0CLeHFetHA==",
"requested_by": "4ft7D+oX7mHPFHDiJEcMhw==",
"status": 1,
"priority": 2,
"description": "This is my new ticket",
"time_spent": "",
"waste_weight_estimate": "",
"waste_volume_estimate": "",
"deadline": "",
"requested_by_other": "",
"preferred_date": "",
"ignore_service_fee": False
}
What is worth mentioning is that the status
and priority
fields must have a particular value assigned to them (provided as an integer). The fields have the following options available:
-
For
status
- 1 (Created)
- 2 (Open)
- 3 (Pending)
- 4 (On hold)
- 5 (In progress)
- 6 (Completed)
- 7 (Rejected)
-
For
priority
- 0 (None)
- 1 (Low)
- 2 (Medium)
- 3 (High)
- 4 (Critical)
Final example
Now that you know how to create a body, it is time to put everything together into a final request. Below, you can see what such an example could look like.
Note that because we want to create a new ticket, we are going to use the POST
request, and not GET
as in previous ticket endpoints.
import requests
import json
url = "https://platform-api.wastehero.io/api/v3/ticket/"
headers = {
"accept": "application/json",
"content-type": "application/json",
"X-API-Key": "60eea422-7091-46d3-9117-3408af60d9bd"
}
body = {
"ticket_type": "gDuatLM4i4df/MOkXQSaHg==",
"property": "ZpHUiuj5GoPfHI6lGgRmQg==",
"location": {
"longitude": "10.203921",
"latitude": "56.092592",
"name": ""
},
"container": "eo6jLvV82mGGTErfCBhsng==",
"assignee": "01jQ9TYpxlbH0CLeHFetHA==",
"requested_by": "4ft7D+oX7mHPFHDiJEcMhw==",
"status": 1,
"priority": 2,
"description": "This is my new ticket",
"time_spent": "",
"waste_weight_estimate": "",
"waste_volume_estimate": "",
"deadline": "",
"requested_by_other": "",
"preferred_date": "",
"ignore_service_fee": False
}
response = requests.get(url, data=json.dumps(body), headers=headers, )
print(response.text)
Response models
After you make a request to the correct endpoint for creating a new ticket - if everything went correctly - you are going to get back a payload with all the information of the newly created ticket. Below you can see what such a payload will look like.
{
"ticket_type": {
"id": "string",
"name": "string",
"service_type": "string"
},
"property": {
"location": {
"longitude": 0,
"latitude": 0,
"name": "string"
},
"unique_number": "string",
"note": "string",
"meta_data": {},
"created_at": "2022-08-31T14:00:47.715Z"
},
"location": {
"longitude": 0,
"latitude": 0,
"name": "string"
},
"container": {
"container_type": {
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"pickup_setting": {
"id": "string",
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"name": "string",
"pickup_method": "string",
"container_status": "string",
"emptying_interval_from": "string",
"emptying_interval_to": "string",
"exclude_days": [
"string"
],
"fixed_pickups_period": "string",
"pickup_interval": "string",
"pickup_repeat_period": 0,
"allowed_hours_from": "string",
"allowed_hours_to": "string",
"amount_days_between_pickups": 0,
"minimum_days_between_pickup": 0,
"collection_per_week": 0,
"first_collection": "2022-08-31"
},
"name": "string",
"emplacement": "string",
"mobility": "string",
"vehicle_coupling": [
"string"
],
"container_access": "string",
"emptying_time": 0,
"width": 0,
"height": 0,
"length": 0,
"diameter": 0,
"is_cylindrical": false
},
"container_group": {
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"location": {
"longitude": 0,
"latitude": 0,
"name": "string"
},
"created_at": true,
"name": "string",
"updated_at": "string"
},
"stored_at_depot": {
"id": "string",
"location": {
"longitude": 0,
"latitude": 0,
"name": "string"
},
"name": "string",
"description": "string",
"geofence_radius": 0,
"opening_time": "string",
"closing_time": "string",
"time_to_unload_truck": "string",
"time_to_leave_the_facility": "string",
"amount_of_trucks": 0,
"capacity_of_trucks": 0,
"workshop_service_description": "string",
"workshop_type": "string"
},
"location": {
"longitude": 0,
"latitude": 0,
"name": "string"
},
"waste_fraction": {
"id": "string",
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"name": "string",
"waste_type": "string",
"waste_category": "string",
"waste_substance": "string",
"weight_factor": 0
},
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"measurement": {
"fill_level_measurement_meta": {
"created_at": "2022-08-31T14:00:47.715Z",
"protocol": "string",
"json_version": 0,
"transmit_count": 0,
"gwt": "",
"battery_level": 0,
"rsi": 0,
"register_time": 0,
"snr": 0,
"header_version": 0,
"text": "string",
"ccid": "string",
"crc": "string",
"act": "string",
"oper": "string",
"ch": 0,
"cid": "string",
"lac": "string",
"ant": "string",
"old_status_code": 0,
"battery_percentage": 0
},
"fill_level": 0,
"raw_measurements": [
0
],
"fill_percentage": 0,
"temperature": 0,
"dev_id": "",
"created_at": "2022-08-31T14:00:47.715Z"
},
"container_id": "string",
"status": "string",
"allowed_hours_start": "string",
"allowed_hours_end": "string",
"description": "string",
"show_on_route": false,
"pickup_method": "string",
"sensor_fill_level": 0,
"prioritize_in_start_of_route": false,
"updated_at": "2022-08-31T14:00:47.715Z",
"created_at": "2022-08-31T14:00:47.715Z"
},
"assignee": {
"id": "string",
"active_token": "string",
"external_crm_id": "string",
"phone_number": "string",
"language": "string",
"is_sms": false,
"is_email": false,
"is_push": true,
"created_at": "2022-08-31T14:00:47.715Z",
"updated_at": "2022-08-31T14:00:47.715Z",
"demo_expire_date": "2022-08-31",
"is_superuser": false,
"is_demo": false,
"is_reseller": false,
"is_master": false,
"is_beta": false,
"active_projects": [
0
]
},
"requested_by": {
"anonymous": false,
"token": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "string",
"email": "string",
"phone_number": "string",
"phone_number_token": "string",
"language": "string",
"created_at": "2022-08-31T14:00:47.715Z"
},
"status": 0,
"priority": 0,
"description": "string",
"migrated_from_id": "string",
"time_spent": 0,
"waste_weight_estimate": 0,
"waste_volume_estimate": 0,
"deadline": "2022-08-31T14:00:47.715Z",
"requested_by_other": "string",
"preferred_date": "2022-08-31",
"ignore_service_fee": false,
"id": "string",
"created_at": "2022-08-31T14:00:47.715Z",
"updated_at": "2022-08-31T14:00:47.715Z",
"reporter": {
"id": "string",
"active_token": "string",
"external_crm_id": "string",
"phone_number": "string",
"language": "string",
"is_sms": false,
"is_email": false,
"is_push": true,
"created_at": "2022-08-31T14:00:47.715Z",
"updated_at": "2022-08-31T14:00:47.715Z",
"demo_expire_date": "2022-08-31",
"is_superuser": false,
"is_demo": false,
"is_reseller": false,
"is_master": false,
"is_beta": false,
"active_projects": [
0
]
},
"status_open_at": "2022-08-31T14:00:47.715Z",
"status_pending_at": "2022-08-31T14:00:47.715Z",
"status_on_hold_at": "2022-08-31T14:00:47.715Z",
"status_in_progress_at": "2022-08-31T14:00:47.715Z",
"status_completed_at": "2022-08-31T14:00:47.715Z",
"status_rejected_at": "2022-08-31T14:00:47.715Z",
"container_price": {
"id": "string",
"pickup_setting": {
"id": "string",
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"name": "string",
"pickup_method": "string",
"container_status": "string",
"emptying_interval_from": "string",
"emptying_interval_to": "string",
"exclude_days": [
"string"
],
"fixed_pickups_period": "string",
"pickup_interval": "string",
"pickup_repeat_period": 0,
"allowed_hours_from": "string",
"allowed_hours_to": "string",
"amount_days_between_pickups": 0,
"minimum_days_between_pickup": 0,
"collection_per_week": 0,
"first_collection": "2022-08-31"
},
"waste_fraction": {
"id": "string",
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"name": "string",
"waste_type": "string",
"waste_category": "string",
"waste_substance": "string",
"weight_factor": 0
},
"container_type": {
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"pickup_setting": {
"id": "string",
"project": {
"id": "string",
"name": "string",
"description": "string",
"creating_demo_data": false
},
"name": "string",
"pickup_method": "string",
"container_status": "string",
"emptying_interval_from": "string",
"emptying_interval_to": "string",
"exclude_days": [
"string"
],
"fixed_pickups_period": "string",
"pickup_interval": "string",
"pickup_repeat_period": 0,
"allowed_hours_from": "string",
"allowed_hours_to": "string",
"amount_days_between_pickups": 0,
"minimum_days_between_pickup": 0,
"collection_per_week": 0,
"first_collection": "2022-08-31"
},
"name": "string",
"emplacement": "string",
"mobility": "string",
"vehicle_coupling": [
"string"
],
"container_access": "string",
"emptying_time": 0,
"width": 0,
"height": 0,
"length": 0,
"diameter": 0,
"is_cylindrical": false
},
"name": "string",
"invoice_name": "string",
"amount": 0,
"start_date": "2022-08-31",
"end_date": "2022-08-31",
"recurring_interval": 12,
"created_at": "2022-08-31T14:00:47.715Z"
}
}
If the request was not successful, it will result in the 400 response code, which signifies an error. This response will also come with its own payload - showing what went wrong and explaining why.
If you get the 400 response code back, the new ticket was not created, and you have to fix the mistake and send a request one more time.
{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}
Updated over 2 years ago