Fulfillment Manager API · customer

Record that the customer opened the link

POST /customer/{tenantId}/{token}/viewed

Record that the customer opened the link: appends fulfillment.customer-link-viewed, naming the notification when the token carries one, which is how the notifications service learns its message was opened.

404 CustomerLinkNotFound for a token that opens nothing. Idempotent by state: a link is recorded opened once, and once for each message that carried it, so a reopened page appends nothing.

Access

Public: a customer holds no account: the signed link token in the path is the credential, checked before anything is read

No token: the link, the claim or the first message is the credential, as the description says.

How scopes come from roles: Scopes and roles. Getting a token: Authentication and app tokens.

Retries

Idempotent by state: a link is recorded opened once, and once for each message that carried it, so a reopened page appends nothing.

Why every write carries a key: Idempotency and retries.

Facts appended

  • fulfillment.customer-link-viewed

What a fact is: Facts and the journal.

AI agent tool

No agent tool. recorded by the hosted page when the customer opens their link; no person or agent opens a customer's link for them

Connecting an agent: AI agents.

Example

From Share a quote your customer can accept, step 11: The page records it opened.

curl
curl -X POST 'https://fulfillment.getmanifold.io/customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/01a15a103c4d7e5f8a61728394a5b6c7.01a15a104d5e7f608b72839405b6c7d8.Kd3mT8qWz1pLx5vBn2RyGA/viewed'
JavaScript (fetch)
const response = await fetch("https://fulfillment.getmanifold.io/customer/org_01a15a10-2b3c-7d4e-8f50-61728394a5b6/01a15a103c4d7e5f8a61728394a5b6c7.01a15a104d5e7f608b72839405b6c7d8.Kd3mT8qWz1pLx5vBn2RyGA/viewed", {
  method: "POST",
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

Answers 204 with no body.

The panel writes this call in other languages. It does not send it: Manifold's APIs do not take calls from a web page on another site, so run the call from your own code or terminal. The whole API as OpenAPI: fulfillment-manager.openapi.json. Base URL https://fulfillment.getmanifold.io.

Errors

Every refusal is a status and a JSON body whose _tag names it. A refused call changes nothing.

404

RefusalWhat it meansWhat to do
CustomerLinkNotFound No such record in this organization.Check the id in the path or the body.

429

RefusalWhat it meansWhat to do
CustomerLinkThrottled retryAfterSeconds The request was refused, and nothing changed.Nothing changed.

How refusals work everywhere: Errors.

Used in