Referenz

Designs & guest review

Design assets, versions, and tokenized guest review with email OTP.

ClaudeChatGPTCursor

Design review lives on versioned assets. Staff can also share a guest link so clients approve without a portal account.

Assets & versions

Method Path Purpose
GET /v1/designs List designs across projects
GET /v1/projects/:id/designs List designs for a project
POST /v1/projects/:id/designs Create design asset
GET /v1/projects/:id/designs/:assetId Asset detail
DELETE /v1/projects/:id/designs/:assetId Delete asset
GET /v1/designs/:assetId/versions List versions
POST /v1/designs/:assetId/versions/presign Presign upload
POST /v1/designs/:assetId/versions/confirm Confirm upload
GET /v1/designs/versions/:versionId Version detail
POST /v1/designs/versions/:versionId/review Portal / staff review decision

Guest review shares (staff)

Create, email, or revoke a share for a pending version:

Method Path Purpose
POST /v1/designs/versions/:versionId/review-share Create share token
POST /v1/designs/versions/:versionId/review-share/send Email the guest link
DELETE /v1/designs/versions/:versionId/review-share Revoke share
curl -X POST "$API/v1/designs/versions/$VERSION_ID/review-share" \
-H "Authorization: Bearer fel_..." \
-H "Content-Type: application/json" \
-d '{"email":"client@example.com"}'
const { data } = await fetch(
`${API}/v1/designs/versions/${versionId}/review-share`,
{
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ email: 'client@example.com' }),
},
).then((r) => r.json())
console.log(data.shareUrl)
import requests
r = requests.post(
f"{API}/v1/designs/versions/{version_id}/review-share",
headers=headers,
json={"email": "client@example.com"},
)
print(r.json())

Guest review flow (public token)

These routes are authenticated by the share token (plus OTP after verify), not by agency API keys:

Method Path Purpose
GET /v1/designs/review-shares/:token Share metadata / branding
POST /v1/designs/review-shares/:token/otp Request email OTP
POST /v1/designs/review-shares/:token/otp/verify Verify OTP, open session
GET /v1/designs/review-shares/:token/asset Load asset for review
POST /v1/designs/review-shares/:token/review Approve or request changes

Typical UI path: dashboard /review/:token → email → OTP → decision.

Figma import

After connecting Figma under Settings → Integrations:

Method Path Purpose
POST /v1/integrations/figma/frames List frames for a file
POST /v1/integrations/figma/import Import frames as design versions

See Integrations & webhooks for OAuth connection endpoints.