Create a job

post
A JOB

https://api.playment.io/v1/projects/:project_id/jobs
This endpoint allows you to create a job
Request
Response
Request
Path Parameters
project_id
required
string
ID of the project in which you want to create the job
Headers
x-api-key
required
string
API key for authentication
Body Parameters
batch_id
optional
string
A batch is a way to organize multiple jobs under one batch_id. You can create new batches from the dashboard or by using the batch creation API. If batch_id is left empty or the key is not present, the job is created in the Default batch in your project.
work_flow_id
required
string
The ID of the workflow inside which you want to create the job
data
required
object
The data object contains all the information and attachments required to label a job. The data object is defined below
reference_id
required
string
The unique identifier of the job
Response
200: OK
{
"data": {
"job_id": "3f3e8675-ca69-46d7-aa34-96f90fcbb732",
"reference_id": "001",
"work_flow_id": "2aae1234-acac-1234-eeff-12a22a237bbc"
},
"success": true
}

Payload

{
"reference_id":"001",
"data":{
"image_url":"https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1"
},
"work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}

Code Example

Python
Python
import requests
import json
"""
Details for creating JOBS,
project_id ->> ID of project in which the job will be created
x_api_key ->> API key for authentication
workflow_id ->> The workflow in which the job will be created
batch_id ->> The batch in which job will be created
"""
#method that can be used to call the job creation api
def create_job(project_id, data, x_api_key):
base_url = "https://api.playment.io/v0/projects/{}/jobs".format(project_id)
headers = {'x-api-key': x_api_key}
response = requests.post(base_url, headers=headers, json=data)
print(response.json())
if response.status_code >= 500:
raise Exception(response.text)
if 400 <= response.status_code < 500:
raise Exception(response.text)
return response.json()
if __name__ == "__main__":
#list of frames in a single job
image_url = "https://example.com/image_url_1"
#reference_id should be unique for each job
reference_id= "job1"
project_id = ''
x_api_key = ''
workflow_id = ''
batch_id = ''
job_data = {
'reference_id':reference_id,
'work_flow_id':workflow_id,
'data':{
'image_url':image_url
},
'batch_id': batch_id
}
response = create_job(project_id=project_id, data=job_data, x_api_key= x_api_key)
print(response)

Creating jobs with pre-labeled data

If you have data which has been labeled previously by an ML model or by human labelers, you can create jobs with such labels already created. To do this, you need to send the annotation data in the data.maker_response key in the payload. The annotation data needs to be in Playment's annotation format.

Here's an example

{
"reference_id":"001",
"data":{
"image_url":"https://s3.aws.com/600x400/000/fff.jpg&text=Dummy+Image+1",
"maker_response" : {
"rectangles": {
"data": []
},
"polygons": {
"data": []
},
"lines": {
"data": []
},
"cuboids": {
"data": []
},
"landmarks": {
"data": []
}
}
},
"work_flow_id":"2aae1234-acac-1234-eeff-12a22a237bbc"
}

Each object in the data.maker_response.rectangles.data list will be an annotation object of the respective annotation type. For example:

Rectangle
Polygons
Lines
Cuboids
Landmarks
Rectangle
{
"_id": "0e6d895e-2484-439a-b62b-d8a0afb3d190",
"label": "Cat".
"attributes": {
"pose": {
"value": "standing"
},
"breed": {
"value": "Persian"
}
},
"coordinates": [
{"x": 0.00398, "y": 0.00558},
{"x": 0.05404, "y": 0.00558},
{"x": 0.05404, "y": 0.09096},
{"x": 0.00398, "y": 0.09096}
]
}
Polygons
{
"_id": "8f8897ad-e07b-4e55-9dbe-61f6b9df85c5",
"label": "face_mask",
"attributes": {
"covers_nose": {
"value": "Yes"
},
}
"points": {
"p1": {"x": 0.286774, "y": 0.892502},
"p2": {"x": 0.385849, "y": 0.576888},
"p3": {"x": 0.426721, "y": 0.469081},
"p4": {"x": 0.288623, "y": 0.253878},
"p5": {"x": 0.148623, "y": 0.353878}
},
"edges": {
"e1": ["p1", "p2"],
"e2": ["p2", "p3"],
"e3": ["p3", "p4"],
"e4": ["p4", "p4"],
"e5": ["p5", "p1"]
}
}
Lines
{
"_id": "8f8897ad-e07b-4e55-9dbe-61f6b9df85c5",
"label": "lane_divider",
"attributes": {
"raised": {
"value": "Yes"
},
}
"points": {
"p1": {"x": 0.286774, "y": 0.892502},
"p2": {"x": 0.285849, "y": 0.876888},
"p3": {"x": 0.286774, "y": 0.869081},
"p4": {"x": 0.288623, "y": 0.853878}
}
}
Cuboids
{
"_id": "8f8897ad-e07b-4e55-9dbe-61f6b9df85c5",
"label": "Car",
"attributes" : {
"faces_visible": {
"value": ["right","back"]
}
},
"points": {
"p1": {"x": 0.17,"y": 0.58},
"p2": {"x": 0.26,"y": 0.58},
"p3": {"x": 0.26,"y": 0.49},
"p4": {"x": 0.17,"y": 0.49},
"p5": {"x": 0.24,"y": 0.51},
"p6": {"x": 0.35,"y": 0.52},
"p7": {"x": 0.35,"y": 0.36},
"p8": {"x": 0.25,"y": 0.37}
},
"front": {
"coordinates": ["p1","p2","p3","p4"]
},
"side": {
"coordinates": ["p2","p3","p5","p6"]
},
"back": {
"coordinates": ["p7","p8","p5","p6"]
}
}
Landmarks
{
"_id": "e7e3353f-2ffe-432a-a14f-9cb9a6f4b735",
"label": "nose",
"attributes": {
"visible": {
"value": "Partially"
},
}
"points": {
"p1": { "x": 0.17, "y": 0.58, "label": 1 },
"p2": { "x": 0.26, "y": 0.63, "label": 2 },
"p3": { "x": 0.27, "y": 0.63, "label": 3 },
"p4": { "x": 0.29, "y": 0.59, "label": 4 },
"p5": { "x": 0.25, "y": 0.46, "label": 5 },
"p6": { "x": 0.22, "y": 0.42, "label": 6 }
}
}