Get job
GET
/v20/jobs/{jobId}Returns a job by ID. The job must belong to the authenticated account and must have been created via the V20 API (source: "apiV20"). Jobs created through other sources (V1, email) return 404.
The response uses JSON:API format with application/vnd.api+json content type. Related events are automatically included.
Authentication
Requires HTTP Basic authentication with your API Credential ID and Token.
Content Type
application/vnd.api+json
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
jobId | string (UUID) | Yes | The job ID |
Response
200 — Job details (JSON:API)
{
"data": {
"type": "jobs",
"id": "9af67ab2-ceb6-4dae-9ef3-fe145ae65cd1",
"attributes": {
"state": "queued",
"environment": "production",
"externalId": "order-1024",
"source": "apiV20",
"createdAt": "2026-03-22T12:00:00Z",
"updatedAt": "2026-03-22T12:00:05Z",
"expiresAt": "2026-03-22T12:05:00Z",
"metadata": {
"orderData": {
"customer": { "name": "John Smith" },
"line_items": [
{ "name": "Pepperoni Pizza", "quantity": 1, "price": 18.00 }
],
"totals": { "subtotal": 18.00, "tax": 1.49, "total": 19.49, "quantity": 1 }
}
}
},
"relationships": {
"account": {
"data": { "type": "accounts", "id": "c75c40ff-3263-4171-afe4-1e138f8ea616" }
},
"printer": {
"data": { "type": "printers", "id": "f9d43179-9c10-4502-8f62-892740a65318" }
},
"events": {
"data": [
{ "type": "events", "id": "evt-001" },
{ "type": "events", "id": "evt-002" }
]
}
}
},
"included": [
{
"type": "events",
"id": "evt-001",
"attributes": {
"action": "job.created",
"type": "info",
"eventableId": "9af67ab2-ceb6-4dae-9ef3-fe145ae65cd1",
"eventableType": "Job",
"metadata": { "source": "apiV20" },
"createdAt": "2026-03-22T12:00:00Z"
}
},
{
"type": "events",
"id": "evt-002",
"attributes": {
"action": "job.queued",
"type": "info",
"eventableId": "9af67ab2-ceb6-4dae-9ef3-fe145ae65cd1",
"eventableType": "Job",
"metadata": null,
"createdAt": "2026-03-22T12:00:01Z"
}
}
]
}
Attributes
| Field | Type | Description |
|---|---|---|
state | string | Job state (queued, processing, processed, downloaded, printed, expired, error) |
environment | string | production or development |
externalId | string | Your external order/reference ID |
source | string | Always apiV20 for jobs returned by this endpoint |
createdAt | string (date-time) | Job creation timestamp |
updatedAt | string (date-time) | Last update timestamp |
expiresAt | string (date-time) | Job expiration timestamp |
metadata | object | null | Order data and job metadata (excluding internal fields body, fulfillAt, doublePrint) |
Relationships
| Relationship | Type | Description |
|---|---|---|
account | accounts | The account that owns this job |
printer | printers | The printer this job was sent to |
events | events[] | All lifecycle events for this job (sorted by creation time) |
Included Resources
All associated events are automatically included. Each event contains:
| Field | Type | Description |
|---|---|---|
action | string | Event action (e.g., job.created, job.queued, job.printed) |
type | string | Event type |
eventableId | string (UUID) | The job ID this event belongs to |
eventableType | string | Always Job |
metadata | object | null | Additional event metadata |
createdAt | string (date-time) | When the event occurred |
400 — Missing path parameter
{
"errors": [
{ "status": "400", "title": "Bad Request", "detail": "jobId path parameter is required" }
]
}
403 — Account not found or disabled
{
"errors": [
{ "status": "403", "title": "Forbidden", "detail": "Account not found" }
]
}
404 — Job not found
Returned when the job does not exist, belongs to a different account, or was not created via the V20 API.
{
"errors": [
{ "status": "404", "title": "Not Found", "detail": "Job not found" }
]
}
401 — Not authorized
Returned when the API credential is invalid, disabled, or missing.