Skip to content

Invitations

An invitation is a subcontractor’s access to one package on a project. You invite them, or they ask for access and you approve it. The invitation then records whether they downloaded the documents and how they responded.

GET /api/tender/builder/v1/companies/{companyId}/tender-projects/{projectId}/invitations
GET /api/tender/builder/v1/companies/{companyId}/tender-projects/{projectId}/invitations/{invitationId}

Both need invitations/read.

FieldTypeNotes
idstringNumeric string.
packageIdstringThe package the invitation is for.
packageNamestring
quotesDueDatestring | nullYYYY-MM-DD.
inviteeobjectWho was invited. See below.
accessobjectHow they came to have, or lose, access. See below.
responseobjectHow they responded. See below.
FieldTypeNotes
addressBookCompanyIdstring | nullnull if the subcontractor asked for access without being in your address book.
addressBookContactIdstring | nullAs above.
companyNamestring | null
contactNamestring | null

Contact details such as email addresses and phone numbers are not included. Read them from your address book, which needs address-book/read.

FieldTypeNotes
statusstringOne of the statuses below.
requestedAtstring | nullISO 8601 timestamp. When the subcontractor asked for access.
approvedAtstring | nullWhen access was granted.
invitedAtstring | nullWhen you sent the invitation.
declinedAtstring | nullWhen you declined their request.
declinedReasonstring | nullYour reason for declining.
revokedAtstring | nullWhen you withdrew access.
statusMeaning
invitedYou invited them.
requestedThey asked for access and are waiting for you to approve or decline it.
approvedYou, or auto-approval, granted their request.
declinedYou declined their request.
revokedYou withdrew access after inviting or approving them.
FieldTypeNotes
quotingStatusstring | nullquoting, quoted, quoted_outside_e1 or not_quoting; null until they respond.
notQuotingReasonstring | nullWhy they aren’t quoting, when they said.
lastDownloadedAtstring | nullWhen they last downloaded the package’s documents.
quoteIdsstring[]The current revision of each quote they sent. Read them with the Quotes endpoints, which need quotes/read.

GET .../invitations returns every invitation on the project, oldest first, in every access status. Add packageId to list one package’s invitations.

Query parameterNotes
packageIdOptional. Only list invitations to this package.
limitOptional. Page size, 1 to 100. Defaults to 25.
cursorOptional. The _metadata.nextCursor from the previous page.

The list is paginated. While _metadata.hasNextPage is true, request the next page with cursor set to _metadata.nextCursor and the same packageId. The cursor is signed and tied to the project and package filter it came from: pass it back unchanged. A cursor that was modified, or that came from a different listing, returns 400.

Terminal window
curl -sS \
-H "Authorization: Bearer $E1_ACCESS_TOKEN" \
-H "x-e1-client-id: $E1_CLIENT_ID" \
"$E1_API_BASE/api/tender/builder/v1/companies/$E1_COMPANY_ID/tender-projects/198578/invitations?packageId=1930318"
{
"data": [
{
"id": "7001",
"packageId": "1930318",
"packageName": "Joinery",
"quotesDueDate": "2026-10-01",
"invitee": {
"addressBookCompanyId": "3001",
"addressBookContactId": "4001",
"companyName": "Acme Joinery",
"contactName": "Jo Smith"
},
"access": {
"status": "invited",
"requestedAt": null,
"approvedAt": "2026-09-01T09:00:00+10:00",
"invitedAt": "2026-09-01T09:00:00+10:00",
"declinedAt": null,
"declinedReason": null,
"revokedAt": null
},
"response": {
"quotingStatus": "quoted",
"notQuotingReason": null,
"lastDownloadedAt": "2026-09-02T10:30:00+10:00",
"quoteIds": ["9001"]
}
}
],
"_metadata": {
"nextCursor": null,
"hasNextPage": false
}
}

GET .../invitations/{invitationId} returns one invitation as data, without _metadata.

StatusWhen
400limit, packageId or the invitation ID isn’t valid, or the cursor was modified or came from a different listing (INVALID_CURSOR).
401The token doesn’t carry invitations/read.
403The builder restricts the project to certain team members.
404The project, package or invitation doesn’t exist, or belongs to another company.