Sync Bidding and Qualification Data
This tutorial demonstrates how to retrieve and use TradeTapp endpoint data to link back to BuildingConnected bidders or vice versa.
TradeTapp captures key data which directly correlates the subcontractor or vendor company information back to any bidding data. This workflow can be helpful in determining bidders status vs qualification status and potentially identifying any information which could be critical to the decision making processes in TradeTapp or BuildingConnected. Another way this could be used is trying to understand a subcontractors qualification status and data in a decision making process for awarding bids.
Before You Begin
- Register an app (select either the Traditional Web App or the Desktop, Mobile, Single-Page App application type).
- Make sure to select the BuildingConnected API via the API Access dropdown after registering your app. The TradeTapp API is housed under the BuildingConnected API heading.
- Acquire a 3-legged OAuth token with
data:read
scope.
Important: TradeTapp API v2 will return data points for instances where an invited subcontractor has made at least one historical submission or the data was imported. Data will not be returned for the following circumstances:
- Invitations where the subcontractor has been invited but has not yet made a submission
- Project approval data (This function is currently not supported by APIs)
Step 1: Retrieve Qualification Data for a specific company
You may wish to know how far along a subcontractor or vendor is with their bidding process and add the bidding status to their qualification data. Start by pulling the data that you need from TradeTapp for the qualification. This will reveal the company ID you will need to use to then call the BuildingConnected API.
Using the Autodesk Builders Network Company ID
TradeTapp and BuildingConnected share the same builders network company ID to identify companies such as GC’s, subcontractors and vendors.
We include this in TradeTapp API responses (id
field). This is not equivalent to other representations of company IDs found elsewhere in ACC APIs and is currently unique to TradeTapp and BuildingConnected.
There are plans to have this available for other products in the future. We recommend using the Autodesk Builders Network Company ID for this workflow.
Query TradeTapp for new and existing qualification data by calling GET qualifications.
Its filter[updatedAt]
query parameter limits the response to qualifications that were created or updated within the given date range.
GET qualifications/{companyId} limits the response to the qualification received from the specified client company.
Alternatively, you may use the filter[searchText]
query parameter of GET qualifications to search for records matching the company or parent company name.
Using a CRM or ERP unique ID
It is worth noting at this point that TradeTapp has the capability of syncing data back to a CRM using a unique id from the CRM. This may be something you wish to use in your processes for connecting bidders or bid data. BuildingConnected does not store your CRM’s Unique ID but Tradetapp does. It is possible to get bidding data by using your CRM or ERP unique ID. To do so, first identify the builders network company ID associated to the unique ID in TradeTapp, and then look up the bidders data using that company ID.
Query for new and existing qualification data by calling GET qualifications.
Its filter[uniqueId]
query parameter limits the response to qualifications that have a matching uniqueId
field.
Request
curl 'https://developer.api.autodesk.com/construction/tradetapp/v2/qualifications?filter\[uniqueId\]=U1010' \
-H 'Authorization: Bearer <TOKEN_VALUE>'
Response
{
"pagination": {
"cursorState": null,
"limit": 20,
"totalResults": 1,
"nextUrl": null,
"previousUrl": null
},
"results": [
{
"id": "51bea397f5846f95994b1da7",
"uniqueId": "U1010",
"questionnaireVersion": "Primary Qualification",
"qualification": {
"status": "QUALIFIED",
"internalSingleLimit": 50000,
"internalTotalLimit": 125000,
"dateExpires": "2024-10-03T00:00:00.000Z",
"summary": "Great profile. Qualified.",
"denialReason": null,
"preExpirationStatus": null,
},
"applicationStatus": "SUBMITTED",
"applicationDetail": "NEW",
"companyName": "New York Interiors ",
"yearFounded": 2004,
"stateFounded": "California",
"taxIdType": "US_FEIN",
"federalTaxId": "411901185",
"submissionCurrency": "USD",
"numberOfHomeOfficeEmployees": 586,
"numberOfFieldSupervisoryEmployees": 302,
"hasProfessionalLicenses": true,
"hasUnionAffiliations": true,
"hasParentCompany": true,
"parentCompanyName": "New York Contractors",
"currentEstimatedBacklog": 10000,
"insuranceBrokerContactName": "Matthiew Serot",
"insuranceBrokerCompanyName": "Lemke Group",
"insuranceBrokerContactPhone": "650000000",
"insuranceBrokerContactEmail": "jallawy1e4@lekmegroup.com",
"suretyBrokerAgencyCompanyName": "Raynor, Weber and Bergstrom",
"suretyBrokerContactName": "Cindy Lehrer",
"suretyBrokerContactPhone": "415000000",
"suretyCompanyName": "Marvin-Hagenes",
"suretySingleProjectBondingCapacity": 100000,
"suretyAggregateBondingCapacity": 500000,
"bankName": "Steuber, Leffler and Jerde",
"bankLineOfCreditTotal": 963320,
"bankLineOfCreditOutstanding": 7640438,
"bankContactName": "Jeanelle Allawy",
"bankContactPhone": "2124724015",
"bankContactEmail": "jallawy1e4@slj.com",
"submittedAt": "2017-02-20T00:00:00Z",
"updatedAt": "2023-06-26T00:00:00Z",
"csiCodesForWorkPerformed": [
{
"primaryCode": "3",
"secondaryCode": "37",
"tertiaryCode": "16",
"codeDescription": "Pumped Concrete"
}
],
"regionsServed": [
{
"region": "Florida"
}
],
"marketsServed": [
{
"market": "Hospitality"
}
],
"completedReferences": [
{
"projectName": "A Project Name",
"location": "8924 Sachs Court, Mattawa, ON, V5M",
"yearCompleted": 2021,
"value": 5004615,
"scope": "Plexiglass",
"referenceContactCompany": "Innojam",
"referenceContactName": "Nike Longworth",
"referenceContactPhone": "3959641188",
"referenceContactEmail": "nlongworth1e4@innojam.biz",
"isLargestProject": false
}
],
"companyContacts": [
{
"positionTitle": "Director of Operations",
"contactName": "Nat Girke",
"contactPhone": "1656366322",
"contactEmail": "ngirke1e4@newyorkinteriors.com",
"contactFax": "1656366322",
"contactType": "BOTH"
}
],
"insuranceCoverages": [
{
"insuranceType": "WORKERS_COMPENSATION",
"carrier": "Leafy Pea Insurance Company",
"perOccurrenceLimit": 100000,
"aggregateLimit": 1000000,
"policyExpirationDate": "2024-05-09",
"isNotApplicable": false
}
],
"experienceModificationRatings": [
{
"year": 2022,
"experienceModificationRating": 0.83
}
],
"osha300Results": [
{
"year": 2022,
"totalNumberDeathsBoxG": 0,
"totalNumberCasesDaysAwayBoxH": 1,
"totalNumberCasesRestrictionTransferBoxI": 0,
"otherRecordableCasesBoxJ": 0,
"totalHoursWorked": 16216
}
],
"certificates": [
{
"id": "6476478d249a0533bab39072",
"type": {
"id": "63653068d6df3afebe7a46fc",
"name": "Disadvantaged Business Enterprise (DBE)"
},
"agency": {
"id": "63653068d6df3afebe7a46fa",
"name": "United States Department of Transportation",
"website": "https://www.transportation.gov/civil-rights/disadvantaged-business-enterprise"
},
"number": "123456",
"expiresAt": "2023-07-03T17:00:00.000Z",
"fileName": "TEST PDF (1) (1).pdf"
}
],
"unions": [
{
"unionName": "Safety Officer Union",
"unionNumber": "7075"
}
],
"annualVolumeRevenues": [
{
"year": 2020,
"estimatedVolumeRevenue": 51546617
}
],
"professionalLicenses": [
{
"licenseType": "Electrician",
"licenseNumber": "D8665258258930",
"licenseState": "New York",
"issuingAgency": "New York Registry of Contractors",
"additionalDescription": "LNO123"
}
],
"companyOfficeAddresses": {
"pagination": {
"cursorState": null,
"limit": 50,
"totalResults": 1,
"nextUrl": null,
"previousUrl": null
},
"results": [
{
"isMainOffice": true,
"address1": "63 Sheridan Terrace",
"address2": null,
"city": "Jamaica",
"state": "New York",
"zipCode": "11447"
}
]
},
"customQuestions": {
"pagination": {
"cursorState": null,
"limit": 50,
"totalResults": 3,
"nextUrl": null,
"previousUrl": null
},
"results": [
{
"question": "How do you feel about your fincancial health?",
"section": "Financial",
"textResponse": "Good",
"numberResponse": null,
"booleanResponse": null
},
{
"question": "How would you rate your fincancial health on a scale of 1 to 10, 10 being the best?",
"section": "Financial",
"textResponse": null,
"numberResponse": 7,
"booleanResponse": null
},
{
"question": "Have you submitted your most recent financials?",
"section": "Financial",
"textResponse": null,
"numberResponse": null,
"booleanResponse": true
}
]
}
}
]
}
Step 2: Use the TradeTapp Vendor company ID to pull data for Bidders
To look up the bids corresponding to the company from TradeTapp, you will need to link the id
field found from the previous step to the bidderCompanyId
field from GET bids BuildingConnected API call.
Query Bids for new and existing bid data by calling GET bids:
- filter[bidderCompanyId] limits the response to bids received from the specified client.
- filter[updatedAt] limits the response to bids that were created within the specified date/time range.
Request
curl -v 'https://developer.api.autodesk.com/construction/buildingconnected/v2/bids?filter\[bidderCompanyId\]=51bea397f5846f95994b1da7' \
-H 'Authorization: Bearer <TOKEN_VALUE>'
Response
{
"pagination": {
"limit": 100,
"cursorState": "eyJsaW1pdCI6MjUsIm9mZnNldCI6MjV9",
"nextUrl": ""
},
"results": [
{
"id": "611ee35b3935e500a8b18c8a",
"projectId": "59d2bd7440b36a0da258f24d",
"bidPackageId": "590dd127b359f408f190b5a7",
"inviteId": "590dd527b359f408f191b5b6",
"bidderCompanyId": "51bea397f5846f95994b1da7",
"creatorType": "BIDDER",
"notes": "Notes about bid",
"total": 5000,
"leveledTotal": 10000,
"createdAt": "2021-08-19T23:07:16.083Z",
"updatedAt": "2021-08-19T23:07:16.083Z",
"submittedAt": "2021-08-19T23:08:32.075Z",
"attachments": [
"60cea42b3934f500a8b29c7b"
],
"revision": 0,
"createdBy": "5d8104b87e392d56e1e4b4ca",
"submittedBy": "5d8104b87e392d56e1e4b4ca",
"lineItems": {
"pagination": {
"limit": 100,
"cursorState": "eyJsaW1pdCI6MjUsIm9mZnNldCI6MjV9",
"nextUrl": ""
},
"results": [
{
"id": "53811754d3a604966df72247",
"type": "COST_BREAKDOWN",
"description": "Duct Insulation",
"section": "Furnish & Install",
"isRequired": true,
"isCustom": false,
"unit": "HOURS",
"code": "D2",
"quantity": 10,
"isQuantityFixed": true,
"unitCost": 500,
"value": 10000
}
]
},
"plugs": {
"pagination": {
"limit": 100,
"cursorState": "eyJsaW1pdCI6MjUsIm9mZnNldCI6MjV9",
"nextUrl": ""
},
"results": [
{
"id": "5f8104b87e392d56e1e4b4ad",
"quantity": 20,
"unitCost": 500,
"value": 10000,
"createdBy": "",
"updatedBy": "",
"createdAt": "",
"updatedAt": "",
"lineItemFingerprint": {
"type": "COST_BREAKDOWN",
"description": "duct insulation",
"section": "furnish & install",
"unit": "HOURS",
"code": "d2"
}
}
]
}
}
]
}