Jobs

class ab.api.endpoints.jobs.JobsEndpoint(acportal_client, abc_client, resolver)[source]

Operations on jobs (ACPortal + ABC APIs).

Subgroups (each is a BaseEndpoint instance organised by swagger tag):

  • noteJobNote (api.jobs.note)

  • on_holdJobOnHold (api.jobs.on_hold)

  • formJobForm (api.jobs.form)

The legacy flat method names (get_notes, list_on_hold …) remain on this class as deprecation shims and forward to the subgroups.

Parameters:
  • acportal_client (HttpClient)

  • abc_client (HttpClient)

  • resolver (CodeResolver)

note: JobNoteEndpoint
on_hold: JobOnHoldEndpoint
form: JobFormEndpoint
timeline: JobTimelineEndpoint
email: JobEmailEndpoint
sms: JobSmsEndpoint
freight_providers: JobFreightProvidersEndpoint
parcel_items: JobParcelItemsEndpoint
tracking: JobTrackingEndpoint
status: JobStatusEndpoint
payment: JobPaymentEndpoint
shipment: JobShipmentEndpoint
rfq: JobRfqEndpoint
create(*, data)[source]

POST /job.

Parameters:

data (JobCreateRequest | dict) – Job creation payload with customer, pickup, delivery, items, and services. Accepts a JobCreateRequest instance or a dict.

Return type:

None

Request model: JobCreateRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/create.html Request model: JobCreateRequest

save(*, data)[source]

PUT /job/save.

Parameters:

data (JobSaveRequest | dict) – Job save payload with jobDisplayId, customer, pickup, delivery, and items. Accepts a JobSaveRequest instance or a dict.

Return type:

None

Request model: JobSaveRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/save.html Request model: JobSaveRequest

get(job_display_id)[source]

GET /job/{jobDisplayId} (ACPortal)

Retrieve a job by its display ID.

Parameters:

job_display_id (int) – The numeric display ID of the job.

Returns:

Job

Return type:

Job

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/get.html Response model: Job

search(*, job_display_id=None)[source]

GET /job/search (ACPortal) — query params.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/search.html Query params: JobSearchParams Response model: JobSearchResult

Parameters:

job_display_id (int | None)

Return type:

JobSearchResult

search_by_details(*, data)[source]

POST /job/searchByDetails.

Parameters:

data (JobSearchRequest | dict) – Search filter with search_text, page, page_size, and sort_by. Accepts a JobSearchRequest instance or a dict.

Return type:

list[JobSearchResult]

Request model: JobSearchRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/search_by_details.html Request model: JobSearchRequest Response model: List[JobSearchResult]

get_price(job_display_id)[source]

GET /job/{jobDisplayId}/price (ACPortal)

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/get_price.html Response model: JobPrice

Parameters:

job_display_id (int)

Return type:

JobPrice

get_calendar_items(job_display_id)[source]

GET /job/{jobDisplayId}/calendaritems (ACPortal)

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/get_calendar_items.html Response model: List[CalendarItem]

Parameters:

job_display_id (int)

Return type:

list[CalendarItem]

get_update_page_config(job_display_id)[source]

GET /job/{jobDisplayId}/updatePageConfig (ACPortal)

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/get_update_page_config.html Response model: JobUpdatePageConfig

Parameters:

job_display_id (int)

Return type:

JobUpdatePageConfig

update(*, data)[source]

POST /job/update (ABC API surface).

Parameters:

data (JobUpdateRequest | dict) – Job update payload with job_id and updates. Accepts a JobUpdateRequest instance or a dict.

Return type:

None

Request model: JobUpdateRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/update.html Request model: JobUpdateRequest

transfer(job_display_id, franchisee_id)[source]

POST /job/transfer/{jobDisplayId} (ACPortal)

Parameters:
  • job_display_id (int) – Job to transfer.

  • franchisee_id (str) – Target franchisee — accepts a company code (e.g. "9999AZ") or UUID.

Return type:

None

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/transfer.html Request model: TransferModel

get_timeline_response(job_display_id)[source]

Deprecated. Use api.jobs.timeline.response(...).

Parameters:

job_display_id (int)

Return type:

TimelineResponse

get_timeline(job_display_id)[source]

Deprecated. Use api.jobs.timeline.list(...).

Parameters:

job_display_id (int)

Return type:

list[TimelineTask]

create_timeline_task(job_display_id, *, data, create_email=None)[source]

Deprecated. Use api.jobs.timeline.create_task(...).

Parameters:
Return type:

TimelineSaveResponse

get_timeline_task(job_display_id, task_id)[source]

Deprecated. Use api.jobs.timeline.get_task(...).

Parameters:
  • job_display_id (int)

  • task_id (str)

Return type:

TimelineTask

update_timeline_task(job_display_id, task_id, *, data)[source]

Deprecated. Use api.jobs.timeline.update_task(...).

Parameters:
Return type:

TimelineTask

delete_timeline_task(job_display_id, task_id)[source]

Deprecated. Use api.jobs.timeline.delete_task(...).

Parameters:
  • job_display_id (int)

  • task_id (str)

Return type:

ServiceBaseResponse

get_timeline_agent(job_display_id, task_code)[source]

Deprecated. Use api.jobs.timeline.get_agent(...).

Parameters:
  • job_display_id (int)

  • task_code (str)

Return type:

TimelineAgent | None

increment_status(job_display_id, *, data)[source]

Deprecated. Use api.jobs.timeline.increment_status(...).

Parameters:
Return type:

ServiceBaseResponse

undo_increment_status(job_display_id, *, data)[source]

Deprecated. Use api.jobs.timeline.undo_increment_status(...).

Parameters:
Return type:

ServiceBaseResponse

set_quote_status(job_display_id)[source]

Deprecated. Use api.jobs.status.set_quote(...).

Parameters:

job_display_id (int)

