Workflow
Site Portfolio Management
Follow the sequence below, then use API Reference for payload schema and response details.
Steps
Load the agency verification profile (explicit `agency_management` capability):
Operation IDs:
agency.profile.getBefore code approval, submit the business identity, responsible contact, verified-email, and account-ownership evidence for manual review. Send a fresh `Idempotency-Key` for the exact submission:
Operation IDs:
agency.profile.verification.submit,agency.showcases.create,agency.showcases.list,agency.showcases.getAfter approval and only when the public-entry gate is enabled, resolve a public code to the agency display name and prefilled relationship-mode links. A code never authenticates the caller or grants workspace access:
Operation IDs:
agencyCodes.resolveWhen both public-entry and attribution gates are enabled, let the authenticated customer workspace owner confirm the selected agency and relationship mode with `agencyRelationshipIntents.create`; use a fresh `Idempotency-Key`. This creates only an expiring pending consent intent and grants no access, relationship, attribution, or commission. Pass the returned `intent.id` into `billing.checkout.create` as `agencyRelationshipIntentId`; never treat a browser redirect as relationship activation.
Operation IDs:
agencyRelationshipIntents.create,billing.checkout.createList agency customer accounts after code approval (explicit `agency_management` capability):
Operation IDs:
agency.customers.listCreate/invite a free pre-activation customer workspace after code approval (explicit
Operation IDs:
agency.customers.createRead the agency's verified, tenant-scoped financial overview with exact integer minor-unit
Operation IDs:
agency.financial.overviewRead one currency's bounded ledger and live payout history. Use the independent entry and payout
Operation IDs:
agency.financial.currency.getList sites for the current subject. Normal customer subjects resolve zero or one current website;
Operation IDs:
sites.listLoad consolidated site dashboard payload (detail + deployments, optional pages):
Operation IDs:
sites.dashboard.getPoll compact customer-safe site status while crawl or translation work is active:
Operation IDs:
sites.status.getReview customer-safe site errors with required offset pagination:
Operation IDs:
sites.errors.summary.getPreview source-selection rule changes before saving:
Operation IDs:
sites.sourceSelection.previewPreview source-selection tree projections for dashboard editing:
Operation IDs:
sites.sourceSelection.treePreviewReview observed runtime requests before adding interactive-feature rules:
Operation IDs:
sites.runtimeRequests.observations.listUpdate observation lifecycle after triage:
Operation IDs:
sites.runtimeRequests.observations.lifecyclePreview runtime request policy drafts before saving:
Operation IDs:
sites.runtimeRequestPolicy.previewUpdate site configuration:
Operation IDs:
sites.updateUpdate indexing policy after readiness checks pass:
Operation IDs:
sites.indexingPolicy.updateList discovered pages for a site:
Operation IDs:
sites.pages.listGenerate language switcher snippets for custom frontend integration:
Operation IDs:
sites.switcherSnippets.get
Notes
An agency owner may relinquish an existing customer-paid relationship without changing billing:
and a limit from 1 to 100 (default 25). The uncached read returns only current active
customer-paid interval IDs, customer IDs and effective dates, without customer PII.
`Idempotency-Key` through `agencyRelationships.relinquish`.
Retrying the same reason/identity/key returns the original result; conflicting requests reject.
Referral-only attribution cannot be relinquished. The agency UI and notification delivery remain
separate work; a successful response does not claim that a notification was delivered.
The current customer or agency workspace owner reads persistent in-app ending notices through
`agencyRelationships.notices`, with `limit` and the returned opaque `nextCursor` as `after`.
Notice cursors are monotonic decimal strings, not relationship UUIDs. Keep them as strings;
notice writes serialize sequence allocation through transaction completion so concurrent commits
cannot fall behind a cursor. Closure inserts one
notice into each owning workspace inbox in the same transaction; rollback removes both, and
idempotent replay creates no duplicate. Notices survive delegated-access removal and are read
under current owner membership, not the former delegation. Read failures can be retried without
changing stored notices. No email, webhook, push delivery, or read acknowledgement is claimed.
The current workspace owner reads durable administrative-correction notices while acting as
that workspace itself. Use `limit` and the returned decimal-string `nextCursor` as `after`;
do not convert cursors to JavaScript numbers. Assignment, mode, or access corrections notify
the customer and affected agencies atomically. Exact retries do not duplicate notices, and
rollback leaves none. Notices expose the correction kind, effective date and affected account
identities, never the operator's private reason. They remain readable after delegated access
ends. An exact-start removal may leave no current relationship interval: show the removal
notice without inventing an ended interval or automatically reactivating access. Reads are
uncached and may be retried safely. Public and financial gates remain disabled; this contract
does not authorize activation or claim email delivery.
This legacy-named playbook covers normal customer current-website management plus agency-owned
portfolio contexts. Normal customer subjects resolve zero or one current website; agency-owned
contexts can still use portfolio-style site lists.
Approved owners can request a Showcase with a stable `Idempotency-Key`, list their own portfolio
and monthly allowance, and inspect readiness or actionable failure details. The full page is
measured before translation admission; oversized requests and allowance exhaustion are distinct
failures. A successful logical execution spends one slot; retries never spend another.
`agency_management` capability). Paid activation requires the separate owner-confirmed flow:
strings. This is a read-only surface; it never prepares a payout or implies transfer availability:
cursors as returned; sandbox responses intentionally contain no payout rows:
agency-owned contexts can still list portfolio sites: