Outcome
Read one authorized workspace’s Socialize profile without mistaking local profile fields for Auth identity.
Action: app_topolo_socialize.brands.get.
Before you start
- Verify production, the original signed-in principal and intended organization. Socialize calls a canonical Auth workspace a brand; do not fabricate a brand id from a name or change the caller.
- Use only actual discovered workspace grants and the published action permission. API-key workspace bindings further narrow the grant; organization membership alone is insufficient. Keep resource context separate from action input.
- Published permission: app_topolo_socialize.accounts:read. No mutation confirmation is requested by the published read action, but source side effects below remain relevant.
Find the workspace
- Resolve the actual workspace through supported workspace/resource discovery or data[].id from brands.list. Send that same exact id as action input and bind its workspace context separately.
Request
GET /api/brands/{id}
{
"id": "ws_socialize_example"
}
Input fields are exactly those in the current published action schema. id is required and must be the discovered workspace id.
For an authorized CLI operation, pin the actual context/environment, discover the workspace, then use the actual values in place of the placeholders below. These commands are illustrative and were not executed against Socialize.
TOPOLO_CONTEXT="org:<verified-org-id>" topolo --env production actions validate app_topolo_socialize.brands.get --data '<reviewed-input-json>' --json
TOPOLO_CONTEXT="org:<verified-org-id>" topolo --env production actions plan app_topolo_socialize.brands.get --resource-type workspace --resource-id '<verified-workspace-id>' --data '<reviewed-input-json>' --json
Interpret the response
- Returns a bare profile object, not {data:...}. Its id is the canonical workspace id; organizationId is not the brand id.
- description and logoUrl default to empty strings for null database values. memberCount counts active local memberships. createdAt/updatedAt are local profile timestamps, not a current Auth workspace change receipt.
- The handler’s app-scoped profile omits workspace name, slug, owner and default flag. Use supported Auth-owned workspace reads for those fields.
- The path id is checked against the original caller’s accessible workspace grants; a named inaccessible id is denied instead of silently serving the default workspace.
Effects
- Although the published action is marked readOnly, requireBrandWorkspace/listBrandWorkspaces can insert a local brand mirror or reactivate/synchronize its organization/status. This is not a zero-SQL-write promise.
- After authorization/mirror synchronization, the route queries the active local profile and its active membership count. It does not edit the description/logo, send invitations or create a campaign.
Worked examples
Every example below is source-derived, synthetic and unrun. Placeholder ids, emails and timestamps confer no real authority. Returned shape illustrates the pinned handler; the published structural schema alone does not guarantee application semantics.
Read one existing profile
Source-derived synthetic and unrun; illustrative workspace/organization identifiers are not live authority.
Request:
{
"id": "ws_socialize_example"
}
Illustrative successful response:
{
"id": "ws_socialize_example",
"description": "Example editorial workspace",
"logoUrl": "",
"memberCount": 2,
"organizationId": "org_example",
"createdAt": "2026-10-21T00:00:00.000Z",
"updatedAt": "2026-10-21T00:00:00.000Z"
}
Check the bare profile id and organization; obtain the workspace name from Auth-owned discovery.
Refusals and recovery
| Status | Source-specific condition | Next step |
|---|---|---|
| 400 | /problems/validation-error | Use the original verified organization and valid resource-binding context. This GET handler does not parse or validate a JSON body; correct the actual context issue rather than inventing a body-validator refusal. |
| 403 | workspace_forbidden | Named workspace absent or inaccessible; re-discover the original allowed workspace, without guessed fallback or widened authority. |
| 503 | workspace_unresolved | Auth could not verify workspace access. Preserve the error and request id; do not interpret it as an empty authorized list. |
| 500 | failed_to_get_brand | Preserve the response and request evidence; verify original context and source-specific dependencies. Earlier mirror/reconciliation effects may remain. |
| 404 | brand_not_found | Authorized active local profile was not returned. Reconcile the exact canonical workspace; do not try another unverified identity. |
Outer authentication, permission and rate-limit refusals can differ from handler responses. Retain actual codes/request ids and use current discovery; no simulated refusal here is a deployed carrier test.
Verify the result
- Compare returned id and organizationId with the intended authorized workspace. Do not treat local memberCount as a count of all platform grants.
- For a404 brand_not_found, reconcile the authoritative workspace and profile state. A503 workspace_unresolved means access verification failed, not an empty profile.
Related actions
Change log
2026-10-21: Added a source-qualified task guide with paired agent instructions, source-derived examples, workspace boundaries, actual response shape and side-effect/recovery notes. Reviewed source: f8e30bad6947f868302f24e9cb31b6a2bdd1fbf6; current catalog marker: bc22ce7a2ceaa4396388794c4d42895c777bed76. Their deployed serving association has not been established. No action execution, provider effect or test capture is claimed.