Job Models
Job models for ACPortal and ABC APIs.
- class ab.api.models.jobs.JobContactEmail(*, id=None, email=None, invalid=None, dontSpam=None, **extra_data)[source]
Bases:
ResponseModelEmail entry nested in JobContactDetails.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobContactPhone(*, id=None, phone=None, **extra_data)[source]
Bases:
ResponseModelPhone entry nested in JobContactDetails.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ContactDetails(*, id=None, contactDisplayId=None, fullName=None, contactTypeId=None, editable=None, isEmpty=None, fullNameUpdateRequired=None, emailsList=None, phonesList=None, addressesList=None, fax=None, primaryPhone=None, primaryEmail=None, careOf=None, bolNotes=None, taxId=None, isBusiness=None, isPayer=None, isPrefered=None, isPrivate=None, isActive=None, companyId=None, rootContactId=None, ownerFranchiseeId=None, company=None, legacyGuid=None, isPrimary=None, assistant=None, department=None, webSite=None, birthDate=None, jobTitleId=None, jobTitle=None, **extra_data)[source]
Bases:
ResponseModelFull contact person — nested in JobContactDetails.contact.
Maps to C# ContactDetails entity.
- Parameters:
id (int | None)
contactDisplayId (str | None)
fullName (str | None)
contactTypeId (int | None)
editable (bool | None)
isEmpty (bool | None)
fullNameUpdateRequired (bool | None)
fax (str | None)
primaryPhone (str | None)
primaryEmail (str | None)
careOf (str | None)
bolNotes (str | None)
taxId (str | None)
isBusiness (bool | None)
isPayer (bool | None)
isPrefered (bool | None)
isPrivate (bool | None)
isActive (bool | None)
companyId (str | None)
rootContactId (str | None)
ownerFranchiseeId (str | None)
company (dict | None)
legacyGuid (str | None)
isPrimary (bool | None)
assistant (str | None)
department (str | None)
webSite (str | None)
birthDate (str | None)
jobTitleId (str | None)
jobTitle (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobContactDetails(*, id=None, contact=None, email=None, phone=None, address=None, careOf=None, legacyGuid=None, contactEmailMappingId=None, contactPhoneMappingId=None, contactAddressMappingId=None, draggedFrom=None, jobContactType=None, propertyType=None, **extra_data)[source]
Bases:
ResponseModelContact wrapper — nested in Job as customerContact, pickupContact, deliveryContact.
Maps to C# JobContactDetails entity. Reuses CompanyAddress from common.py.
- Parameters:
id (int | None)
contact (ContactDetails | None)
email (JobContactEmail | None)
phone (JobContactPhone | None)
address (CompanyAddress | None)
careOf (str | None)
legacyGuid (str | None)
contactEmailMappingId (int | None)
contactPhoneMappingId (int | None)
contactAddressMappingId (int | None)
draggedFrom (str | None)
jobContactType (str | None)
propertyType (int | None)
extra_data (Any)
- contact: ContactDetails | None
- email: JobContactEmail | None
- phone: JobContactPhone | None
- address: CompanyAddress | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobItemMaterial(*, jobID=None, jobPackMaterialID=None, materialID=None, mateialMasterID=None, materialQuantity=None, materialName=None, materialDescription=None, materialCode=None, materialType=None, materialUnit=None, materialWeight=None, materialLength=None, materialWidth=None, materialHeight=None, materialCost=None, materialPrice=None, materialWasteFactor=None, materialTotalCost=None, materialTotalWeight=None, createdBy=None, modifiedBy=None, createdDate=None, modifiedDate=None, itemID=None, quantityActual=None, isAutomatic=None, waste=None, price=None, isEdited=None, itemName=None, itemDescription=None, itemNotes=None, jobItemId=None, companyId=None, isActive=None, **extra_data)[source]
Bases:
ResponseModelMaterial used in a job item — nested in JobItem.materials.
Maps to C# MasterMaterials entity.
- Parameters:
jobID (str | None)
jobPackMaterialID (str | None)
materialID (int | None)
mateialMasterID (str | None)
materialQuantity (float | None)
materialName (str | None)
materialDescription (str | None)
materialCode (str | None)
materialType (str | None)
materialUnit (str | None)
materialWeight (float | None)
materialLength (float | None)
materialWidth (float | None)
materialHeight (float | None)
materialCost (float | None)
materialPrice (float | None)
materialWasteFactor (float | None)
materialTotalCost (float | None)
materialTotalWeight (float | None)
createdBy (str | None)
modifiedBy (str | None)
createdDate (str | None)
modifiedDate (str | None)
itemID (str | None)
quantityActual (float | None)
isAutomatic (bool | None)
waste (float | None)
price (float | None)
isEdited (bool | None)
itemName (str | None)
itemDescription (str | None)
itemNotes (str | None)
jobItemId (str | None)
companyId (str | None)
isActive (bool | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobItem(*, jobDisplayId=None, jobItemID=None, originalJobItemId=None, jobID=None, quantity=None, originalQty=None, jobFreightID=None, nmfcItem=None, nmfcSub=None, nmfcSubClass=None, jobItemPkdLength=None, jobItemPkdWidth=None, jobItemPkdHeight=None, jobItemPkdWeight=None, isFillPercentChanged=None, cFillId=None, containerId=None, laborHrs=None, laborCharge=None, userId=None, isFillChanged=None, isContainerChanged=None, isValidContainer=None, isValidFill=None, inchesToAdd=None, containerThickness=None, isInchToAddChanged=None, totalPcs=None, descriptionOfProducts=None, totalItems=None, autoPackOff=None, cPackValue=None, cFillValue=None, containerType=None, jobItemFillPercent=None, containerWeight=None, fillWeight=None, materialWeight=None, jobItemPkdValue=None, totalPackedValue=None, totalWeight=None, stc=None, materials=None, materialTotalCost=None, isAccess=None, jobItemParcelValue=None, totalLaborCharge=None, grossCubicFeet=None, rowNumber=None, notedConditions=None, jobItemNotes=None, customerItemId=None, documentExists=None, forceCrate=None, autoPackFailed=None, doNotTip=None, commodityId=None, longestDimension=None, secondDimension=None, pkdLengthPlusGirth=None, requestedParcelPackagings=None, parcelPackageTypeId=None, transportationLength=None, transportationWidth=None, transportationHeight=None, transportationWeight=None, ceilingTransportationWeight=None, companyID=None, companyName=None, itemSequenceNo=None, itemName=None, itemDescription=None, scheduleB=None, eccn=None, itemNotes=None, isPrepacked=None, itemActive=None, itemPublic=None, cPackId=None, itemID=None, itemValue=None, modifiedBy=None, createdBy=None, createdDate=None, modifiedDate=None, itemLength=None, itemWidth=None, itemHeight=None, itemWeight=None, netCubicFeet=None, **extra_data)[source]
Bases:
ResponseModelJob line item — nested in Job.items.
Maps to C# Items entity (inherits MasterItems, ItemFeature).
- Parameters:
jobDisplayId (int | None)
jobItemID (str | None)
originalJobItemId (str | None)
jobID (str | None)
quantity (int | None)
originalQty (int | None)
jobFreightID (str | None)
nmfcItem (str | None)
nmfcSub (str | None)
nmfcSubClass (str | None)
jobItemPkdLength (float | None)
jobItemPkdWidth (float | None)
jobItemPkdHeight (float | None)
jobItemPkdWeight (float | None)
isFillPercentChanged (bool | None)
cFillId (int | None)
containerId (int | None)
laborHrs (float | None)
laborCharge (float | None)
userId (str | None)
isFillChanged (bool | None)
isContainerChanged (bool | None)
isValidContainer (bool | None)
isValidFill (bool | None)
inchesToAdd (float | None)
containerThickness (float | None)
isInchToAddChanged (bool | None)
totalPcs (int | None)
descriptionOfProducts (str | None)
totalItems (int | None)
autoPackOff (bool | None)
cPackValue (str | None)
cFillValue (str | None)
containerType (str | None)
jobItemFillPercent (float | None)
containerWeight (float | None)
fillWeight (float | None)
materialWeight (float | None)
jobItemPkdValue (float | None)
totalPackedValue (float | None)
totalWeight (float | None)
stc (str | None)
materials (List[JobItemMaterial] | None)
materialTotalCost (float | None)
isAccess (bool | None)
jobItemParcelValue (float | None)
totalLaborCharge (float | None)
grossCubicFeet (float | None)
rowNumber (int | None)
notedConditions (str | None)
jobItemNotes (str | None)
customerItemId (str | None)
documentExists (bool | None)
forceCrate (bool | None)
autoPackFailed (bool | None)
doNotTip (bool | None)
commodityId (int | None)
longestDimension (float | None)
secondDimension (float | None)
pkdLengthPlusGirth (float | None)
requestedParcelPackagings (str | None)
parcelPackageTypeId (int | None)
transportationLength (int | None)
transportationWidth (int | None)
transportationHeight (int | None)
transportationWeight (float | None)
ceilingTransportationWeight (int | None)
companyID (str | None)
companyName (str | None)
itemSequenceNo (int | None)
itemName (str | None)
itemDescription (str | None)
scheduleB (str | None)
eccn (str | None)
itemNotes (str | None)
isPrepacked (bool | None)
itemActive (bool | None)
itemPublic (bool | None)
cPackId (str | None)
itemID (str | None)
itemValue (float | None)
modifiedBy (str | None)
createdBy (str | None)
createdDate (str | None)
modifiedDate (str | None)
itemLength (float | None)
itemWidth (float | None)
itemHeight (float | None)
itemWeight (float | None)
netCubicFeet (float | None)
extra_data (Any)
- materials: List[JobItemMaterial] | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSummarySnapshot(*, jobSnapshotID=None, jobID=None, jobStatusID=None, jobTotalAmount=None, jobTotalWeight=None, jobTotalQty=None, jobTotalValue=None, isCurrent=None, totalUnpackedWeight=None, jobItemsTotalContainerLbs=None, jobItemsTotalFillLbs=None, jobItemsTotalMaterials=None, jobItemsTotalLaborHrs=None, jobItemsTotalGrossCubes=None, jobItemsTotalNetCubes=None, jobItemsTotalMaterialsLbs=None, jobItemsTotalLaborCost=None, jobTaxTotalAmount=None, jobTotalCost=None, jobNetProfit=None, createdDate=None, createdBy=None, subTotal=None, sumTotal=None, **extra_data)[source]
Bases:
ResponseModelFinancial/weight rollup — nested in Job.job_summary_snapshot.
Maps to C# JobSummary entity.
- Parameters:
jobSnapshotID (int | None)
jobID (str | None)
jobStatusID (str | None)
jobTotalAmount (float | None)
jobTotalWeight (float | None)
jobTotalQty (int | None)
jobTotalValue (float | None)
isCurrent (bool | None)
totalUnpackedWeight (float | None)
jobItemsTotalContainerLbs (float | None)
jobItemsTotalFillLbs (float | None)
jobItemsTotalMaterials (float | None)
jobItemsTotalLaborHrs (float | None)
jobItemsTotalGrossCubes (float | None)
jobItemsTotalNetCubes (float | None)
jobItemsTotalMaterialsLbs (float | None)
jobItemsTotalLaborCost (float | None)
jobTaxTotalAmount (float | None)
jobTotalCost (float | None)
jobNetProfit (float | None)
createdDate (str | None)
createdBy (str | None)
subTotal (float | None)
sumTotal (float | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ActiveOnHoldInfo(*, id=None, responsiblePartyTypeId=None, reasonId=None, responsibleParty=None, reason=None, comment=None, startDate=None, createdBy=None, **extra_data)[source]
Bases:
ResponseModelActive on-hold info — nested in Job.active_on_hold_info.
Maps to C# OnHoldInfo entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobDocument(*, id=None, path=None, thumbnailPath=None, description=None, typeName=None, typeId=None, fileName=None, shared=None, tags=None, jobItems=None, **extra_data)[source]
Bases:
ResponseModelDocument attachment — nested in Job.documents.
Maps to C# DocumentDetails entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSlaInfo(*, days=None, expedited=None, startDate=None, finishDate=None, totalOnHoldDays=None, **extra_data)[source]
Bases:
ResponseModelSLA tracking — nested in Job.sla_info.
Maps to C# SlaInfo entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobFreightInfo(*, providerCompanyCode=None, providerCompanyName=None, proNum=None, transportationState=None, transportationStateDescription=None, **extra_data)[source]
Bases:
ResponseModelFreight tracking summary — nested in Job.freight_info.
Maps to C# FreightTrackingLastDetails entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobPaymentInfo(*, statusId=None, status=None, readyToInvoiceDate=None, invoiceDate=None, paidDate=None, **extra_data)[source]
Bases:
ResponseModelPayment status — nested in Job.payment_info.
Maps to C# PaymentInfo entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobAgentPaymentInfo(*, amount=None, paidDate=None, **extra_data)[source]
Bases:
ResponseModelAgent payment info — nested in Job.agent_payment_info.
Maps to C# AgentPaymentInfo entity.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobFreightItem(*, jobID=None, quantity=None, freightItemId=None, freightItemClassId=None, jobFreightID=None, freightDescription=None, freightItemValue=None, freightItemClass=None, jobDisplayId=None, nmfcItem=None, totalWeight=None, **extra_data)[source]
Bases:
ResponseModelFreight shipment item — nested in Job.freight_items.
Maps to C# FreightShimpment entity (inherits ItemFeature).
- Parameters:
jobID (str | None)
quantity (int | None)
freightItemId (str | None)
freightItemClassId (str | None)
jobFreightID (str | None)
freightDescription (str | None)
freightItemValue (str | None)
freightItemClass (str | None)
jobDisplayId (str | None)
nmfcItem (str | None)
totalWeight (float | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TransferModel(*, franchiseeId)[source]
Bases:
RequestModelBody for POST /job/transfer/{jobDisplayId}.
- Parameters:
franchiseeId (str)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchParams(*, jobDisplayId=None)[source]
Bases:
RequestModelQuery parameters for GET /job/search.
- Parameters:
jobDisplayId (int | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.FreightProvidersParams(*, ProviderIndexes=None, ShipmentTypes=None, OnlyActive=None)[source]
Bases:
RequestModelQuery parameters for GET /job/{jobDisplayId}/freightproviders.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineCreateParams(*, createEmail=None)[source]
Bases:
RequestModelQuery parameters for POST /job/{jobDisplayId}/timeline.
- Parameters:
createEmail (bool | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TrackingV3Params(*, historyAmount=None)[source]
Bases:
RequestModelQuery parameters for GET /v3/job/{jobDisplayId}/tracking.
- Parameters:
historyAmount (int | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobNoteListParams(*, category=None, taskCode=None)[source]
Bases:
RequestModelQuery parameters for GET /job/{jobDisplayId}/note.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobRfqListParams(*, rfqServiceType=None)[source]
Bases:
RequestModelQuery parameters for GET /job/{jobDisplayId}/rfq.
- Parameters:
rfqServiceType (str | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.Job(*, isActive=None, createdDate=None, modifiedDate=None, createdBy=None, modifiedBy=None, id=None, jobDisplayId=None, status=None, customer=None, pickup=None, delivery=None, items=None, bookedDate=None, ownerCompanyId=None, customerContact=None, pickupContact=None, deliveryContact=None, totalSellPrice=None, freightItems=None, jobSummarySnapshot=None, notes=None, activeOnHoldInfo=None, writeAccess=None, accessLevel=None, statusId=None, jobMgmtSubId=None, isCancelled=None, freightInfo=None, freightProviders=None, expectedPickupDate=None, expectedDeliveryDate=None, timelineTasks=None, documents=None, labelRequestSentDate=None, paymentInfo=None, agentPaymentInfo=None, slaInfo=None, jobType=None, prices=None, **extra_data)[source]
Bases:
ResponseModel,FullAuditModelFull job record — GET /job/{jobDisplayId}.
Maps to C# JobPortalInfo entity. Response shape varies by JobAccessLevel (Owner/Customer gets full data, Agent gets filtered).
- Parameters:
isActive (bool | None)
createdDate (datetime | None)
modifiedDate (datetime | None)
createdBy (str | None)
modifiedBy (str | None)
jobDisplayId (int | None)
status (str | None)
customer (dict | None)
pickup (dict | None)
delivery (dict | None)
bookedDate (str | None)
ownerCompanyId (str | None)
customerContact (JobContactDetails | None)
pickupContact (JobContactDetails | None)
deliveryContact (JobContactDetails | None)
totalSellPrice (float | None)
freightItems (List[JobFreightItem] | None)
jobSummarySnapshot (JobSummarySnapshot | None)
activeOnHoldInfo (ActiveOnHoldInfo | None)
writeAccess (bool | None)
accessLevel (int | None)
statusId (str | None)
jobMgmtSubId (str | None)
isCancelled (bool | None)
freightInfo (JobFreightInfo | None)
expectedPickupDate (str | None)
expectedDeliveryDate (str | None)
documents (List[JobDocument] | None)
labelRequestSentDate (str | None)
paymentInfo (JobPaymentInfo | None)
agentPaymentInfo (JobAgentPaymentInfo | None)
slaInfo (JobSlaInfo | None)
jobType (str | None)
extra_data (Any)
- customer_contact: JobContactDetails | None
- pickup_contact: JobContactDetails | None
- delivery_contact: JobContactDetails | None
- freight_items: List[JobFreightItem] | None
- job_summary_snapshot: JobSummarySnapshot | None
- active_on_hold_info: ActiveOnHoldInfo | None
- freight_info: JobFreightInfo | None
- documents: List[JobDocument] | None
- payment_info: JobPaymentInfo | None
- agent_payment_info: JobAgentPaymentInfo | None
- sla_info: JobSlaInfo | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchAddress(*, id=None, masterAddressId=None, propertyType=None, address1=None, address2=None, city=None, state=None, countryName=None, countryCode=None, zipCode=None, **extra_data)[source]
Bases:
ResponseModelAddress nested in job search pickup/delivery details.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchContact(*, id=None, contactDisplayId=None, companyId=None, companyName=None, bolNotes=None, fullName=None, **extra_data)[source]
Bases:
ResponseModelContact nested in job search pickup/delivery details.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchTask(*, id=None, jobId=None, truckId=None, taskCode=None, plannedStartDate=None, plannedEndDate=None, modifiedDate=None, onSiteTimeLog=None, tripTimeLog=None, completedDate=None, **extra_data)[source]
Bases:
ResponseModelTimeline task nested in job search pickup/delivery details.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchTransportDetails(*, importantNotesCount=None, contact=None, address=None, contactEmail=None, contactPhone=None, companyId=None, task=None, **extra_data)[source]
Bases:
ResponseModelPickup or delivery details in job search result.
- Parameters:
importantNotesCount (int | None)
contact (JobSearchContact | None)
address (JobSearchAddress | None)
contactEmail (str | None)
contactPhone (str | None)
companyId (str | None)
task (JobSearchTask | None)
extra_data (Any)
- contact: JobSearchContact | None
- address: JobSearchAddress | None
- task: JobSearchTask | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchResult(*, jobId=None, jobDisplayId=None, itemsCount=None, pickupDetails=None, deliveryDetails=None, accessLevel=None, **extra_data)[source]
Bases:
ResponseModelSingle search hit — GET /job/search.
The live API returns a structured object with nested pickup/delivery details rather than the flat fields shown in older documentation.
- Parameters:
jobId (str | None)
jobDisplayId (int | None)
itemsCount (int | None)
pickupDetails (JobSearchTransportDetails | None)
deliveryDetails (JobSearchTransportDetails | None)
accessLevel (int | None)
extra_data (Any)
- pickup_details: JobSearchTransportDetails | None
- delivery_details: JobSearchTransportDetails | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobPrice(*, jobDisplayId=None, prices=None, total=None, totalSellPrice=None, **extra_data)[source]
Bases:
ResponseModelPrice info — GET /job/{jobDisplayId}/price.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.CalendarItem(*, id=None, title=None, start=None, end=None, name=None, quantity=None, length=None, width=None, height=None, weight=None, value=None, notes=None, customerItemId=None, notedConditions=None, **extra_data)[source]
Bases:
ResponseModelCalendar/line item — GET /job/{jobDisplayId}/calendaritems.
Despite the name, the live API returns job line-item details (name, quantity, dimensions, value) rather than calendar events.
- Parameters:
id (str | None)
title (str | None)
start (str | None)
end (str | None)
name (str | None)
quantity (int | None)
length (float | None)
width (float | None)
height (float | None)
weight (float | None)
value (float | None)
notes (str | None)
customerItemId (str | None)
notedConditions (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobUpdatePageConfig(*, config=None, pageControls=None, workflowControls=None, **extra_data)[source]
Bases:
ResponseModelUpdate page config — GET /job/{id}/updatePageConfig.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobCreateRequest(*, customer=None, pickup=None, delivery=None, items=None, services=None)[source]
Bases:
RequestModelBody for POST /job.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSaveRequest(*, jobDisplayId=None, customer=None, pickup=None, delivery=None, items=None)[source]
Bases:
RequestModelBody for PUT /job/save.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SortByModel(*, sortByField=1, sortDir=True)[source]
Bases:
RequestModelSort configuration for POST /job/searchByDetails.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobSearchRequest(*, searchText=None, pageNo=None, pageSize=None, sortBy=None)[source]
Bases:
PaginatedRequestMixin,SearchableRequestMixinBody for POST /job/searchByDetails.
- Parameters:
searchText (str | None)
pageNo (int | None)
pageSize (int | None)
sortBy (SortByModel | None)
- sort_by: SortByModel | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobUpdateRequest(*, jobId=None, updates=None)[source]
Bases:
RequestModelBody for POST /job/update (ABC API surface).
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineTask(*, createdDate=None, modifiedDate=None, createdBy=None, modifiedBy=None, id=None, jobId=None, taskCode=None, plannedStartDate=None, targetStartDate=None, actualEndDate=None, notes=None, workTimeLogs=None, initialNote=None, timeLog=None, plannedEndDate=None, preferredStartDate=None, preferredEndDate=None, truck=None, onSiteTimeLog=None, tripTimeLog=None, completedDate=None, scheduledDate=None, pickupCompletedDate=None, deliveryCompletedDate=None, expectedDeliveryDate=None, **extra_data)[source]
Bases:
ResponseModel,TimestampedModelTimeline task — unified model for all task codes (PU, PK, ST, CP).
Common fields from C# BaseTask + TimestampedModel, plus task-code-specific fields that are null when not applicable to the task’s code.
- Parameters:
createdDate (datetime | None)
modifiedDate (datetime | None)
createdBy (str | None)
modifiedBy (str | None)
id (int | None)
jobId (str | None)
taskCode (str | None)
plannedStartDate (str | None)
targetStartDate (str | None)
actualEndDate (str | None)
initialNote (dict | None)
timeLog (dict | None)
plannedEndDate (str | None)
preferredStartDate (str | None)
preferredEndDate (str | None)
truck (dict | None)
onSiteTimeLog (dict | None)
completedDate (str | None)
scheduledDate (str | None)
pickupCompletedDate (str | None)
deliveryCompletedDate (str | None)
expectedDeliveryDate (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineAgent(*, id=None, code=None, name=None, typeId=None, **extra_data)[source]
Bases:
ResponseModelTimeline agent — GET /job/{jobDisplayId}/timeline/{taskCode}/agent.
Maps to C# CompanyListItem entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineResponse(*, success=None, errorMessage=None, tasks=None, onHolds=None, daysPerSla=None, deliveryServiceDoneBy=None, jobSubManagementStatus=None, jobBookedDate=None, **extra_data)[source]
Bases:
ResponseModelGET /job/{jobDisplayId}/timeline wrapper response.
The API returns this wrapper object (not a bare list of tasks).
- Parameters:
- tasks: List[TimelineTask] | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineSaveResponse(*, success=None, errorMessage=None, taskExists=None, task=None, emailLogId=None, jobSubManagementStatus=None, **extra_data)[source]
Bases:
ResponseModelPOST /job/{jobDisplayId}/timeline wrapper response.
The API returns this wrapper (not a bare TimelineTask).
- Parameters:
- task: TimelineTask | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimeLogPauseRequest(*, start=None, end=None)[source]
Bases:
RequestModelPause period within a time log. Maps to C#
TimeLogPauseModel.- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimeLogRequest(*, start=None, end=None, pauses=None)[source]
Bases:
RequestModelTime log with start/end and optional pauses. Maps to C#
TimeLogModel.- Parameters:
start (str | None)
end (str | None)
pauses (List[TimeLogPauseRequest] | None)
- pauses: List[TimeLogPauseRequest] | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.WorkTimeLogRequest(*, date=None, startTime=None, endTime=None)[source]
Bases:
RequestModelWork time entry. Maps to C#
WorkTimeLogModel.- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.InitialNoteRequest(*, comments, dueDate=None, isImportant=None, isCompleted=None, sendNotification=None)[source]
Bases:
RequestModelTask note on creation. Maps to C#
InitialNoteModel.- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TaskTruckInfoRequest(*, id, name=None, isActive=None)[source]
Bases:
RequestModelTruck assignment info. Maps to C#
TaskTruckInfo.- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.BaseTimelineTaskRequest(*, id=None, modifiedDate=None, taskCode, plannedStartDate=None, workTimeLogs=None, initialNote=None)[source]
Bases:
RequestModelShared base for all timeline task creation requests.
Maps to C#
BaseTaskModel. Three concrete subclasses correspond to the server’sTaskModelDataBinderpolymorphic deserialization.- Parameters:
id (int | None)
modifiedDate (str | None)
taskCode (str)
plannedStartDate (str | None)
workTimeLogs (List[WorkTimeLogRequest] | None)
initialNote (InitialNoteRequest | None)
- work_time_logs: List[WorkTimeLogRequest] | None
- initial_note: InitialNoteRequest | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.InTheFieldTaskRequest(*, id=None, modifiedDate=None, taskCode, plannedStartDate=None, workTimeLogs=None, initialNote=None, plannedEndDate=None, preferredStartDate=None, preferredEndDate=None, truck=None, onSiteTimeLog=None, tripTimeLog=None, completedDate=None)[source]
Bases:
BaseTimelineTaskRequestRequest model for PU/DE (pickup/delivery) tasks.
Maps to C#
InTheFieldTaskModel. Used by helpers:schedule(),received().- Parameters:
id (int | None)
modifiedDate (str | None)
taskCode (str)
plannedStartDate (str | None)
workTimeLogs (List[WorkTimeLogRequest] | None)
initialNote (InitialNoteRequest | None)
plannedEndDate (str | None)
preferredStartDate (str | None)
preferredEndDate (str | None)
truck (TaskTruckInfoRequest | None)
onSiteTimeLog (TimeLogRequest | None)
tripTimeLog (TimeLogRequest | None)
completedDate (str | None)
- truck: TaskTruckInfoRequest | None
- on_site_time_log: TimeLogRequest | None
- trip_time_log: TimeLogRequest | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SimpleTaskRequest(*, id=None, modifiedDate=None, taskCode, plannedStartDate=None, workTimeLogs=None, initialNote=None, timeLog=None)[source]
Bases:
BaseTimelineTaskRequestRequest model for PK/ST (packing/storage) tasks.
Maps to C#
SimpleTaskModel. Used by helpers:pack_start(),pack_finish(),storage_begin(),storage_end().- Parameters:
id (int | None)
modifiedDate (str | None)
taskCode (str)
plannedStartDate (str | None)
workTimeLogs (List[WorkTimeLogRequest] | None)
initialNote (InitialNoteRequest | None)
timeLog (TimeLogRequest | None)
- time_log: TimeLogRequest | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.CarrierTaskRequest(*, id=None, modifiedDate=None, taskCode, plannedStartDate=None, workTimeLogs=None, initialNote=None, scheduledDate=None, pickupCompletedDate=None, deliveryCompletedDate=None, expectedDeliveryDate=None)[source]
Bases:
BaseTimelineTaskRequestRequest model for CP (carrier) tasks.
Maps to C#
CarrierTaskModel. Used by helpers:carrier_schedule(),carrier_pickup(),carrier_delivery().- Parameters:
id (int | None)
modifiedDate (str | None)
taskCode (str)
plannedStartDate (str | None)
workTimeLogs (List[WorkTimeLogRequest] | None)
initialNote (InitialNoteRequest | None)
scheduledDate (str | None)
pickupCompletedDate (str | None)
deliveryCompletedDate (str | None)
expectedDeliveryDate (str | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TimelineTaskUpdateRequest(*, status=None, scheduledDate=None, completedDate=None, comments=None)[source]
Bases:
RequestModelBody for PATCH /job/{jobDisplayId}/timeline/{timelineTaskId}.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.IncrementStatusRequest(*, createEmail=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/timeline/incrementjobstatus.
- Parameters:
createEmail (bool | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TrackingInfo(*, status=None, location=None, estimatedDelivery=None, events=None, carrierName=None, proNumber=None, statuses=None, success=None, errorMessage=None, **extra_data)[source]
Bases:
ResponseModelTracking info — GET /job/{jobDisplayId}/tracking.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.TrackingInfoV3(*, trackingDetails=None, carrierInfo=None, shipmentStatus=None, statuses=None, carriers=None, **extra_data)[source]
Bases:
ResponseModelTracking info v3 — GET /v3/job/{jobDisplayId}/tracking/{historyAmount}.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobNote(*, createdDate=None, modifiedDate=None, createdBy=None, modifiedBy=None, id=None, comment=None, isImportant=None, isCompleted=None, author=None, modifiyDate=None, taskCode=None, **extra_data)[source]
Bases:
ResponseModel,IdentifiedModel,TimestampedModelJob note — GET /job/{jobDisplayId}/note.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobNoteCreateRequest(*, comments, taskCode, isImportant=None, sendNotification=None, dueDate=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/note.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobNoteUpdateRequest(*, comments=None, isImportant=None, isCompleted=None)[source]
Bases:
RequestModelBody for PUT /job/{jobDisplayId}/note/{id}.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ParcelItem(*, id=None, jobItemId=None, description=None, quantity=None, jobItemPkdLength=None, jobItemPkdWidth=None, jobItemPkdHeight=None, jobItemPkdWeight=None, jobItemParcelValue=None, parcelPackageTypeId=None, insureKey=None, packageTypeCode=None, jobModifiedDate=None, parcelItems=None, **extra_data)[source]
Bases:
ResponseModelParcel item — GET /job/{jobDisplayId}/parcelitems.
Maps to C# ParcelItemWithPackage entity.
- Parameters:
id (int | None)
jobItemId (str | None)
description (str | None)
quantity (int | None)
jobItemPkdLength (float | None)
jobItemPkdWidth (float | None)
jobItemPkdHeight (float | None)
jobItemPkdWeight (float | None)
jobItemParcelValue (float | None)
parcelPackageTypeId (int | None)
insureKey (str | None)
packageTypeCode (str | None)
jobModifiedDate (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.JobParcelItemMaterial(*, name=None, description=None, code=None, type=None, weight=None, length=None, width=None, height=None, cost=None, price=None, quantity=None, **extra_data)[source]
Bases:
ResponseModelMaterial used in a parcel item — nested in ParcelItemWithMaterials.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ParcelItemWithMaterials(*, id=None, jobItemId=None, description=None, quantity=None, jobItemPkdLength=None, jobItemPkdWidth=None, jobItemPkdHeight=None, jobItemPkdWeight=None, jobItemParcelValue=None, parcelPackageTypeId=None, insureKey=None, packageTypeCode=None, jobModifiedDate=None, parcelItems=None, materials=None, **extra_data)[source]
Bases:
ParcelItemParcel item with materials — GET /job/{jobDisplayId}/parcel-items-with-materials.
- Parameters:
id (int | None)
jobItemId (str | None)
description (str | None)
quantity (int | None)
jobItemPkdLength (float | None)
jobItemPkdWidth (float | None)
jobItemPkdHeight (float | None)
jobItemPkdWeight (float | None)
jobItemParcelValue (float | None)
parcelPackageTypeId (int | None)
insureKey (str | None)
packageTypeCode (str | None)
jobModifiedDate (str | None)
materials (List[JobParcelItemMaterial] | None)
extra_data (Any)
- materials: List[JobParcelItemMaterial] | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.PackagingContainer(*, name=None, description=None, length=None, width=None, height=None, weight=None, totalCost=None, **extra_data)[source]
Bases:
ResponseModelPackaging container — GET /job/{jobDisplayId}/packagingcontainers.
Maps to C# Packaging entity.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ParcelItemCreateRequest(*, description, length=None, width=None, height=None, weight=None, quantity=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/parcelitems.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ItemNotesRequest(*, notes)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/item/notes.
- Parameters:
notes (str)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ItemUpdateRequest(*, description=None, quantity=None, weight=None)[source]
Bases:
RequestModelBody for PUT /job/{jobDisplayId}/item/{itemId}.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ExtendedOnHoldInfo(*, id=None, reason=None, description=None, followUpUser=None, followUpDate=None, status=None, createdDate=None, createdByContactId=None, createdByJobRelation=None, resolvedDate=None, responsiblePartyTypeId=None, reasonId=None, responsibleParty=None, comment=None, startDate=None, createdBy=None, **extra_data)[source]
Bases:
ResponseModelOn-hold listing entry — GET /job/{jobDisplayId}/onhold.
- Parameters:
id (int | None)
reason (str | None)
description (str | None)
followUpUser (str | None)
followUpDate (str | None)
status (str | None)
createdDate (str | None)
createdByContactId (int | None)
createdByJobRelation (str | None)
resolvedDate (str | None)
responsiblePartyTypeId (str | None)
reasonId (str | None)
responsibleParty (str | None)
comment (str | None)
startDate (str | None)
createdBy (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.OnHoldDetails(*, id=None, responsiblePartyTypeId=None, reasonId=None, startDate=None, nextStepId=None, dueDate=None, assignedToId=None, resolvedDate=None, resolvedCodeId=None, isActive=None, createdByContactId=None, createdByContactName=None, notes=None, responsibleParty=None, reason=None, comment=None, description=None, comments=None, dates=None, followUpUser=None, status=None, **extra_data)[source]
Bases:
ResponseModelFull on-hold detail — GET /job/{jobDisplayId}/onhold/{id}.
- Parameters:
id (int | None)
responsiblePartyTypeId (str | None)
reasonId (str | None)
startDate (str | None)
nextStepId (str | None)
dueDate (str | None)
assignedToId (int | None)
resolvedDate (str | None)
resolvedCodeId (str | None)
isActive (bool | None)
createdByContactId (int | None)
createdByContactName (str | None)
responsibleParty (str | None)
reason (str | None)
comment (str | None)
description (str | None)
dates (dict | None)
followUpUser (dict | None)
status (str | None)
extra_data (Any)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SaveOnHoldRequest(*, reasonId, responsiblePartyTypeId, comment=None, nextStepId=None, dueDate=None, assignedToId=None, resolvedDate=None, resolvedCodeId=None, startDate=None)[source]
Bases:
RequestModelBody for
POST /job/{jobDisplayId}/onholdandPUT /job/{jobDisplayId}/onhold/{onHoldId}andPUT /job/{jobDisplayId}/onhold/{onHoldId}/resolve.Matches swagger
SaveOnHoldRequest– a single schema covers create / update / resolve. The legacyResolveOnHoldRequestis an alias of this class.Required:
reason_id(UUID) +responsible_party_type_id(UUID).Sourcing UUIDs:
reason_id->api.lookup.get_by_key("OnHoldReason")responsible_party_type_id->api.lookup.get_by_key("ResponsibleParty")next_step_id(optional) ->api.lookup.get_by_key("OnHoldNextStep")resolved_code_id(optional) ->api.lookup.get_by_key("OnHoldResolvedCode")assigned_to_id-> acontactIdfromlist_followup_users().
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SaveOnHoldResponse(*, onHoldId=None, status=None, **extra_data)[source]
Bases:
ResponseModelOn-hold create/update response.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ResolveJobOnHoldResponse(*, resolved=None, status=None, **extra_data)[source]
Bases:
ResponseModelOn-hold resolution response.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SaveOnHoldDatesModel(*, followUpDate=None, dueDate=None)[source]
Bases:
RequestModelBody for PUT /job/{jobDisplayId}/onhold/{onHoldId}/dates.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.OnHoldUser(*, contactId=None, name=None, email=None, fullName=None, jobRelation=None, **extra_data)[source]
Bases:
ResponseModelFollow-up user info — GET /job/{jobDisplayId}/onhold/followupuser/{contactId}.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.OnHoldNoteDetails(*, id=None, comment=None, author=None, date=None, **extra_data)[source]
Bases:
ResponseModelOn-hold comment — POST /job/{jobDisplayId}/onhold/{onHoldId}/comment.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SendDocumentEmailModel(*, to=None, cc=None, bcc=None, subject=None, body=None, documentType=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/email/senddocument.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.SendSMSModel(*, phoneNumber=None, message=None, templateId=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/sms.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.MarkSmsAsReadModel(*, smsIds=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/sms/read.
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.CarrierAccountInfo(*, id=None, key=None, friendlyName=None, **extra_data)[source]
Bases:
ResponseModelCarrier account details — nested in PricedFreightProvider and ShipmentPlanProvider.
Maps to C#
CarrierAccountInfoDTO.- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.PricedFreightProvider(*, optionIndex=None, shipmentType=None, providerAPI=None, providerId=None, providerCode=None, providerCompanyName=None, totalSell=None, transit=None, quoteNo=None, proNum=None, optionActive=None, shipmentAccepted=None, shipmentAcceptedDate=None, obtainNFMJobState=None, usedCarrierAccountInfo=None, **extra_data)[source]
Bases:
ResponseModelFreight provider with pricing — GET /job/{jobDisplayId}/freightproviders.
Expanded in feature 033 to match full swagger PricedFreightProvider schema (15 fields + nested CarrierAccountInfo).
- Parameters:
optionIndex (int | None)
shipmentType (str | None)
providerAPI (int | None)
providerId (str | None)
providerCode (str | None)
providerCompanyName (str | None)
totalSell (float | None)
transit (int | None)
quoteNo (str | None)
proNum (str | None)
optionActive (bool | None)
shipmentAccepted (bool | None)
shipmentAcceptedDate (str | None)
obtainNFMJobState (str | None)
usedCarrierAccountInfo (CarrierAccountInfo | None)
extra_data (Any)
- used_carrier_account_info: CarrierAccountInfo | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'allow', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ShipmentPlanProvider(*, jobID=None, freightQuoteOptionsId=None, providerID=None, isPrimary=None, providerCompanyCode=None, providerCompanyName=None, originalCompanyName=None, freightAmount=None, accessorialAmount=None, cafNote=None, quoteNo=None, proNum=None, transit=None, shipmentType=None, miles=None, logo=None, optionIndex=None, optionActive=None, shipmentAccepted=None, shipmentAcceptedDate=None, usedAPI=None, billToFranchiseeId=None, billToCompanyCode=None, obtainNFMJobState=None, usedCarrierAccountInfo=None)[source]
Bases:
RequestModelSave freight provider selection — POST /job/{jobDisplayId}/freightproviders.
Expanded in feature 033 to match full swagger ShipmentPlanProvider schema (22+ fields).
- Parameters:
jobID (str | None)
freightQuoteOptionsId (str | None)
providerID (str | None)
isPrimary (bool | None)
providerCompanyCode (str | None)
providerCompanyName (str | None)
originalCompanyName (str | None)
freightAmount (float | None)
accessorialAmount (float | None)
cafNote (str | None)
quoteNo (str | None)
proNum (str | None)
transit (int | None)
shipmentType (str | None)
miles (float | None)
logo (str | None)
optionIndex (int | None)
optionActive (bool | None)
shipmentAccepted (bool | None)
shipmentAcceptedDate (str | None)
usedAPI (int | None)
billToFranchiseeId (str | None)
billToCompanyCode (str | None)
obtainNFMJobState (str | None)
usedCarrierAccountInfo (CarrierAccountInfo | None)
- used_carrier_account_info: CarrierAccountInfo | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.OnHoldCommentRequest(*, comment=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/onhold/{onHoldId}/comment.
- Parameters:
comment (str | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- ab.api.models.jobs.ResolveOnHoldRequest
alias of
SaveOnHoldRequest
- class ab.api.models.jobs.SendEmailRequest(*, to=None, cc=None, bcc=None, subject=None, body=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/email.
- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.RateQuoteRequest(*, ratesKey=None, carrierCode=None, carrierAccountId=None, active=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/freightproviders/{optionIndex}/ratequote.
Maps to C#
SetRateModelDTO per swagger. Expanded in feature 033.- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.FreightShipment(*, itemID=None, freightItemId=None, freightItemClassId=None, jobID=None, jobDisplayId=None, jobFreightID=None, quantity=None, itemLength=None, itemWidth=None, itemHeight=None, itemWeight=None, itemValue=None, cube=None, totalWeight=None, freightDescription=None, freightItemValue=None, freightItemClass=None, nmfcItem=None, bolDescription=None, jobFreightReport=None, modifiedBy=None, createdBy=None, createdDate=None, modifiedDate=None)[source]
Bases:
RequestModelIndividual freight item — nested in FreightItemsRequest.freightItems.
Maps to C#
FreightShimpmentDTO per swagger (note: swagger has typo ‘Shimpment’; our model uses corrected spelling). Expanded in feature 033.- Parameters:
itemID (str | None)
freightItemId (str | None)
freightItemClassId (str | None)
jobID (str | None)
jobDisplayId (str | None)
jobFreightID (str | None)
quantity (int | None)
itemLength (float | None)
itemWidth (float | None)
itemHeight (float | None)
itemWeight (float | None)
itemValue (float | None)
cube (float | None)
totalWeight (float | None)
freightDescription (str | None)
freightItemValue (str | None)
freightItemClass (str | None)
nmfcItem (str | None)
bolDescription (str | None)
jobFreightReport (str | None)
modifiedBy (str | None)
createdBy (str | None)
createdDate (str | None)
modifiedDate (str | None)
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.FreightItemsRequest(*, jobModifiedDate=None, forceUpdate=None, freightItems=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/freightitems.
Maps to C#
SaveAllFreightItemsRequestDTO per swagger. Expanded in feature 033.- Parameters:
jobModifiedDate (str | None)
forceUpdate (bool | None)
freightItems (List[FreightShipment] | None)
- freight_items: List[FreightShipment] | None
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class ab.api.models.jobs.ChangeJobAgentRequest(*, serviceType=None, agentId=None, recalculatePrice=None, applyRebate=None)[source]
Bases:
RequestModelBody for POST /job/{jobDisplayId}/changeAgent.
Maps to C#
ChangeJobAgentRequestDTO (ABConnectTools).- Parameters:
- model_config = {'alias_generator': <function _to_camel>, 'extra': 'forbid', 'populate_by_name': True, 'str_strip_whitespace': True, 'use_enum_values': True, 'validate_by_alias': True, 'validate_by_name': True}
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].