Skip to content

Supplier API

The Supplier API exposes Speci-finder matched project results for a supplier user.

Open the live API reference

List Speci-finder results

GET /api/supplier/v1/companies/{companyId}/speci-finder/results

Required

Scopespeci-finder/read
HeadersAuthorization: Bearer <access_token>, x-e1-client-id: <client_id>

Path parameters

NameTypeDescription
companyIdstringE1 company identifier for the supplier. Must match a registration on your application.

The endpoint takes no query parameters or request body — selection of “currently open” tenders is scoped server-side.

Response (200 OK)

Returns matched projects, each with one or more matched tenders. A project appears once per response; if a single project has matched tenders under different builders, those tenders are grouped under the same project entry.

{
"data": [
{
"projectId": "12345",
"projectName": "Main Street Development",
"address": "123 Collins St, Melbourne Victoria 3000 Australia",
"category": "Commercial",
"budget": { "low": 1000000, "high": 5000000 },
"status": "Active",
"consultants": [
{ "name": "Smith Engineers", "website": "https://smith.example" },
{ "name": "Jones Architects", "website": null }
],
"tenders": [
{
"id": "67890",
"name": "Bulk Earthworks",
"type": "Tender",
"builder": { "name": "ABC Constructions", "website": "https://abc.example" },
"tenderOpenAt": "2026-05-01",
"quotesDueAt": "2026-05-15",
"status": "Open",
"matchedKeywords": ["concrete", "formwork"]
}
],
"tenderingSubcontractors": [
{ "name": "Apex Concrete", "website": "https://apex.example" },
{ "name": "Pour & Set", "website": null }
],
"url": "https://app.estimateone.com/find-tenders?projectId=12345"
}
]
}

Response field reference

Project

FieldTypeNotes
projectIdstringE1 project identifier.
projectNamestringHuman-readable project name.
addressstringFull international postal address (street, suburb, state, postcode, country).
categorystringProject category (e.g. Commercial, Residential).
budget{ low: number, high: number | null } | nullBanded budget range in dollars. null when no budget is set; high may be null for an open-ended top end.
status"Active" | "Closed"Project-level status. Closed indicates the project itself is closed (regardless of any individual tender status).
consultantsarray of PartyConsultants engaged on the project. Empty for partners without the consultant-details add-on. Excludes unverified entries.
tendersarray of TenderOne or more matching tenders. Never empty for a returned project.
tenderingSubcontractorsarray of PartySubcontractors who have responded affirmatively to the builder on this project (currently quoting / quoted / quoted outside E1, or signalled interest via watchlist). Subject to the E1 SubbieSupplierConnection unlock model — for projects you haven’t unlocked, this lists only previously-viewed subbies. Deduplicated by company.
urlstringDeep link into the E1 web app for this project.

Tender

FieldTypeNotes
idstringE1 tender identifier.
namestringTender name (typically a trade package, e.g. “Bulk Earthworks”).
type"Tender" | "Procurement"Which product surface the tender belongs to.
builderPartyThe lead builder running this tender.
tenderOpenAtISO 8601 date (YYYY-MM-DD) or nullWhen the tender opened.
quotesDueAtISO 8601 date (YYYY-MM-DD) or nullWhen quotes close. null if no due date is set.
status"Open" | "Closed" | "Awarded"Tender-level status.
matchedKeywordsarray of stringThe subset of the assigned user’s keywords that matched this tender.

Party

FieldTypeNotes
namestringDisplay name of the company (preferring the linked E1 account’s name when available).
websitestring | nullCompany website URL, normalised to include an https:// scheme. null when no website is on file.

Matching semantics

  • Results only include tenders that are currently open — quotes are not past due and fall within the near-term window. The window is server-side; partners do not control it.
  • Matching is driven by the assigned user’s Speci-finder keywords. If the assigned user has no keywords configured, the response will be 200 OK with data: [].
  • See Data freshness for how quickly new data propagates.

Example request

Terminal window
curl -X GET \
"https://api.estimateone.com/api/supplier/v1/companies/{companyId}/speci-finder/results" \
-H "Authorization: Bearer $TOKEN" \
-H "x-e1-client-id: $CLIENT_ID"

Errors

See Errors for the full catalogue. Common failures for this endpoint:

StatuscodeCause
400CLIENT_ID_HEADER_MISSINGx-e1-client-id header not sent.
401CLIENT_ID_HEADER_MISMATCHx-e1-client-id header does not match the token.
401UnauthorisedToken invalid, company not registered, permission not published, or scope missing.
5xxFETCH_FAILED / INTERNAL_SERVER_ERRORSomething failed downstream. Retry with backoff.

OpenAPI spec

The full OpenAPI 3.1 spec is published at https://api.estimateone.com/swagger/doc. Use it to drive client code generation in the language of your choice. You can also browse it interactively.