Return type:

ServiceBaseResponse

get_tracking(job_display_id)[source]

Deprecated. Use api.jobs.tracking.get(...).

Parameters:

job_display_id (int)

Return type:

TrackingInfo

get_tracking_v3(job_display_id, history_amount=10)[source]

Deprecated. Use api.jobs.tracking.v3(...).

Parameters:
  • job_display_id (int)

  • history_amount (int)

Return type:

TrackingInfoV3

get_notes(job_display_id, *, category=None, task_code=None)[source]

Deprecated. Use api.jobs.note.list(...).

Parameters:
  • job_display_id (int)

  • category (str | None)

  • task_code (str | None)

Return type:

list[JobNote]

create_note(job_display_id, *, data)[source]

Deprecated. Use api.jobs.note.create(...).

Parameters:
Return type:

JobNote

get_note(job_display_id, note_id)[source]

Deprecated. Use api.jobs.note.get(...).

Parameters:
  • job_display_id (int)

  • note_id (str)

Return type:

JobNote

update_note(job_display_id, note_id, *, data)[source]

Deprecated. Use api.jobs.note.update(...).

Parameters:
Return type:

JobNote

get_parcel_items(job_display_id)[source]

Deprecated. Use api.jobs.parcel_items.list(...).

Parameters:

job_display_id (int)

Return type:

list[ParcelItem]

create_parcel_item(job_display_id, *, data)[source]

Deprecated. Use api.jobs.parcel_items.create(...).

Parameters:
Return type:

ParcelItem

delete_parcel_item(job_display_id, parcel_item_id)[source]

Deprecated. Use api.jobs.parcel_items.delete(...).

Parameters:
  • job_display_id (int)

  • parcel_item_id (str)

Return type:

ServiceBaseResponse

get_parcel_items_with_materials(job_display_id)[source]

Deprecated. Use api.jobs.parcel_items.list_with_materials(...).

Parameters:

job_display_id (int)

Return type:

list[ParcelItemWithMaterials]

get_packaging_containers(job_display_id)[source]

GET /job/{jobDisplayId}/packagingcontainers (ACPortal)

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/get_packaging_containers.html Response model: List[PackagingContainer]

Parameters:

job_display_id (int)

Return type:

list[PackagingContainer]

update_item(job_display_id, item_id, *, data)[source]

PUT /job/{jobDisplayId}/item/{itemId}.

Parameters:
  • job_display_id (int) – Job display ID.

  • item_id (str) – Item identifier.

  • data (ItemUpdateRequest | dict) – Item update payload with description, quantity, and weight. Accepts an ItemUpdateRequest instance or a dict.

Return type:

ServiceBaseResponse

Request model: ItemUpdateRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/update_item.html Request model: ItemUpdateRequest Response model: ServiceBaseResponse

add_item_notes(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/item/notes.

Parameters:
  • job_display_id (int) – Job display ID.

  • data (ItemNotesRequest | dict) – Item notes payload. Accepts an ItemNotesRequest instance or a dict.

Return type:

ServiceBaseResponse

Request model: ItemNotesRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/add_item_notes.html Request model: ItemNotesRequest Response model: ServiceBaseResponse

list_rfqs(job_display_id)[source]

Deprecated. Use api.jobs.rfq.list(...).

Parameters:

job_display_id (int)

Return type:

list[QuoteRequestDisplayInfo]

get_rfq_status(job_display_id, rfq_service_type, company_id)[source]

Deprecated. Use api.jobs.rfq.status(...).

Parameters:
  • job_display_id (int)

  • rfq_service_type (str)

  • company_id (str)

Return type:

int

list_on_hold(job_display_id)[source]

Deprecated. Use api.jobs.on_hold.list(...).

Parameters:

job_display_id (int)

Return type:

list[ExtendedOnHoldInfo]

create_on_hold(job_display_id, *, data)[source]

Deprecated. Use api.jobs.on_hold.create(...).

Parameters:
Return type:

SaveOnHoldResponse

delete_on_hold(job_display_id)[source]

Deprecated. Use api.jobs.on_hold.delete(...).

Parameters:

job_display_id (int)

Return type:

None

get_on_hold(job_display_id, on_hold_id)[source]

Deprecated. Use api.jobs.on_hold.get(...).

Parameters:
  • job_display_id (int)

  • on_hold_id (str)

Return type:

OnHoldDetails

update_on_hold(job_display_id, on_hold_id, *, data)[source]

Deprecated. Use api.jobs.on_hold.update(...).

Parameters:
Return type:

SaveOnHoldResponse

get_on_hold_followup_user(job_display_id, contact_id)[source]

Deprecated. Use api.jobs.on_hold.get_followup_user(...).

Parameters:
  • job_display_id (int)

  • contact_id (str)

Return type:

OnHoldUser

list_on_hold_followup_users(job_display_id)[source]

Deprecated. Use api.jobs.on_hold.list_followup_users(...).

Parameters:

job_display_id (int)

Return type:

list[OnHoldUser]

add_on_hold_comment(job_display_id, on_hold_id, *, data)[source]

Deprecated. Use api.jobs.on_hold.add_comment(...).

Parameters:
Return type:

OnHoldNoteDetails

update_on_hold_dates(job_display_id, on_hold_id, *, data)[source]

Deprecated. Use api.jobs.on_hold.update_dates(...).

Parameters:
Return type:

None

resolve_on_hold(job_display_id, on_hold_id, *, data)[source]

Deprecated. Use api.jobs.on_hold.resolve(...).

Parameters:
Return type:

ResolveJobOnHoldResponse

send_email(job_display_id, *, data)[source]

Deprecated. Use api.jobs.email.send(...).

Parameters:
Return type:

None

send_document_email(job_display_id, *, data)[source]

Deprecated. Use api.jobs.email.send_document(...).

Parameters:
Return type:

None

create_transactional_email(job_display_id)[source]

Deprecated. Use api.jobs.email.create_transactional(...).

Parameters:

job_display_id (int)

Return type:

None

send_template_email(job_display_id, template_guid)[source]

Deprecated. Use api.jobs.email.send_template(...).

Parameters:
  • job_display_id (int)

  • template_guid (str)

Return type:

None

list_sms(job_display_id)[source]

Deprecated. Use api.jobs.sms.list(...).

Parameters:

job_display_id (int)

Return type:

None

send_sms(job_display_id, *, data)[source]

Deprecated. Use api.jobs.sms.send(...).

Parameters:
Return type:

None

mark_sms_read(job_display_id, *, data)[source]

Deprecated. Use api.jobs.sms.mark_read(...).

Parameters:
Return type:

None

get_sms_template(job_display_id, template_id)[source]

Deprecated. Use api.jobs.sms.get_template(...).

Parameters:
  • job_display_id (int)

  • template_id (str)

Return type:

None

list_freight_providers(job_display_id, *, provider_indexes=None, shipment_types=None, only_active=None)[source]

Deprecated. Use api.jobs.freight_providers.list(...).

Parameters:
  • job_display_id (int)

  • provider_indexes (list[int] | None)

  • shipment_types (list[str] | None)

  • only_active (bool | None)

Return type:

list[PricedFreightProvider]

save_freight_providers(job_display_id, *, data)[source]

Deprecated. Use api.jobs.freight_providers.save(...).

Parameters:
Return type:

None

get_freight_provider_rate_quote(job_display_id, option_index, *, data)[source]

Deprecated. Use api.jobs.freight_providers.rate_quote(...).

Parameters:
Return type:

None

add_freight_items(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/freightitems.

Parameters:
  • job_display_id (int) – Job display ID.

  • data (FreightItemsRequest | dict) – Freight items payload. Accepts a FreightItemsRequest instance or a dict.

Return type:

None

Request model: FreightItemsRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/add_freight_items.html Request model: FreightItemsRequest

change_agent(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/changeAgent.

Parameters:
  • job_display_id (int) – Job display ID.

  • data (ChangeJobAgentRequest | dict) – Agent change payload with service type, agent ID, and optional price/rebate flags. Accepts a ChangeJobAgentRequest instance or a dict.

Returns:

ServiceBaseResponse

Return type:

ServiceBaseResponse

Request model: ChangeJobAgentRequest

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/change_agent.html Request model: ChangeJobAgentRequest Response model: ServiceBaseResponse

The Jobs endpoint handles two API surfaces: ACPortal and ABC. Access it via api.jobs for direct endpoint methods, api.jobs.tasks for timeline helpers, and api.jobs.agent for agent assignment helpers.

Per-endpoint reference

Each route-backed method has its own page rendering the HTTP route, the Python and CLI call signatures, and the request/response model field tables. This is the page help(api.jobs.<method>) links to via its Docs: footer. These pages are generated by scripts/generate_endpoint_docs.py and kept current by a CI freshness gate.

Subgroups

Job-scoped operations are organised into subgroups named for their swagger tag (lowercase, with Job dropped and snake_case applied to multi-word tags). Each subgroup is a BaseEndpoint instance attached to JobsEndpoint:

Attribute

Swagger tag

Class

Methods

api.jobs.note

JobNote

ab.api.endpoints.jobs.note.JobNoteEndpoint

4

api.jobs.on_hold

JobOnHold

ab.api.endpoints.jobs.on_hold.JobOnHoldEndpoint

10

Example: examples/jobs/on_hold.py — create / assign-to-user / email / resolve chain.

api.jobs.form

JobForm + InvoiceJobForm + UsarJobForm

ab.api.endpoints.jobs.form.JobFormEndpoint

20

api.jobs.timeline

JobTimeline

ab.api.endpoints.jobs.timeline.JobTimelineEndpoint

9

api.jobs.email

JobEmail

ab.api.endpoints.jobs.email.JobEmailEndpoint

4

api.jobs.sms

JobSms

ab.api.endpoints.jobs.sms.JobSmsEndpoint

4

api.jobs.freight_providers

JobFreightProviders

ab.api.endpoints.jobs.freight_providers.JobFreightProvidersEndpoint

3

api.jobs.parcel_items

JobParcelItems

ab.api.endpoints.jobs.parcel_items.JobParcelItemsEndpoint

4

api.jobs.tracking

JobTracking

ab.api.endpoints.jobs.tracking.JobTrackingEndpoint

2

api.jobs.status

JobStatus

ab.api.endpoints.jobs.status.JobStatusEndpoint

1

api.jobs.payment

JobPayment

ab.api.endpoints.jobs.payment.JobPaymentEndpoint

10

api.jobs.shipment

JobShipment

ab.api.endpoints.jobs.shipment.JobShipmentEndpoint

11

api.jobs.rfq

JobRfq

ab.api.endpoints.jobs.rfq.JobRfqEndpoint

2

Migration notes

  • Legacy flat method names on api.jobs.* (get_notes, list_on_hold, get_timeline_response, send_email, list_sms, get_tracking, set_quote_status, list_rfqs, …) all remain as deprecation shims that emit a DeprecationWarning and forward to the subgroup method.

  • api.forms is now a deprecation shim that forwards to api.jobs.form.

  • api.payments is now a deprecation shim that forwards to api.jobs.payment.

  • api.shipments retains its 3 non-job-scoped methods (get_shipment, get_global_accessorials, get_shipment_document) as canonical. The 11 job-scoped methods are now deprecation shims forwarding to api.jobs.shipment.

  • api.rfq retains its 7 lifecycle methods unchanged; the 2 job-scoped /job/{id}/rfq/* routes that used to live on api.jobs.* are now at api.jobs.rfq.

class ab.api.endpoints.jobs.note.JobNoteEndpoint(client)[source]

Job-scoped note operations (ACPortal API).

Reached via api.jobs.note. Each method takes the job’s job_display_id as its first positional argument.

Parameters:

client (HttpClient)

list(job_display_id, *, category=None, task_code=None)[source]

List notes attached to job_display_id (GET /job/{jobDisplayId}/note).

Parameters:
  • job_display_id (int) – Job display ID.

  • category (str | None) – Note category filter.

  • task_code (str | None) – Task code filter.

Return type:

list[JobNote]

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/note.list.html Query params: JobNoteListParams Response model: List[JobNote]

get(job_display_id, note_id)[source]

Fetch a single note (GET /job/{jobDisplayId}/note/{id}).

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/note.get.html Response model: JobNote

Parameters:
  • job_display_id (int)

  • note_id (str)

Return type:

JobNote

create(job_display_id, *, data)[source]

Create a note (POST /job/{jobDisplayId}/note).

Parameters:
Return type:

JobNote

Request model: JobNoteCreateRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/note.create.html Request model: JobNoteCreateRequest Response model: JobNote

update(job_display_id, note_id, *, data)[source]

Update a note (PUT /job/{jobDisplayId}/note/{id}).

Parameters:
  • job_display_id (int) – Job display ID.

  • note_id (str) – Note identifier.

  • data (JobNoteUpdateRequest | dict) – JobNoteUpdateRequest instance or a dict.

Return type:

JobNote

Request model: JobNoteUpdateRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/note.update.html Request model: JobNoteUpdateRequest Response model: JobNote

class ab.api.endpoints.jobs.on_hold.JobOnHoldEndpoint(client)[source]

Job-scoped on-hold operations (ACPortal API).

Parameters:

client (HttpClient)

list(job_display_id)[source]

List on-hold records for job_display_id.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.list.html Response model: List[ExtendedOnHoldInfo]

Parameters:

job_display_id (int)

Return type:

list[ExtendedOnHoldInfo]

get(job_display_id, on_hold_id)[source]

Fetch one on-hold record.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.get.html Response model: OnHoldDetails

Parameters:
  • job_display_id (int)

  • on_hold_id (str)

Return type:

OnHoldDetails

create(job_display_id, *, data)[source]

Place a job on hold.

Request model: SaveOnHoldRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.create.html Request model: SaveOnHoldRequest Response model: SaveOnHoldResponse

Parameters:
Return type:

SaveOnHoldResponse

delete(job_display_id)[source]

Remove the active on-hold record for job_display_id.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.delete.html

Parameters:

job_display_id (int)

Return type:

None

update(job_display_id, on_hold_id, *, data)[source]

Update an existing on-hold record.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.update.html Request model: SaveOnHoldRequest Response model: SaveOnHoldResponse

Parameters:
Return type:

SaveOnHoldResponse

get_followup_user(job_display_id, contact_id)[source]

Resolve one follow-up user by contact ID.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.get_followup_user.html Response model: OnHoldUser

Parameters:
  • job_display_id (int)

  • contact_id (str)

Return type:

OnHoldUser

list_followup_users(job_display_id)[source]

List all follow-up users available for the job.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.list_followup_users.html Response model: List[OnHoldUser]

Parameters:

job_display_id (int)

Return type:

list[OnHoldUser]

add_comment(job_display_id, on_hold_id, *, data)[source]

Append a comment to an on-hold record.

Request model: OnHoldCommentRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.add_comment.html Request model: OnHoldCommentRequest Response model: OnHoldNoteDetails

Parameters:
Return type:

OnHoldNoteDetails

update_dates(job_display_id, on_hold_id, *, data)[source]

Update follow-up / due dates on an on-hold record.

Request model: SaveOnHoldDatesModel.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.update_dates.html Request model: SaveOnHoldDatesModel

Parameters:
Return type:

None

resolve(job_display_id, on_hold_id, *, data)[source]

Resolve an on-hold record.

Request model: SaveOnHoldRequest (resolve shares the same swagger schema as create/update; populate resolved_code_id and/or resolved_date to record the outcome).

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/on_hold.resolve.html Request model: SaveOnHoldRequest Response model: ResolveJobOnHoldResponse

Parameters:
Return type:

ResolveJobOnHoldResponse

class ab.api.endpoints.jobs.form.JobFormEndpoint(client)[source]

Job-scoped form generation (ACPortal API).

Most methods return {filename: bytes} (PDF content). Use shipments() to get JSON shipment plan data for BOL selection.

Parameters:

client (HttpClient)

shipments(job_display_id)[source]

List shipment plans for job_display_id (GET /job/{jobDisplayId}/form/shipments).

Returns List[FormsShipmentPlan] rather than PDF bytes – use the job_shipment_id of a plan to drive the BOL routes below.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/form.shipments.html Response model: List[FormsShipmentPlan]

Parameters:

job_display_id (int)

Return type:

list[FormsShipmentPlan]

invoice(job_display_id, *, type=None)[source]

GET /job/{jobDisplayId}/form/invoice

Parameters:
  • job_display_id (int)

  • type (str | None)

Return type:

dict[str, bytes]

invoice_editable(job_display_id)[source]

GET /job/{jobDisplayId}/form/invoice/editable

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

bill_of_lading(job_display_id, *, shipment_plan_id=None, provider_option_index=None)[source]

GET /job/{jobDisplayId}/form/bill-of-lading

Parameters:
  • job_display_id (int)

  • shipment_plan_id (str | None)

  • provider_option_index (int | None)

Return type:

dict[str, bytes]

packing_slip(job_display_id)[source]

GET /job/{jobDisplayId}/form/packing-slip

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

customer_quote(job_display_id)[source]

GET /job/{jobDisplayId}/form/customer-quote

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

quick_sale(job_display_id)[source]

GET /job/{jobDisplayId}/form/quick-sale

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

operations(job_display_id, *, ops_type=None)[source]

GET /job/{jobDisplayId}/form/operations

Parameters:
  • job_display_id (int)

  • ops_type (str | None)

Return type:

dict[str, bytes]

address_label(job_display_id)[source]

GET /job/{jobDisplayId}/form/address-label

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

item_labels(job_display_id)[source]

GET /job/{jobDisplayId}/form/item-labels

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

packaging_labels(job_display_id, *, shipment_plan_id=None)[source]

GET /job/{jobDisplayId}/form/packaging-labels

Parameters:
  • job_display_id (int)

  • shipment_plan_id (str | None)

Return type:

dict[str, bytes]

packaging_specification(job_display_id)[source]

GET /job/{jobDisplayId}/form/packaging-specification

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

credit_card_authorization(job_display_id)[source]

GET /job/{jobDisplayId}/form/credit-card-authorization

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

usar(job_display_id, *, type=None)[source]

GET /job/{jobDisplayId}/form/usar

Parameters:
  • job_display_id (int)

  • type (str | None)

Return type:

dict[str, bytes]

usar_editable(job_display_id)[source]

GET /job/{jobDisplayId}/form/usar/editable

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

ops(job_display_id, *, ops_type=None)[source]

Alias for operations() that prefixes the PDF filename with ops_.

Parameters:
  • job_display_id (int)

  • ops_type (str | None)

Return type:

dict[str, bytes]

bol(job_display_id)[source]

BOL for the freight leg (LTL preferred, falls back to Delivery).

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

hbl(job_display_id)[source]

House Bill of Lading.

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

pbl(job_display_id)[source]

Pickup Bill of Lading.

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

dbl(job_display_id)[source]

Delivery Bill of Lading (only valid when an LTL leg exists).

Parameters:

job_display_id (int)

Return type:

dict[str, bytes]

class ab.api.endpoints.jobs.timeline.JobTimelineEndpoint(client)[source]

Job-scoped timeline operations (ACPortal API).

Parameters:

client (HttpClient)

response(job_display_id)[source]

GET /job/{jobDisplayId}/timeline — full wrapper response.

Returns TimelineResponse with tasks, status metadata, SLA info, and on-hold entries.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.response.html Response model: TimelineResponse

Parameters:

job_display_id (int)

Return type:

TimelineResponse

list(job_display_id)[source]

GET /job/{jobDisplayId}/timeline — convenience returning just tasks.

Parameters:

job_display_id (int)

Return type:

list[TimelineTask]

create_task(job_display_id, *, data, create_email=None)[source]

POST /job/{jobDisplayId}/timeline — create or update a task.

Parameters:
  • job_display_id (int) – Job display ID.

  • data (BaseTimelineTaskRequest | dict) – Task request model instance or dict with taskCode and task-code-specific fields.

  • create_email (bool | None) – Send status notification email (query param).

Return type:

TimelineSaveResponse

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.create_task.html Query params: TimelineCreateParams Response model: TimelineSaveResponse

get_task(job_display_id, task_id)[source]

GET /job/{jobDisplayId}/timeline/{timelineTaskIdentifier}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.get_task.html Response model: TimelineTask

Parameters:
  • job_display_id (int)

  • task_id (str)

Return type:

TimelineTask

update_task(job_display_id, task_id, *, data)[source]

PATCH /job/{jobDisplayId}/timeline/{timelineTaskId}

Request model: TimelineTaskUpdateRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.update_task.html Request model: TimelineTaskUpdateRequest Response model: TimelineTask

Parameters:
Return type:

TimelineTask

delete_task(job_display_id, task_id)[source]

DELETE /job/{jobDisplayId}/timeline/{timelineTaskId}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.delete_task.html Response model: ServiceBaseResponse

Parameters:
  • job_display_id (int)

  • task_id (str)

Return type:

ServiceBaseResponse

get_agent(job_display_id, task_code)[source]

GET /job/{jobDisplayId}/timeline/{taskCode}/agent

Returns None when no agent is assigned for the given task code.

Parameters:
  • job_display_id (int)

  • task_code (str)

Return type:

TimelineAgent | None

increment_status(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/timeline/incrementjobstatus

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.increment_status.html Request model: IncrementStatusRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

undo_increment_status(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/timeline/undoincrementjobstatus

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/timeline.undo_increment_status.html Request model: IncrementStatusRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

class ab.api.endpoints.jobs.email.JobEmailEndpoint(client)[source]

Job-scoped email operations (ACPortal API).

Parameters:

client (HttpClient)

send(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/email

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/email.send.html Request model: SendEmailRequest

Parameters:
Return type:

None

send_document(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/email/senddocument

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/email.send_document.html Request model: SendDocumentEmailModel

Parameters:
Return type:

None

create_transactional(job_display_id)[source]

POST /job/{jobDisplayId}/email/createtransactionalemail

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/email.create_transactional.html

Parameters:

job_display_id (int)

Return type:

None

send_template(job_display_id, template_guid)[source]

POST /job/{jobDisplayId}/email/{emailTemplateGuid}/send

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/email.send_template.html

Parameters:
  • job_display_id (int)

  • template_guid (str)

Return type:

None

class ab.api.endpoints.jobs.sms.JobSmsEndpoint(client)[source]

Job-scoped SMS operations (ACPortal API).

Parameters:

client (HttpClient)

list(job_display_id)[source]

GET /job/{jobDisplayId}/sms

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/sms.list.html

Parameters:

job_display_id (int)

Return type:

None

send(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/sms

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/sms.send.html Request model: SendSMSModel

Parameters:
Return type:

None

mark_read(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/sms/read

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/sms.mark_read.html Request model: MarkSmsAsReadModel

Parameters:
Return type:

None

get_template(job_display_id, template_id)[source]

GET /job/{jobDisplayId}/sms/templatebased/{templateId}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/sms.get_template.html

Parameters:
  • job_display_id (int)

  • template_id (str)

Return type:

None

class ab.api.endpoints.jobs.freight_providers.JobFreightProvidersEndpoint(client)[source]

Job-scoped freight-provider operations (ACPortal API).

Parameters:

client (HttpClient)

list(job_display_id, *, provider_indexes=None, shipment_types=None, only_active=None)[source]

GET /job/{jobDisplayId}/freightproviders

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/freight_providers.list.html Query params: FreightProvidersParams Response model: List[PricedFreightProvider]

Parameters:
  • job_display_id (int)

  • provider_indexes (list[int] | None)

  • shipment_types (list[str] | None)

  • only_active (bool | None)

Return type:

list[PricedFreightProvider]

save(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/freightproviders

Request model: ShipmentPlanProvider.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/freight_providers.save.html Request model: ShipmentPlanProvider

Parameters:
Return type:

None

rate_quote(job_display_id, option_index, *, data)[source]

POST /job/{jobDisplayId}/freightproviders/{optionIndex}/ratequote

Request model: RateQuoteRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/freight_providers.rate_quote.html Request model: RateQuoteRequest

Parameters:
Return type:

None

class ab.api.endpoints.jobs.parcel_items.JobParcelItemsEndpoint(client)[source]

Job-scoped parcel-item operations (ACPortal API).

Parameters:

client (HttpClient)

list(job_display_id)[source]

GET /job/{jobDisplayId}/parcelitems

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/parcel_items.list.html Response model: List[ParcelItem]

Parameters:

job_display_id (int)

Return type:

list[ParcelItem]

create(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/parcelitems

Request model: ParcelItemCreateRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/parcel_items.create.html Request model: ParcelItemCreateRequest Response model: ParcelItem

Parameters:
Return type:

ParcelItem

delete(job_display_id, parcel_item_id)[source]

DELETE /job/{jobDisplayId}/parcelitems/{parcelItemId}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/parcel_items.delete.html Response model: ServiceBaseResponse

Parameters:
  • job_display_id (int)

  • parcel_item_id (str)

Return type:

ServiceBaseResponse

list_with_materials(job_display_id)[source]

GET /job/{jobDisplayId}/parcel-items-with-materials

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/parcel_items.list_with_materials.html Response model: List[ParcelItemWithMaterials]

Parameters:

job_display_id (int)

Return type:

list[ParcelItemWithMaterials]

class ab.api.endpoints.jobs.tracking.JobTrackingEndpoint(client)[source]

Job-scoped tracking operations (ACPortal API).

Parameters:

client (HttpClient)

get(job_display_id)[source]

GET /job/{jobDisplayId}/tracking

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/tracking.get.html Response model: TrackingInfo

Parameters:

job_display_id (int)

Return type:

TrackingInfo

v3(job_display_id, history_amount=10)[source]

GET /v3/job/{jobDisplayId}/tracking/{historyAmount}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/tracking.v3.html Path params: TrackingV3Params Response model: TrackingInfoV3

Parameters:
  • job_display_id (int)

  • history_amount (int)

Return type:

TrackingInfoV3

class ab.api.endpoints.jobs.status.JobStatusEndpoint(client)[source]

Job-scoped status operations (ACPortal API).

Parameters:

client (HttpClient)

set_quote(job_display_id)[source]

POST /job/{jobDisplayId}/status/quote

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/status.set_quote.html Response model: ServiceBaseResponse

Parameters:

job_display_id (int)

Return type:

ServiceBaseResponse

class ab.api.endpoints.jobs.payment.JobPaymentEndpoint(client)[source]

Job-scoped payment operations (ACPortal API).

Parameters:

client (HttpClient)

get(job_display_id)[source]

GET /job/{jobDisplayId}/payment

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.get.html Query params: PaymentParams Response model: PaymentInfo

Parameters:

job_display_id (int)

Return type:

PaymentInfo

get_create(job_display_id)[source]

GET /job/{jobDisplayId}/payment/create

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.get_create.html Response model: PaymentInfo

Parameters:

job_display_id (int)

Return type:

PaymentInfo

get_sources(job_display_id)[source]

GET /job/{jobDisplayId}/payment/sources

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.get_sources.html Response model: List[PaymentSource]

Parameters:

job_display_id (int)

Return type:

list[PaymentSource]

pay_by_source(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/bysource

Request model: PayBySourceRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.pay_by_source.html Request model: PayBySourceRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

create_ach_session(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/ACHPaymentSession

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.create_ach_session.html Request model: ACHSessionRequest Response model: ACHSessionResponse

Parameters:
Return type:

ACHSessionResponse

ach_credit_transfer(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/ACHCreditTransfer

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.ach_credit_transfer.html Request model: ACHCreditTransferRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

attach_customer_bank(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/attachCustomerBank

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.attach_customer_bank.html Request model: AttachBankRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

verify_ach_source(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/verifyJobACHSource

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.verify_ach_source.html Request model: VerifyACHRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

cancel_ach_verification(job_display_id)[source]

POST /job/{jobDisplayId}/payment/cancelJobACHVerification

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.cancel_ach_verification.html Response model: ServiceBaseResponse

Parameters:

job_display_id (int)

Return type:

ServiceBaseResponse

set_bank_source(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/payment/banksource

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/payment.set_bank_source.html Request model: BankSourceRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

class ab.api.endpoints.jobs.shipment.JobShipmentEndpoint(client)[source]

Job-scoped shipment operations (ACPortal API).

Parameters:

client (HttpClient)

get_rate_quotes(job_display_id)[source]

GET /job/{jobDisplayId}/shipment/ratequotes

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.get_rate_quotes.html Query params: RateQuotesParams Response model: List[RateQuote]

Parameters:

job_display_id (int)

Return type:

list[RateQuote]

request_rate_quotes(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/shipment/ratequotes

Request model: ShipmentRateQuoteRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.request_rate_quotes.html Request model: ShipmentRateQuoteRequest Response model: List[RateQuote]

Parameters:
Return type:

list[RateQuote]

book(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/shipment/book

Request model: ShipmentBookRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.book.html Request model: ShipmentBookRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

delete(job_display_id)[source]

DELETE /job/{jobDisplayId}/shipment

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.delete.html Response model: ServiceBaseResponse

Parameters:

job_display_id (int)

Return type:

ServiceBaseResponse

get_accessorials(job_display_id)[source]

GET /job/{jobDisplayId}/shipment/accessorials

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.get_accessorials.html Response model: List[Accessorial]

Parameters:

job_display_id (int)

Return type:

list[Accessorial]

add_accessorial(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/shipment/accessorial

Request model: AccessorialAddRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.add_accessorial.html Request model: AccessorialAddRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

remove_accessorial(job_display_id, add_on_id)[source]

DELETE /job/{jobDisplayId}/shipment/accessorial/{addOnId}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.remove_accessorial.html Response model: ServiceBaseResponse

Parameters:
  • job_display_id (int)

  • add_on_id (str)

Return type:

ServiceBaseResponse

get_origin_destination(job_display_id)[source]

GET /job/{jobDisplayId}/shipment/origindestination

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.get_origin_destination.html Response model: ShipmentOriginDestination

Parameters:

job_display_id (int)

Return type:

ShipmentOriginDestination

get_export_data(job_display_id)[source]

GET /job/{jobDisplayId}/shipment/exportdata

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.get_export_data.html Response model: ShipmentExportData

Parameters:

job_display_id (int)

Return type:

ShipmentExportData

post_export_data(job_display_id, *, data)[source]

POST /job/{jobDisplayId}/shipment/exportdata

Request model: ShipmentExportRequest.

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.post_export_data.html Request model: ShipmentExportRequest Response model: ServiceBaseResponse

Parameters:
Return type:

ServiceBaseResponse

get_rates_state(job_display_id)[source]

GET /job/{jobDisplayId}/shipment/ratesstate

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/shipment.get_rates_state.html Response model: RatesState

Parameters:

job_display_id (int)

Return type:

RatesState

class ab.api.endpoints.jobs.rfq.JobRfqEndpoint(client)[source]

Job-scoped RFQ operations (ACPortal API).

Parameters:

client (HttpClient)

list(job_display_id)[source]

GET /job/{jobDisplayId}/rfq

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/rfq.list.html Query params: JobRfqListParams Response model: List[QuoteRequestDisplayInfo]

Parameters:

job_display_id (int)

Return type:

list[QuoteRequestDisplayInfo]

status(job_display_id, rfq_service_type, company_id)[source]

GET /job/{jobDisplayId}/rfq/statusof/{rfqServiceType}/forcompany/{companyId}

Docs: https://ab-sdk.readthedocs.io/en/latest/api/jobs/rfq.status.html

Parameters:
  • job_display_id (int)

  • rfq_service_type (str)

  • company_id (str)

Return type:

int

Endpoint Paths by Tag

Tag

Method

Path

Description

General

POST

/job

Create a new job

PUT

/job/save

Save/update a job

GET

/job/{jobDisplayId}

Get job by display ID

GET

/job/search

Search jobs via query params

POST

/job/searchByDetails

Search jobs by detail criteria

GET

/job/{jobDisplayId}/price

Get job pricing

GET

/job/{jobDisplayId}/calendaritems

Get calendar items

GET

/job/{jobDisplayId}/updatePageConfig

Get update page config

POST

/job/update (ABC)

Update a job

Timeline

GET

/job/{jobDisplayId}/timeline

Get all timeline tasks

POST

/job/{jobDisplayId}/timeline

Create or update a timeline task

GET

/job/{jobDisplayId}/timeline/{taskId}

Get a single timeline task

PATCH

/job/{jobDisplayId}/timeline/{taskId}

Update a timeline task

DELETE

/job/{jobDisplayId}/timeline/{taskId}

Delete a timeline task

GET

/job/{jobDisplayId}/timeline/{taskCode}/agent

Get agent for task code

POST

/job/{jobDisplayId}/timeline/incrementjobstatus

Increment job status

POST

/job/{jobDisplayId}/timeline/undoincrementjobstatus

Undo status increment

Notes

GET

/job/{jobDisplayId}/note

List job notes

POST

/job/{jobDisplayId}/note

Create a note

PUT

/job/{jobDisplayId}/note/{id}

Update a note

Items

GET

/job/{jobDisplayId}/items

List job items

POST

/job/{jobDisplayId}/items

Add items

DELETE

/job/{jobDisplayId}/items/{itemId}

Delete an item

Freight

GET

/job/{jobDisplayId}/freightproviders

List freight providers

POST

/job/{jobDisplayId}/freightproviders/{idx}/ratequote

Get rate quote

POST

/job/{jobDisplayId}/freightitems

Add freight items

Agent

POST

/job/{jobDisplayId}/changeAgent

Change job agent

Methods

create

POST /job (ACPortal) — Create a new job.

from ab import ABConnectAPI

api = ABConnectAPI(env="staging")
api.jobs.create({"companyId": "...", "contactId": "..."})

save

PUT /job/save (ACPortal) — Save/update a job.

api.jobs.save({"id": "...", "status": "Active"})

get

GET /job/{jobDisplayId} (ACPortal) — Get job by display ID.

Returns: Job

job = api.jobs.get(2000001)

search_by_details

POST /job/searchByDetails (ACPortal) — Search jobs by detail criteria.

Returns: list[JobSearchResult]`

results = api.jobs.search_by_details({"searchText": "test"})

get_price

GET /job/{jobDisplayId}/price (ACPortal) — Get job pricing.

Returns: JobPrice

price = api.jobs.get_price(2000001)

get_calendar_items

GET /job/{jobDisplayId}/calendaritems (ACPortal) — Get job calendar items.

Returns: list[CalendarItem]`

items = api.jobs.get_calendar_items(2000001)

get_update_page_config

GET /job/{jobDisplayId}/updatePageConfig (ACPortal) — Get job update page config.

Returns: JobUpdatePageConfig

config = api.jobs.get_update_page_config(2000001)

update

POST /job/update (ABC API) — Update a job via the ABC API surface.

api.jobs.update({"jobId": "...", "status": "Completed"})

Timeline Helpers

Access via api.jobs.tasks.*.

Timeline helpers provide a high-level workflow for advancing a job through its lifecycle. Each helper fetches the current task state, carries forward the server’s id and modifiedDate for optimistic concurrency, and POSTs the update.

Workflow

A job progresses through these statuses:

Status 1 (Booked)
  -> Status 2 (Scheduled)     — schedule() / _2
  -> Status 3 (Received)      — received() / _3
  -> Status 4 (Pack Start)    — pack_start() / _4
  -> Status 5 (Pack Finish)   — pack_finish() / _5
  -> Status 6 (Storage)       — storage_begin() / _6, storage_end()
  -> Status 7 (Carrier Sched) — carrier_schedule() / _7
  -> Status 8 (Carrier PU)    — carrier_pickup() / _8
  -> Status 10 (Delivered)    — carrier_delivery() / _10

Optimistic Concurrency (modifiedDate)

Every timeline task returned by the server includes a modifiedDate timestamp. When a helper updates an existing task, it sends this timestamp back in the POST payload. If another caller modified the task since you read it, the server rejects the stale write with success=False. Check response.success after every call.

Task Codes

Code

Name

Request Model

Description

PU

Pickup

InTheFieldTaskRequest

Field operations (pickup/delivery)

PK

Packing

SimpleTaskRequest

Packaging with time log

ST

Storage

SimpleTaskRequest

Storage with time log

CP

Carrier

CarrierTaskRequest

Carrier schedule/pickup/delivery

Delete Helpers

# Delete a specific task by code
api.jobs.tasks.delete(job_id, "PK")

# Delete all tasks in reverse order (CP -> ST -> PK -> PU)
api.jobs.tasks.delete_all(job_id)

schedule() / _2

Status 2 — Scheduled. Sets planned pickup dates on a PU task.

Model: InTheFieldTaskRequest Fields populated: task_code="PU", planned_start_date, planned_end_date (optional) Warning: Logs at status >= 2

resp = api.jobs.tasks.schedule(job_id, start="2024-06-01T11:00:00Z")
# or with alias:
resp = api.jobs.tasks._2(job_id, start="2024-06-01T11:00:00Z")

assert resp.success
print(resp.task.id)  # server-assigned task ID

received() / _3

Status 3 — Received. Marks pickup completed on a PU task.

Model: InTheFieldTaskRequest Fields populated: task_code="PU", completed_date, on_site_time_log (if start provided) Warning: Logs at status >= 3

resp = api.jobs.tasks.received(job_id, end="2024-06-01T12:00:00Z")

# With on-site time tracking:
resp = api.jobs.tasks.received(
    job_id,
    "2024-06-01T11:00:00Z",
    "2024-06-01T12:00:00Z",
)

# Equivalent keyword form:
resp = api.jobs.tasks.received(
    job_id,
    start="2024-06-01T11:00:00Z",
    end="2024-06-01T12:00:00Z",
)

pack_start() / _4

Status 4 — Pack Start. Sets packaging start time on a PK task.

Model: SimpleTaskRequest Fields populated: task_code="PK", time_log.start Warning: Logs at status >= 4

resp = api.jobs.tasks.pack_start(job_id, start="2024-06-02T10:00:00Z")

pack_finish() / _5

Status 5 — Pack Finish. Sets packaging end time on a PK task. Preserves the existing time_log.start from a prior pack_start() call.

Model: SimpleTaskRequest Fields populated: task_code="PK", time_log.start (preserved), time_log.end Warning: Logs at status >= 5

resp = api.jobs.tasks.pack_finish(job_id, end="2024-06-02T10:59:59Z")

storage_begin() / _6

Status 6 — Storage. Sets storage start time on an ST task. Preserves existing time_log.end if present.

Model: SimpleTaskRequest Fields populated: task_code="ST", time_log.start, time_log.end (preserved)

resp = api.jobs.tasks.storage_begin(job_id, start="2024-06-03T10:00:00Z")

storage_end()

Status 6 — Storage. Sets storage end time on an ST task. Preserves existing time_log.start if present. No numeric alias.

Model: SimpleTaskRequest Fields populated: task_code="ST", time_log.start (preserved), time_log.end

resp = api.jobs.tasks.storage_end(job_id, end="2024-06-03T10:59:59Z")

carrier_schedule() / _7

Status 7 — Carrier Scheduled. Sets carrier scheduled date on a CP task.

Model: CarrierTaskRequest Fields populated: task_code="CP", scheduled_date Warning: Logs at status >= 7

resp = api.jobs.tasks.carrier_schedule(job_id, start="2024-06-04T10:00:00Z")

carrier_pickup() / _8

Status 8 — Carrier Pickup. Sets carrier pickup completed date on a CP task.

Model: CarrierTaskRequest Fields populated: task_code="CP", pickup_completed_date Warning: Logs at status >= 8

resp = api.jobs.tasks.carrier_pickup(job_id, start="2024-06-04T10:59:59Z")

carrier_delivery() / _10

Status 10 — Delivered. Sets carrier delivery completed date on a CP task.

Model: CarrierTaskRequest Fields populated: task_code="CP", delivery_completed_date

resp = api.jobs.tasks.carrier_delivery(job_id, end="2024-06-05T11:00:00Z")