The publish
The publish is one documented operation against one stock object, the Business Intake Request. The Intent ID ridesexternalId, a client-supplied field that Beeline makes filterable on the list endpoint, so the record is re-findable from either side. The find, create and client-defined-values operations are in the business-intake_2025-01-01 specification; the token call is documented in Beeline’s authentication overview.
1
Get a token per API product
POST https://integrations.auth.beeline.com/oauth/token (EU: integrations.eu-auth.beeline.com) with client credentials and audience set to the target API’s base URL. Tokens last 24 hours, one per audience. Client APIs are served from https://client.beeline.com/api and https://client-eu.beeline.com/api under /sites/{clientSiteId}/....2
Find before create
GET /sites/{clientSiteId}/business-intake-requests?externalId=<Intent ID>. Beeline documents no idempotency header, so this filter is the replay guard: if a record with the Intent ID already exists, nothing is created.3
Create the request
POST /sites/{clientSiteId}/business-intake-requests with externalId carrying the Intent ID. The create schema requires jobTitleId, hiringManagerId, workLocationId, quantity and startDate; the tenant may require more, which is what the preflight reads below discover.4
Write client-defined values
PATCH /sites/{clientSiteId}/business-intake-requests/{businessIntakeRequestId}/client-defined-values, writing only the custom fields the programme maps.Every operation carries the
api-version query parameter the specifications mark as required, pinned to each product’s dated version (for example 2025-01-01 for Business Intake and 2023-07-01 for Webhook Management). A 403 from Beeline means a missing scope for the site, not a bad credential, and the transport reports it in those terms.Reading the site first
Preflight resolves the decision against the site’s own lists before anything is written, using the documented reference-data operations. The four*Id fields on the create schema are tenant UUIDs, so names from the decision are resolved to the site’s identifiers here.
Every gap is reported in one pass: required fields with no value, values with no active match on the site, and picklist violations. The result is an enrichment request that an upstream surface renders back to the requester.
Access requested
Beeline grants scopes per API product, so the grant is a finite list a security reviewer can read line by line.Excluded by design: Foundational Data writes (
write:iam, write:org, write:user, write:spend_authority), supplier and invoice scopes, and approval-write scopes. Approving time or candidates from a chat surface needs write:bte or write:candidate, which stays a separate and explicit grant rather than something bundled into the publish integration.Events back
Beeline’s Webhook Management API delivers{id, type, time, data} envelopes. The receiver does five things, each backed by a documented fact in webhook-management_2023-07-01:
- Handshake. When a webhook is created, modified or activated, Beeline sends a
webhook.validationevent carrying a validation code, and the subscription stayspendinguntil that code is echoed back throughPOST /sites/{clientSiteId}/webhooks/{webhookId}/validate/{validationCode}. Beeline marks the webhook inactive if the code is not returned within 10 minutes. The receiver captures the code so the subscription can be activated. - Verify. With
authType: hmac, Beeline signs deliveries with the base64 secret supplied at subscription. The receiver verifies HMAC-SHA256 over the raw body with a timing-safe comparison and rejects, never queues, an unverifiable delivery. The concrete signature header name is confirmed against the tenant at onboarding. - De-duplicate. Beeline documents that duplicate event messages can occur, so every event is de-duplicated on its
idbefore anything downstream sees it. - Correlate. An event carries Beeline record ids (
assignmentId,businessIntakeRequestIdand so on), not the Intent ID, so the receiver maps each event to an Intent ID learned from publish receipts and reference reads. - Sweep. After any outage the receiver replays
GET /sites/{clientSiteId}/webhooks/{webhookId}/eventsthrough the same ingestion path, so recovery never depends on a push having arrived.
bid.submitted, candidate.submitted, assignment.scheduled, assignment.started, sow.pendinginitialapproval, sow.pendingfinalapproval and timesheet.submittedforapproval. Later stages ride the same hook.
The statement-of-work route
Beeline’s Project Agreement Management API (sow_2025-01-01) exposes read and approval operations and no create operation. Statements of work are created inside Beeline. composerID’s role on that channel is read and approval visibility against the Intent ID, and this page does not pretend otherwise.
Running it
One process runs the whole chain: read the completed assessment, mint the Intent ID, read the site’s configuration, resolve the decision against it, and publish with the Intent ID inexternalId.
--region takes us or eu. The exit code tells you what happened:
0: published; the command prints a receipt.1: a transport or trigger error; the message is on stderr.2: a preflight gap; the command prints an enrichment request for the requester and sends nothing.64: credentials are missing.
Next steps
Beeline coverage
The field mapping, what crosses the boundary, and the vendor citations.
Quickstart
Run the sandbox and the Beeline chain from a clean checkout.
Events
How destination webhooks land on the intent timeline.