Workflow

Site Portfolio Management

Follow the sequence below, then use API Reference for payload schema and response details.

Steps

  1. Load the agency verification profile (explicit `agency_management` capability):

    Operation IDs: agency.profile.get

  2. Before 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.get

  3. After 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.resolve

  4. When 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.create

  5. List agency customer accounts after code approval (explicit `agency_management` capability):

    Operation IDs: agency.customers.list

  6. Create/invite a free pre-activation customer workspace after code approval (explicit

    Operation IDs: agency.customers.create

  7. Read the agency's verified, tenant-scoped financial overview with exact integer minor-unit

    Operation IDs: agency.financial.overview

  8. Read one currency's bounded ledger and live payout history. Use the independent entry and payout

    Operation IDs: agency.financial.currency.get

  9. List sites for the current subject. Normal customer subjects resolve zero or one current website;

    Operation IDs: sites.list

  10. Load consolidated site dashboard payload (detail + deployments, optional pages):

    Operation IDs: sites.dashboard.get

  11. Poll compact customer-safe site status while crawl or translation work is active:

    Operation IDs: sites.status.get

  12. Review customer-safe site errors with required offset pagination:

    Operation IDs: sites.errors.summary.get

  13. Preview source-selection rule changes before saving:

    Operation IDs: sites.sourceSelection.preview

  14. Preview source-selection tree projections for dashboard editing:

    Operation IDs: sites.sourceSelection.treePreview

  15. Review observed runtime requests before adding interactive-feature rules:

    Operation IDs: sites.runtimeRequests.observations.list

  16. Update observation lifecycle after triage:

    Operation IDs: sites.runtimeRequests.observations.lifecycle

  17. Preview runtime request policy drafts before saving:

    Operation IDs: sites.runtimeRequestPolicy.preview

  18. Update site configuration:

    Operation IDs: sites.update

  19. Update indexing policy after readiness checks pass:

    Operation IDs: sites.indexingPolicy.update

  20. List discovered pages for a site:

    Operation IDs: sites.pages.list

  21. Generate 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:

Related Docs