Read

get_profile

Returns the full ProfileData snapshot for the authenticated creator's outline — stacks, cards, social links, SEO fields, and subscription status — ready for inspection or as the baseline before editing.


Parameters

NameTypeRequiredDescription
outlineIdstringThe Payload numeric outline ID (as a string) to fetch. If omitted, defaults to the first outline owned by the authenticated user. Passing another user's outline ID returns NOT_FOUND — ownership is enforced at fetch time with no admin bypass.

Response

FieldTypeWhat it means
idstringNumeric Payload outline ID, coerced to string. Use this as outlineId in subsequent tool calls.
namestringDisplay name for the profile (maps to Payload `title`; falls back to slug if title is blank).
handlestringURL handle / slug — the profile lives at /<handle>.
isPaidbooleanWhether the outline's subscription is in an entitled (Pro) state. Derived from subscriptionDetails.subscriptionStatus via isEntitled().
seoSeoDataSEO/OG fields: { title, description, imageId, imageUrl }. title and description are empty strings when unset. imageId is the Payload media doc ID (string or number) or null; imageUrl is the CDN URL or null.
stacksStackData[]Ordered list of card stacks. Each stack has { id, title, cards[] }. cards[] is the ordered list of cards within that stack.
stacks[].idstringPayload row ID for the stack.
stacks[].titlestringSection heading displayed above the card rail.
stacks[].cardsCardData[]Ordered cards in this stack. Each card carries all display + cover + CTA fields.
stacks[].cards[].idstringPayload row ID for the card.
stacks[].cards[].kindCardTemplateKindTemplate lens: basic | about | link | portfolio | service | book-me | testimonial | contact | email | embed-booking | buy. Null/missing in DB is normalised to 'basic'.
stacks[].cards[].headingstringPrimary card headline.
stacks[].cards[].subheadingstringSecondary line beneath the heading.
stacks[].cards[].descriptionstringBody text / longer description.
stacks[].cards[].buttonTextstringCTA button label.
stacks[].cards[].buttonUrlstringCTA button destination URL.
stacks[].cards[].coverIdstring | number | nullPayload media doc ID for the cover image/video. Pass this back to update_card to keep the existing cover without re-uploading.
stacks[].cards[].coverUrlstring | nullCDN URL for the cover (900w medium variant when available, else original). Editor-display only — not a stable asset URL to persist.
stacks[].cards[].coverColorstringCSS hex colour used as card background fallback when no cover image is set. Empty string means no colour override.
stacks[].cards[].forceHorizontalFitbooleanWhen true the cover is letterboxed horizontally instead of cropped.
stacks[].cards[].hiddenbooleanTrue = card is hidden from the public profile (non-destructive; card still exists in DB).
stacks[].cards[].badgestring | nullShort pill text for About/Service card kinds. Null when not set.
stacks[].cards[].ratingnumber | null1–5 star rating for Testimonial card kind. Null when not set.
stacks[].cards[].processingStatusstring | nullVideo cover transcode state: none | processing | ready | failed. Null for image covers.
stacks[].cards[].errorReasonstring | nullTranscode failure description for failed video covers. Null otherwise.
stacks[].cards[].coverFocalXnumber | nullHorizontal focal point (0–100) from the media doc; drives object-position in the preview. Not saved on the card — edit on the media doc.
stacks[].cards[].coverFocalYnumber | nullVertical focal point (0–100) from the media doc.
socialLinksSocialLinkData[]Ordered list of social link rows. Each entry: { id, platform, unicode, url }. platform is the icon slug; unicode is the display glyph.
socialLinks[].idstringPayload row ID for the social link entry.
socialLinks[].platformstringIcon slug (e.g. 'instagram', 'tiktok').
socialLinks[].unicodestringDisplay glyph / unicode value for the icon.
socialLinks[].urlstringFull URL for the social link.

Example

Request

json
{ "outlineId": "42" }

Response

json
{ "id": "42", "name": "Jade Reyes Photography", "handle": "jadereyes", "isPaid": true, "seo": { "title": "Jade Reyes — Portrait & Wedding Photographer", "description": "Candid, film-inspired portrait and wedding photography in Los Angeles.", "imageId": 108, "imageUrl": "https://cdn.outli.ne/media/jade-og.jpg" }, "stacks": [ { "id": "101", "title": "Work", "cards": [ { "id": "201", "kind": "portfolio", "heading": "2024 Wedding Season", "subheading": "Intimate ceremonies, film look", "description": "", "buttonText": "See the full gallery", "buttonUrl": "https://jadereyes.co/weddings-2024", "coverId": 55, "coverUrl": "https://cdn.outli.ne/media/jade-wedding-900.jpg", "coverColor": "", "forceHorizontalFit": false, "hidden": false, "badge": null, "rating": null, "processingStatus": null, "errorReason": null, "coverFocalX": 50, "coverFocalY": 35 } ] }, { "id": "102", "title": "Book Me", "cards": [ { "id": "202", "kind": "book-me", "heading": "Portrait Session", "subheading": "2 hrs · Los Angeles", "description": "Golden-hour outdoor session, 30 edited images delivered in 10 days.", "buttonText": "Check availability", "buttonUrl": "https://cal.com/jadereyes", "coverId": null, "coverUrl": null, "coverColor": "#c97b5a", "forceHorizontalFit": false, "hidden": false, "badge": "From $350", "rating": null, "processingStatus": null, "errorReason": null, "coverFocalX": null, "coverFocalY": null } ] } ], "socialLinks": [ { "id": "301", "platform": "instagram", "unicode": "", "url": "https://instagram.com/jadereyesphoto" } ] }

When to use

Call this at the start of any editing session (step 2 of the create→curate→optimize loop, after get_guidance) to get the current profile state before issuing add_card, update_card, or reorder_cards. Also call it after any write operation to confirm the saved state matches intent.


Watch out

Watch out

  • outlineId is optional — omitting it resolves to the caller's first outline, not an error. Always pass it explicitly if you already know the ID to avoid an extra DB lookup.
  • Passing another user's outlineId returns a NOT_FOUND error (not FORBIDDEN) — the tool intentionally avoids confirming resource existence for IDs the caller doesn't own. No admin-role bypass exists.
  • coverUrl is a preview-display URL (900w variant), not a stable asset to persist or pass back. Use coverId when referencing the cover in update_card calls.
  • isPaid reflects the outline's own subscriptionStatus at fetch time. A free outline returns isPaid:false even if the account has paid — call get_profile after a plan change to get a fresh value.