# Fixture Tracking Tracks capture status and quality gates for all endpoint fixtures in `tests/fixtures/`. **Constitution**: v2.3.0, Principles I–V **Quality Gates**: G1 (Model Fidelity), G2 (Fixture Status), G3 (Test Quality), G4 (Doc Accuracy), G5 (Param Routing), G6 (Request Quality) **Rule**: Status is "complete" only when ALL applicable gates pass. ## Summary - **Total endpoints**: 231 - **Complete (all gates pass)**: 38 - **G1 Model Fidelity**: 71/231 pass - **G2 Fixture Status**: 75/231 pass - **G3 Test Quality**: 139/231 pass - **G4 Doc Accuracy**: 157/231 pass - **G5 Param Routing**: 216/231 pass - **G6 Request Quality**: 223/231 pass ## Status Legend - **complete**: All applicable quality gates pass - **incomplete**: One or more gates fail - **PASS/FAIL**: Per-gate status ## ACPortal Endpoints | Endpoint Path | Method | Req Model | Resp Model | G1 | G2 | G3 | G4 | G5 | G6 | Status | Notes | |---------------|--------|-----------|------------|----|----|----|----|----|----|--------|-------| | /companies/{id} | GET | — | CompanySimple | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /companies/{companyId}/details | GET | — | CompanyDetails | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 500 on staging — needs company UUID with populated details | | /companies/{companyId}/fulldetails | GET | — | CompanyDetails | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /companies/{companyId}/fulldetails | PUT | CompanyDetails | CompanyDetails | PASS | PASS | PASS | PASS | PASS | PASS | complete | Needs valid CompanyDetails kwargs | | /companies/fulldetails | POST | CompanyDetails | str | PASS | PASS | PASS | PASS | PASS | PASS | complete | Needs valid CompanyDetails kwargs for new company | | /companies/search/v2 | POST | CompanySearchRequest | List[SearchCompanyResponse] | PASS | PASS | PASS | PASS | PASS | PASS | complete | Request fixture captured; response needs valid search that returns results | | /companies/list | POST | ListRequest | List[CompanySimple] | PASS | PASS | PASS | PASS | PASS | PASS | complete | Needs valid ListRequest kwargs | | /companies/availableByCurrentUser | GET | — | List[CompanySimple] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /contacts/user | GET | — | ContactSimple | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /contacts/{contactId}/primarydetails | GET | — | ContactPrimaryDetails | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /contacts/{contactId}/editdetails | GET | — | ContactDetailedInfo | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 500 on staging — was previously captured but now fails | | /contacts/v2/search | POST | ContactSearchRequest | List[SearchContactEntityResult] | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 400 — needs PageSize (1-32767) and PageNumber (1-32767) in request body | | /documents | GET | — | Document | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 500 on staging — was previously captured but now fails | | /address/isvalid | GET | — | AddressIsValidResult | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-14, staging | | /address/propertytype | GET | — | int | PASS | PASS | PASS | PASS | PASS | PASS | complete | Query params: needs valid address1, city, state, zip_code for a real address | | /lookup/contactTypes | GET | — | List[ContactTypeEntity] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /lookup/countries | GET | — | List[CountryCodeDto] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /lookup/jobStatuses | GET | — | List[JobStatus] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /lookup/items | GET | — | List[LookupItem] | PASS | PASS | PASS | PASS | PASS | PASS | complete | Returns 204 — research ABConnectTools for required query params | | /users/list | POST | ListRequest | List[User] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging. Model warning: response is paginated wrapper (totalCount, data) | | /users/roles | GET | — | List[str] | PASS | PASS | PASS | PASS | PASS | PASS | complete | Fixed — route uses List[str]; API returns plain strings, not UserRole objects | | /job/{jobDisplayId} | GET | — | Job | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 500 on staging | | /job/{jobDisplayId}/price | GET | — | JobPrice | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /job/{jobDisplayId}/calendaritems | GET | — | List[CalendarItem] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /job/{jobDisplayId}/updatePageConfig | GET | — | JobUpdatePageConfig | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /job/search | GET | — | JobSearchResult | PASS | PASS | PASS | PASS | PASS | PASS | complete | HTTP 404 on staging | | /job/{jobDisplayId}/timeline | GET | — | TimelineResponse | PASS | PASS | PASS | PASS | PASS | PASS | complete | Needs job ID with active timeline | | /job/{jobDisplayId}/timeline/{taskCode}/agent | GET | — | TimelineAgent | PASS | PASS | PASS | PASS | PASS | PASS | complete | Needs job ID + task code | | /job/{jobDisplayId}/tracking | GET | — | TrackingInfo | FAIL | PASS | PASS | PASS | PASS | PASS | incomplete | Works but no fixture_file set in example | | /v3/job/{jobDisplayId}/tracking/{historyAmount} | GET | — | TrackingInfoV3 | FAIL | PASS | PASS | PASS | PASS | PASS | incomplete | Works but no fixture_file set in example | | /job/{jobDisplayId}/payment | GET | — | PaymentInfo | FAIL | FAIL | PASS | FAIL | FAIL | PASS | incomplete | Works but no fixture_file set in example | | /job/{jobDisplayId}/payment/sources | GET | — | List[PaymentSource] | FAIL | FAIL | PASS | FAIL | PASS | PASS | incomplete | Works but no fixture_file set in example | | /job/{jobDisplayId}/payment/ACHPaymentSession | POST | ACHSessionRequest | ACHSessionResponse | FAIL | FAIL | PASS | FAIL | PASS | PASS | incomplete | Needs ACH session params | | /job/{jobDisplayId}/note | GET | — | List[JobNote] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | Model bug — id field typed as str but API returns int | | /job/{jobDisplayId}/parcelitems | GET | — | List[ParcelItem] | FAIL | PASS | FAIL | PASS | PASS | PASS | incomplete | Returns empty list — needs job with parcel items | | /job/{jobDisplayId}/parcel-items-with-materials | GET | — | List[ParcelItemWithMaterials] | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | Returns empty list — needs job with packed items | | /job/{jobDisplayId}/packagingcontainers | GET | — | List[PackagingContainer] | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | Model has warning fields — works but model incomplete | | /job/{jobDisplayId}/shipment/ratequotes | GET | — | List[RateQuote] | PASS | PASS | PASS | FAIL | FAIL | PASS | incomplete | 2026-02-14, staging | | /job/{jobDisplayId}/shipment/accessorials | GET | — | List[Accessorial] | PASS | PASS | PASS | FAIL | PASS | PASS | incomplete | 2026-02-14, staging | | /job/{jobDisplayId}/shipment/origindestination | GET | — | ShipmentOriginDestination | PASS | PASS | PASS | FAIL | PASS | PASS | incomplete | 2026-02-14, staging | | /job/{jobDisplayId}/shipment/ratesstate | GET | — | RatesState | PASS | PASS | PASS | FAIL | PASS | PASS | incomplete | 2026-02-14, staging | | /shipment | GET | — | ShipmentInfo | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-14, staging | | /shipment/accessorials | GET | — | List[GlobalAccessorial] | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-14, staging | | /job/{jobDisplayId}/form/shipments | GET | — | List[FormsShipmentPlan] | PASS | PASS | PASS | FAIL | PASS | PASS | incomplete | 2026-02-14, staging | | /autoprice/quickquote | POST | QuoteRequestModel | QuickQuoteResponse | PASS | PASS | PASS | PASS | PASS | FAIL | incomplete | Request model validation error — field names don't match (originZip vs OriginZip) | | /AutoPrice/QuoteRequest | POST | QuoteRequestModel | QuoteRequestResponse | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | Needs items array with weight, class fields and valid origin/destination | | /rfq/{rfqId} | GET | — | QuoteRequestDisplayInfo | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 — run examples/rfq.py | | /rfq/forjob/{jobId} | GET | — | List[QuoteRequestDisplayInfo] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /rfq/{rfqId}/accept | POST | AcceptModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — mutating | | /rfq/{rfqId}/decline | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — mutating | | /rfq/{rfqId}/cancel | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — mutating | | /rfq/{rfqId}/acceptwinner | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — mutating | | /rfq/{rfqId}/comment | POST | AcceptModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/rfq | GET | — | List[QuoteRequestDisplayInfo] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/rfq/statusof/{rfqServiceType}/forcompany/{companyId} | GET | — | QuoteRequestStatus | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold | GET | — | List[ExtendedOnHoldInfo] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold | POST | SaveOnHoldRequest | SaveOnHoldResponse | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold | DELETE | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — destructive | | /job/{jobDisplayId}/onhold/{id} | GET | — | OnHoldDetails | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/{onHoldId} | PUT | SaveOnHoldRequest | SaveOnHoldResponse | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/followupuser/{contactId} | GET | — | OnHoldUser | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/followupusers | GET | — | List[OnHoldUser] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/{onHoldId}/comment | POST | OnHoldCommentRequest | OnHoldNoteDetails | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/{onHoldId}/dates | PUT | SaveOnHoldDatesModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/onhold/{onHoldId}/resolve | PUT | ResolveOnHoldRequest | ResolveJobOnHoldResponse | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/insurance | POST | InsuranceReportRequest | InsuranceReport | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/sales | POST | SalesForecastReportRequest | SalesForecastReport | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/sales/summary | POST | SalesForecastSummaryRequest | SalesForecastSummary | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/salesDrilldown | POST | Web2LeadRevenueFilter | List[RevenueCustomer] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/topRevenueCustomers | POST | Web2LeadRevenueFilter | List[RevenueCustomer] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/topRevenueSalesReps | POST | Web2LeadRevenueFilter | List[RevenueCustomer] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/referredBy | POST | ReferredByReportRequest | ReferredByReport | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /reports/web2Lead | POST | Web2LeadV2RequestModel | Web2LeadReport | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/email | POST | SendEmailRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — fire-and-forget | | /job/{jobDisplayId}/email/senddocument | POST | SendDocumentEmailModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/email/createtransactionalemail | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/email/{emailTemplateGuid}/send | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/sms | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/sms | POST | SendSMSModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/sms/read | POST | MarkSmsAsReadModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/sms/templatebased/{templateId} | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /lookup/{masterConstantKey} | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/{masterConstantKey}/{valueId} | GET | — | LookupValue | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/accessKeys | GET | — | List[AccessKey] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/accessKey/{accessKey} | GET | — | AccessKey | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/PPCCampaigns | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/parcelPackageTypes | GET | — | List[ParcelPackageType] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/documentTypes | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/comonInsurance | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/densityClassMap | GET | — | List[DensityClassEntry] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/referCategory | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/referCategoryHeirachy | GET | — | List[LookupValue] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /lookup/resetMasterConstantCache | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — mutating | | /commodity/{id} | GET | — | Commodity | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity/{id} | PUT | CommodityUpdateRequest | Commodity | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity | POST | CommodityCreateRequest | Commodity | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity/search | POST | CommoditySearchRequest | List[Commodity] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity/suggestions | POST | CommoditySuggestionRequest | List[Commodity] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity-map/{id} | GET | — | CommodityMap | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity-map/{id} | PUT | CommodityMapUpdateRequest | CommodityMap | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity-map/{id} | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 008 | | /commodity-map | POST | CommodityMapCreateRequest | CommodityMap | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /commodity-map/search | POST | CommodityMapSearchRequest | List[CommodityMap] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /dashboard | GET | — | DashboardSummary | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /dashboard/gridviews | GET | — | List[GridViewInfo] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /dashboard/gridviewstate/{id} | GET | — | GridViewState | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /dashboard/gridviewstate/{id} | POST | GridViewState | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /dashboard/inbound | POST | DashboardCompanyRequest | — | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | 008 | | /dashboard/inhouse | POST | DashboardCompanyRequest | — | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | 008 | | /dashboard/outbound | POST | DashboardCompanyRequest | — | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | 008 | | /dashboard/local-deliveries | POST | DashboardCompanyRequest | — | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | 008 | | /dashboard/recentestimates | POST | DashboardCompanyRequest | — | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | 008 | | /views/all | GET | — | List[GridViewDetails] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /views/{viewId} | GET | — | GridViewDetails | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /views | POST | GridViewCreateRequest | GridViewDetails | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /views/{viewId} | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 008 | | /views/{viewId}/accessinfo | GET | — | GridViewAccess | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /views/{viewId}/access | PUT | GridViewAccess | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /views/datasetsps | GET | — | List[StoredProcedureColumn] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /views/datasetsp/{spName} | GET | — | List[StoredProcedureColumn] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/brands | GET | — | List[CompanyBrand] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/brandstree | GET | — | List[BrandTree] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/geoAreaCompanies | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/{companyId}/geosettings | GET | — | GeoSettings | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/{companyId}/geosettings | POST | GeoSettingsSaveRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/geosettings | GET | — | GeoSettings | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/search/carrier-accounts | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/suggest-carriers | GET | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/{companyId}/carrierAcounts | GET | — | List[CarrierAccount] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/{companyId}/carrierAcounts | POST | CarrierAccountSaveRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/{companyId}/packagingsettings | GET | — | PackagingSettings | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/{companyId}/packagingsettings | POST | PackagingSettingsSaveRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/{companyId}/packaginglabor | GET | — | PackagingLabor | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/{companyId}/packaginglabor | POST | PackagingLaborSaveRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /companies/{companyId}/inheritedPackagingTariffs | GET | — | List[PackagingTariff] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /companies/{companyId}/inheritedpackaginglabor | GET | — | PackagingLabor | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /contacts/{contactId}/history | POST | ContactHistoryCreateRequest | ContactHistory | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /contacts/{contactId}/history/aggregated | GET | — | ContactHistoryAggregated | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /contacts/{contactId}/history/graphdata | GET | — | ContactGraphData | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /contacts/{mergeToId}/merge/preview | POST | ContactMergeRequest | ContactMergePreview | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /contacts/{mergeToId}/merge | PUT | ContactMergeRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 — destructive | | /job/{jobDisplayId}/freightproviders | GET | — | List[PricedFreightProvider] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/freightproviders | POST | ShipmentPlanProvider | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/freightproviders/{optionIndex}/ratequote | POST | RateQuoteRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /job/{jobDisplayId}/freightitems | POST | FreightItemsRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 008 | | /note | GET | — | List[GlobalNote] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /note | POST | GlobalNoteCreateRequest | GlobalNote | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /note/{id} | PUT | GlobalNoteUpdateRequest | GlobalNote | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /note/suggestUsers | GET | — | List[SuggestedUser] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /partner | GET | — | List[Partner] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /partner/{id} | GET | — | Partner | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /partner/search | POST | PartnerSearchRequest | List[Partner] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 008 | | /Seller/{id} | GET | — | SellerExpandedDto | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /Seller | GET | — | PaginatedList[SellerExpandedDto] | FAIL | FAIL | FAIL | PASS | FAIL | PASS | incomplete | 2026-02-14, staging | | /Catalog | GET | — | PaginatedList[CatalogExpandedDto] | FAIL | FAIL | FAIL | PASS | FAIL | PASS | incomplete | Returns empty — research ABConnectTools for required params | | /Catalog/{id} | GET | — | CatalogExpandedDto | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | Needs valid catalog ID | | /Lot | GET | — | PaginatedList[LotDto] | FAIL | FAIL | FAIL | PASS | PASS | PASS | incomplete | Needs valid catalog ID param | | /Lot/{id} | GET | — | LotDto | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | Needs valid lot ID | | /Lot/overrides | POST | LotOverrideDto | LotOverrideDto | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | Needs lot override params | | /Web2Lead | GET | — | Web2LeadResponse | PASS | PASS | PASS | PASS | PASS | PASS | complete | 2026-02-13, staging | | /Web2Lead/post | POST | Web2LeadRequest | Web2LeadResponse | PASS | PASS | PASS | PASS | PASS | FAIL | incomplete | 020 | | /job | POST | JobCreateRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /job/update | POST | JobUpdateRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /job/save | PUT | JobSaveRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /job/transfer/{jobDisplayId} | POST | TransferModel | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/status/quote | POST | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment/ratequotes | POST | ShipmentRateQuoteRequest | List[RateQuote] | PASS | PASS | PASS | FAIL | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment/book | POST | ShipmentBookRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment/accessorial | POST | AccessorialAddRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment/accessorial/{addOnId} | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/shipment/exportdata | POST | ShipmentExportRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/bysource | POST | PayBySourceRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/ACHCreditTransfer | POST | ACHCreditTransferRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/attachCustomerBank | POST | AttachBankRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/verifyJobACHSource | POST | VerifyACHRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/banksource | POST | BankSourceRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /job/{jobDisplayId}/payment/cancelJobACHVerification | POST | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | 020 | | /contacts/editdetails | POST | ContactEditRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /contacts/{contactId}/editdetails | PUT | ContactEditRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /documents | POST | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /documents/update/{docId} | PUT | DocumentUpdateRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /users/user | POST | UserCreateRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /users/user | PUT | UserUpdateRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /autoprice/v2/quoterequest | POST | QuoteRequestModel | QuoteRequestResponse | FAIL | FAIL | PASS | PASS | PASS | FAIL | incomplete | auto-discovered | | /Catalog/{id} | DELETE | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /Catalog/{id} | PUT | UpdateCatalogRequest | CatalogWithSellersDto | FAIL | FAIL | PASS | PASS | PASS | FAIL | incomplete | 020 | | /Bulk/insert | POST | BulkInsertRequest | — | FAIL | FAIL | FAIL | FAIL | PASS | FAIL | incomplete | 020 | | /Seller | POST | AddSellerRequest | SellerDto | PASS | PASS | PASS | PASS | PASS | FAIL | incomplete | 020 | | /Seller/{id} | PUT | UpdateSellerRequest | SellerDto | PASS | PASS | PASS | PASS | PASS | FAIL | incomplete | 020 | | /Seller/{id} | DELETE | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /Lot | POST | AddLotRequest | LotDto | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 020 | | /Lot/{id} | PUT | UpdateLotRequest | LotDto | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 020 | | /Lot/{id} | DELETE | — | — | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | 020 | | /Lot/get-overrides | POST | — | List[LotOverrideDto] | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | 020 | | /Catalog | POST | AddCatalogRequest | CatalogWithSellersDto | FAIL | FAIL | PASS | PASS | PASS | FAIL | incomplete | auto-discovered | | /contacts/{id} | GET | — | ContactSimple | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /documents/get/{docPath} | GET | — | bytes | FAIL | FAIL | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /documents/list | GET | — | List[Document] | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /job/{jobDisplayId}/form/address-label | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/bill-of-lading | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/credit-card-authorization | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/customer-quote | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/invoice | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/invoice/editable | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/item-labels | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/operations | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/packaging-labels | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/packaging-specification | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/packing-slip | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/quick-sale | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/usar | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | FAIL | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/form/usar/editable | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/parcelitems/{parcelItemId} | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/timeline/{timelineTaskId} | DELETE | — | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/note/{id} | GET | — | JobNote | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/timeline/{timelineTaskIdentifier} | GET | — | TimelineTask | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /job/{jobDisplayId}/timeline/incrementjobstatus | POST | IncrementStatusRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/timeline/{timelineTaskId} | PATCH | TimelineTaskUpdateRequest | TimelineTask | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /job/{jobDisplayId}/item/notes | POST | ItemNotesRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/note | POST | JobNoteCreateRequest | JobNote | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/parcelitems | POST | ParcelItemCreateRequest | ParcelItem | FAIL | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/timeline | POST | — | TimelineSaveResponse | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /job/{jobDisplayId}/item/{itemId} | PUT | ItemUpdateRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/note/{id} | PUT | JobNoteUpdateRequest | JobNote | FAIL | FAIL | PASS | PASS | PASS | PASS | incomplete | auto-discovered | | /job/searchByDetails | POST | JobSearchRequest | List[JobSearchResult] | PASS | PASS | PASS | PASS | PASS | PASS | complete | auto-discovered | | /job/{jobDisplayId}/timeline/undoincrementjobstatus | POST | IncrementStatusRequest | ServiceBaseResponse | PASS | PASS | FAIL | PASS | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/payment/create | GET | — | PaymentInfo | FAIL | FAIL | PASS | FAIL | PASS | PASS | incomplete | auto-discovered | | /job/{jobDisplayId}/shipment/exportdata | GET | — | ShipmentExportData | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /shipment/document/{docId} | GET | — | bytes | FAIL | FAIL | FAIL | FAIL | PASS | PASS | incomplete | auto-discovered | | /Web2Lead/get | GET | — | Web2LeadResponse | PASS | PASS | PASS | PASS | FAIL | PASS | incomplete | auto-discovered | ## Model Warning Summary Models with `__pydantic_extra__` fields when validated against their fixtures: | Model | Issue | |-------|-------| | List[ParcelItem] | 2 undeclared field(s): jobModifiedDate, parcelItems | | ParcelItem | 2 undeclared field(s): jobModifiedDate, parcelItems | | TrackingInfo | 3 undeclared field(s): errorMessage, statuses, success | | TrackingInfoV3 | 2 undeclared field(s): carriers, statuses |