Denim Jobs API
A job is a collection of obligations (payables, receivables, and fees) associated with an invoice or purchase order.
A job is a collection of obligations (payables, receivables, and fees) associated with an invoice or purchase order.
openapi: 3.0.0
info:
contact:
email: engineering@denim.com
name: Denim Engineering Team
url: https://www.denim.com
description: The Denim Public API can be used by 3rd parties to sync companies, debtor relationships, payee relationships, and create invoices within Denim's payment platform. This enables streamlined operations and job invoice data between transportation management systems and Denim.
title: Denim Public API Reference Documentation Companies Jobs API
version: 1.0.0
x-logo:
altText: Denim
backgroundColor: '#f5f5f5'
url: https://app.denim.com/images/branding/denim-logo-color.png
servers:
- description: Staging Environment
url: https://staging.denim.com
variables: {}
security:
- api_key: []
tags:
- description: A job is a collection of obligations (payables, receivables, and fees) associated with an invoice or purchase order.
externalDocs:
description: 'Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
name: Jobs
paths:
/api/v1/jobs:
get:
callbacks: {}
description: A job is a collection of payables, receivables, and fees (obligations) associated with an invoice or purchase order.
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.index (2)
parameters:
- description: Search by company name, amount, or job number
example: $1,000.00
in: query
name: query
required: false
schema:
type: string
- description: Job statuses
example: approved
in: query
name: status
required: false
schema:
description: Job statuses
enum:
- draft
- pending
- approved
- rejected
- completed
- all_active
- all_inactive
example: approved
title: Job Status
type: string
- description: 'When true, return only jobs that need attention: manual/admin flag OR actionable document-audit issue.'
in: query
name: needs_attention
required: false
schema:
type: boolean
- description: The page of results to query.
example: 1
in: query
name: page
required: false
schema:
type: integer
- description: The number of entities per page of results.
example: 10
in: query
name: per_page
required: false
schema:
type: integer
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Index Response'
description: Jobs index response
security:
- api_key: []
summary: List Jobs
tags:
- Jobs
post:
callbacks: {}
description: Create a new Job.
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.create (2)
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Job Create Request'
description: Job create request
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Create Response'
description: New Job
security:
- api_key: []
summary: Create a Job
tags:
- Jobs
/api/v1/jobs/quote:
post:
callbacks: {}
description: Get a factoring fee quote for a Job.
externalDocs:
description: 'API Integration Guides: Job Quote'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.get_quote
parameters: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Job Quote Request'
description: Job Quote Request
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Quote Response'
description: Job Quote Response
security:
- api_key: []
summary: Get Job Quote
tags:
- Jobs
/api/v1/jobs/{id}:
delete:
callbacks: {}
description: Deletes a Job in Pending or Draft status.
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.delete (2)
parameters:
- description: Job UUID
example: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Delete Response'
description: Deleted Job
security:
- api_key: []
summary: Delete a Job
tags:
- Jobs
get:
callbacks: {}
description: This retrieves a single job by UUID
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.show (2)
parameters:
- description: Job UUID
example: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Show Response'
description: Single Job response
security:
- api_key: []
summary: Get a single Job Record
tags:
- Jobs
/api/v1/jobs/{job_id}/documents:
post:
callbacks: {}
deprecated: false
description: 'This endpoint enables adding documents to existing jobs.
This can accept either a json body with a publicly accessible `url`, `type` and `subtype`, or a multi-part form body including a `file` as the binary and `type` and `subtype`. In either case, the document will be uploaded and stored to our secure Google Cloud Platform storage.
'
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: Elixir.AxlePayWeb.Api.V1.Job.DocumentController.create
parameters:
- description: Job UUID
example: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
in: path
name: job_id
required: true
schema:
type: string
requestBody:
content:
application/json:
example:
subtype: invoice
type: billing_paperwork
url: https://example.com/samples/sample_files/sample_document.pdf
schema:
$ref: '#/components/schemas/Add a document to a job'
multipart/form-data:
example:
file: ''
subtype: invoice
type: billing_paperwork
schema:
$ref: '#/components/schemas/Upload a document to a job'
description: Upload document request body
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Document'
description: Upload document response
summary: Create Job Document
tags:
- Jobs
/api/v1/jobs/{job_id}/revert-to-draft:
post:
callbacks: {}
description: Reverts a pending Job back to a draft status.
externalDocs:
description: 'API Integration Guides: Adding Jobs'
url: https://help.denim.com/hc/en-us/articles/9403903798811-5-Adding-Jobs
operationId: AxlePayWeb.Api.V1.JobController.revert_to_draft (2)
parameters:
- description: Job UUID
example: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
in: path
name: job_id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Job Show Response'
description: Updated Job Record
security:
- api_key: []
summary: Revert Job to Draft
tags:
- Jobs
components:
schemas:
Job Quote Response:
description: Response for getting a job quote
example:
data:
factoring_fee: 3000
valid_until: '2021-07-06T15:59:59Z'
properties:
data:
description: Factoring fee and with validity cutoff time.
properties:
factoring_fee:
description: Total factoring cost for the job in cents
type: integer
valid_until:
description: UTC time of when the quote is valid until.
type: string
type: object
title: Job Quote Response
type: object
Job Index Response:
description: Response schema for fetching jobs
example:
data:
- actionable_doc_audit_issue_count: 0
client_id: 2
company_id: 3
documents:
- file_name: 1582558423630_a5993a13c2_embedded_jpeg_pdf.pdf
inserted_at: '2020-02-24T15:33:46'
type: billing_paperwork
url: https://link-to-gcp-file.gcp.com
uuid: 3227bb84-6735-48c1-b8ea-4e7d09d1e07d
is_approved: true
is_rejected: false
is_validated: true
is_verified: true
manual_needs_attention: false
needs_attention: false
notes: There was a lumper fee
obligations:
- amount_due: 10000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_days_to_pay_offset: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-02-26T15:34:22Z'
latest_entry: null
payment_status: scheduled
reference_number: ''
status: approved
subtype: advance
total_amount: 10000
type: payable
- amount_due: 80000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_days_to_pay_offset: 3
client_payee_relationship_id: 21
company_id: 45
company_name: Carrier LLC
discounted_days: 0
due_date: '2020-02-26T15:34:22Z'
latest_entry: null
payment_status: scheduled
reference_number: ''
status: approved
subtype: advance
total_amount: 80000
type: payable
uuid: a5558b9f-21d1-44b3-ad35-d642c9dc9b4d
- amount_due: 2000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_days_to_pay_offset: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
latest_entry: null
payment_status: expected
reference_number: ''
status: approved
subtype: factoring_fee
total_amount: 3000
type: earnings
uuid: 580a94ca-0920-4fd3-aac7-aad144b57995
- amount_due: 7000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_days_to_pay_offset: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
latest_entry:
inserted_at: '2020-03-24T04:00:00Z'
type: rebate_auto_giveback
uuid: 0a212a02-1623-4ea8-811c-db3da8e90f12
payment_status: expected
reference_number: ''
status: approved
subtype: rebate
total_amount: 7000
type: payable
uuid: 740ecc52-77f5-461d-b7dd-a30266dbc8d0
- amount_due: 100000
applied_amount: 0
client_debtor_relationship_id: 30
client_payee_relationship_days_to_pay_offset: null
client_payee_relationship_id: null
company_id: 116
company_name: New Debtor
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
latest_entry:
inserted_at: '2020-03-24T04:00:00Z'
type: payment_applied_to_obligation
uuid: 0a212a02-1623-4ea8-811c-db3da8e90f12
line_items:
- amount: 89000
description: Invoice Price
type: base_amount
- amount: 9000
description: Lumper Fee
type: accessorial_fee
- amount: 2000
description: Fuel Surcharge
type: accessorial_fee
payment_status: expected
reference_number: ''
status: approved
subtype: primary
total_amount: 100000
type: receivable
uuid: a5c3a55e-a58a-40a0-9408-6cfbc89f7441
reference_number: test-123
status: approved
status_message: This job is approved
uuid: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
page: 1
per_page: 2
total_pages: 3
total_result: 1
properties:
data:
items:
$ref: '#/components/schemas/Job'
type: array
page:
description: Current page of results
type: integer
per_page:
description: Entities per page
type: integer
total_pages:
description: Total number of pages
type: integer
total_result:
description: Total number of results
type: integer
title: Job Index Response
type: object
Job Delete Response:
description: Response schema for deleting a job
example:
data:
job_uuid: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
properties:
data:
description: Job uuid only
properties:
job_uuid:
description: Unique identifier for the job in UUID4 format
type: string
type: object
title: Job Delete Response
type: object
Job Document:
description: Associated documents for the job. Optional
properties:
subtype:
description: Billing or supporting paperwork subtype. Optional
enum:
- purchase_order
- proof_of_work
- invoice
nullable: true
type: string
type:
description: Billing paperwork gets sent to debtor. Supporting paperwork allows us to pay the carrier.
enum:
- billing_paperwork
- supporting_paperwork
type: string
url:
description: 'Full remote URL of document file to be uploaded. Content-Type header is required in response. Allowed Content-Type values: application/pdf, image/png and image/jpeg.'
type: string
title: Job Document
type: object
Job Show Response:
description: Response schema for fetching jobs
example:
data:
actionable_doc_audit_issue_count: 0
client_id: 2
company_id: 3
documents:
- file_name: 1582558423630_a5993a13c2_embedded_jpeg_pdf.pdf
inserted_at: '2020-02-24T15:33:46'
type: billing_paperwork
url: https://link-to-gcp-file.gcp.com
uuid: 3227bb84-6735-48c1-b8ea-4e7d09d1e07d
is_approved: true
is_rejected: false
is_validated: true
is_verified: true
manual_needs_attention: false
needs_attention: false
notes: There was a lumper fee
obligations:
- amount_due: 10000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-02-26T15:34:22Z'
payment_details: {}
payment_status: scheduled
reference_number: ''
status: approved
subtype: advance
total_amount: 10000
type: payable
- amount_due: 80000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_id: 21
company_id: 45
company_name: Carrier LLC
discounted_days: 0
due_date: '2020-02-26T15:34:22Z'
payment_details: {}
payment_status: scheduled
reference_number: ''
status: approved
subtype: advance
total_amount: 80000
type: payable
uuid: a5558b9f-21d1-44b3-ad35-d642c9dc9b4d
- amount_due: 2000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
payment_details: {}
payment_status: expected
reference_number: ''
status: approved
subtype: factoring_fee
total_amount: 3000
type: earnings
uuid: 580a94ca-0920-4fd3-aac7-aad144b57995
- amount_due: 7000
applied_amount: 0
client_debtor_relationship_id: null
client_payee_relationship_id: null
company_id: 2
company_name: Denim Logistics
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
payment_details: {}
payment_status: expected
reference_number: ''
status: approved
subtype: rebate
total_amount: 7000
type: payable
uuid: 740ecc52-77f5-461d-b7dd-a30266dbc8d0
- amount_due: 100000
applied_amount: 0
client_debtor_relationship_id: 30
client_payee_relationship_id: null
company_id: 116
company_name: New Debtor
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
line_items:
- amount: 89000
description: Invoice Price
type: base_amount
- amount: 9000
description: Lumper Fee
type: accessorial_fee
- amount: 2000
description: Fuel Surcharge
type: accessorial_fee
payment_details:
account_name: Bank Account Name
account_number: X7890
account_type: checking
payment_status: fully_paid
reference_number: ''
status: approved
subtype: primary
total_amount: 100000
type: receivable
uuid: a5c3a55e-a58a-40a0-9408-6cfbc89f7441
reference_number: test-123
status: approved
status_message: This job is approved
uuid: 06f9eccc-e5df-44ce-ba68-d4ccbdbc33e6
properties:
data:
$ref: '#/components/schemas/Job'
title: Job Show Response
type: object
Upload a document to a job:
description: Upload a PDF, PNG, or JPEG documents associated with a job. Files will be uploaded to our secure file storage.
properties:
file:
description: Multi-part file upload of document.
format: binary
type: string
subtype:
description: Billing or supporting paperwork subtype. Optional
enum:
- purchase_order
- proof_of_work
- invoice
nullable: true
type: string
type:
description: Billing paperwork gets sent to debtor. Supporting paperwork allows us to pay the carrier.
enum:
- billing_paperwork
- supporting_paperwork
type: string
title: Upload a document to a job
type: object
Job Create Response:
description: Response for creating a job
example:
data:
company_id: 784
documents:
- subtype: proof_of_work
type: billing_paperwork
url: https://example.com/samples/sample_files/sample_document.pdf
- subtype: invoice
type: supporting_paperwork
url: https://example.com/samples/sample_files/sample_document.pdf
is_factored: true
obligations:
- client_debtor_relationship_id: null
client_payee_relationship_id: 21
company_id: 45
discounted_days: 0
due_date: '2020-02-26T15:34:22Z'
obligation_date: '2020-01-26T15:34:22Z'
reference_number: ''
subtype: primary
total_amount: 80000
type: payable
- client_debtor_relationship_id: 30
client_payee_relationship_id: null
company_id: 116
discounted_days: 0
due_date: '2020-03-26T04:00:00Z'
line_items:
- amount: 89000
description: Invoice Price
type: base_amount
- amount: 9000
description: Lumper Fee
type: accessorial_fee
- amount: 2000
description: Fuel Surcharge
type: accessorial_fee
obligation_date: '2020-02-26T04:00:00Z'
reference_number: ''
subtype: primary
total_amount: 100000
type: receivable
reference_number: test-123
status: pending
status_message: null
uuid: 3227bb84-6735-48c1-b8ea-4e7d09d1e07d
properties:
data:
properties:
company_id:
description: Company ID
type: integer
documents:
items:
$ref: '#/components/schemas/Job Document'
type: array
is_factored:
description: Whether job should be factored or not.
type: boolean
obligations:
items:
description: Payables, Receivables, and Denim's Fees for a job
properties:
allocated_payables:
description: '[Not yet implemented] For receivable-only jobs, tracks the payables associated to the receivable. In particular for LTL shipments, this enables a receivable-only job to be associated with previous payable obligations.'
example: []
items:
properties:
allocated_cost:
description: Allocated cost in cents.
type: number
allocated_revenue:
description: Allocated revenue in cents
type: number
payable_reference_number:
description: Payable reference number
required: true
type: string
type: object
type: array
allocated_receivables:
description: '[Not yet implemented] For payable-only jobs, tracks the receivables associated to the payable. In particular for LTL shipments, this enables a payable-only job to be associated with a future receivable obligation.'
example: []
items:
properties:
allocated_cost:
description: Allocated cost in cents.
type: number
allocated_revenue:
description: Allocated revenue in cents
type: number
receivable_reference_number:
description: Receivable reference number
required: true
type: string
type: object
type: array
client_debtor_relationship_id:
description: Client debtor relationship ID for the receivable obligation
nullable: true
type: integer
client_payee_relationship_id:
description: Client payee relationship ID for the payable obligation
nullable: true
type: integer
company_id:
description: Company ID for the obligation
type: integer
discounted_days:
description: Number of days factoring was delayed for a discount
type: integer
due_date:
description: Date obligation is due in ISO format. The due_date should be within -60 and +120 days of the current datetime.
type: string
line_items:
description: " Line Items associated with the obligation. Two requirements:\n 1. base_amount line item must be provided, the rest should be accessorial_fee\n 1. The sum of all line item amounts must add up to the total_amount of the receivable obligation\n"
example:
- amount: 89000
description: Invoice Price
type: base_amount
- amount: 9000
description: Lumper Fee
type: accessorial_fee
- amount: 2000
description: Fuel Surcharge
type: accessorial_fee
items:
description: 'Line Item associated with the obligation. '
properties:
amount:
description: Amount of the obligation in cents
example: 6500
type: integer
description:
description: Describe the line item
example: Lumper Fee
type: string
type:
description: Type of the line item
enum:
- accessorial_fee
- base_amount
- express_factoring_fee
- non_factoring_fee
- job_processing_fee
- servicing_fee
example: accessorial_fee
type: string
title: Obligation Line Item
type: object
type: array
obligation_date:
description: Invoice date of the obligation.
type: string
reference_number:
description: PO or Invoice number.
nullable: true
type: string
subtype:
description: Subtype of the obligation
enum:
- primary
- advance
- rebate
- factoring_fee
- servicing_fee
type: string
total_amount:
description: Total amount of the obligation in cents
type: integer
type:
description: Type of the obligation
enum:
- receivable
- payable
- earnings
type: string
title: Job Obligation Data
type: object
type: array
reference_number:
description: Job reference number
type: string
status:
description: Job statuses
enum:
- draft
- pending
- approved
- rejected
- completed
type: string
status_message:
description: Message from our team
nullable: true
type: string
uuid:
description: Unique identifier for the job in UUID4 format
type: string
type: object
title: Job Create Response
type: object
Job Quote Request:
description: Request body for requesting a factoring fee quote
example:
obligations:
- client_payee_relationship_id: 21
due_date: '2020-02-26T15:34:22Z'
obligation_date: '2020-01-26T15:34:22Z'
reference_number: ''
subtype: primary
total_amount: 80000
type: payable
- client_debtor_relationship_id: 30
due_date: '2020-03-26T04:00:00Z'
obligation_date: '2020-02-26T04:00:00Z'
reference_number: ''
subtype: primary
total_amount: 100000
type: receivable
properties:
obligations:
items:
description: Payables, Receivables, and Denim's Fees for a job
properties:
client_debtor_relationship_id:
description: Client debtor relationship ID for the receivable obligation
nullable: true
type: integer
client_payee_relationship_id:
description: Client payee relationship ID for the payable obligation
nullable: true
type: integer
due_date:
description: Date obligation is due in ISO format. The due_date should be within -60 and +120 days of the current datetime.
type: string
obligation_date:
description: Invoice date of the obligation.
type: string
reference_number:
description: PO or Invoice number.
nullable: true
type: string
subtype:
description: Subtype of the obligation
enum:
- primary
- client
type: string
total_amount:
description: Total amount of the obligation in cents
type: integer
type:
description: Type of the obligation
enum:
- receivable
- payable
type: string
uuid:
description: Unique identifier for the Obligation in UUID4 format. Optional
required: false
type: string
title: Job Obligation Data
type: object
type: array
title: Job Quote Request
type: object
Job:
description: A job and it's documents and obligations.
properties:
actionable_doc_audit_issue_count:
default: 0
description: Count of document-audit issues in action_required status for this job.
minimum: 0
type: integer
client_id:
description: Client ID
type: integer
company_id:
description: Company ID
type: integer
documents:
items:
$ref: '#/components/schemas/Job Document'
type: array
is_app
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/denim/refs/heads/main/openapi/denim-jobs-api-openapi.yml