ping
Returns server status. Use to verify connectivity and key validity. No inputs.get_profile
Reads a profile. Call it bare for your own; pass ahandle or profile_id for anyone else’s — Seeker or Organization. Never includes signup_email.
string
A public
@handle, with or without the leading @. Handles are unique across both sides, so one never means two profiles. Provide at most one of handle or profile_id.string (uuid)
A profile id, as returned by
search_seekers, list_matches, or the organization_id on a role. Provide at most one of handle or profile_id.Your own profile
Omit both arguments (or pass your own handle — it routes here either way).tagline is the Seeker’s one-line headline; description is the Organization’s blurb; organization_domain is Organization-only. A field that isn’t part of your profile type’s surface is omitted, not returned as null — a null means the field exists but you haven’t earned it yet. For Organizations, handle is their /o/[handle] slug.
Seekers also get their long-form experience and what_is_next blobs here — this returns the whole profile, not just the fields update_profile writes. The blobs are still written with update_experience and update_what_is_next.
Your own profile is exempt from moderation hiding: if you’re timed out or suspended you can still read it back to remediate.
Someone else’s profile
Pass ahandle or profile_id. What comes back is the profile as other members see it over MCP, which is more than the public web page shows — a Seeker’s what_is_next is included here but never rendered at /s/[handle].
A Seeker profile returns type, handle, name, tagline, website, experience, what_is_next, created_at, last_edited_at, and contact_email:
contact_email is null until you’ve earned it — Seekers share it on a mutual connection, Organizations after unlock_seeker on a matched Seeker. Seeker-to-Seeker lookups are part of the networking layer and go dark with it if the surface is paused.
An Organization profile returns type, handle, name, description, organization_domain, website, and the timestamps:
organization_domain is the verified domain — the trust anchor to check a role against. Organization profiles carry no contact_email on this surface at all: that address only ever reaches you out-of-band, in the unlock handshake email. Both sides can read Organization profiles, including other Organizations.
Get an Organization’s handle from organization_handle on any role returned by search_roles, get_role, or list_interested_organizations.
Suspended and timed-out profiles are not readable — they return not_found, matching their /s/[handle] and /o/[handle] pages.
Rate limits: read (200/hour).
update_profile
Partial update of the caller’s profile. Returns the updated profile (same shape asget_profile).
string
1–60 chars.
string | null
≤140 chars. Seeker headline; Seekers only — Organization keys get a
validation_error. null clears.string | null
≤6,000 chars. Organization blurb; Organizations only — Seeker keys get a
validation_error (Seekers: use tagline, update_experience, update_what_is_next). null clears.string | null
Valid email. The address counterparties reach post-match — see choosing a contact email.
string | null
Full http(s) URL, ≤140 chars. Seekers: any link;
null or "" clears. Organizations: required, and must stay on your verified organization_domain (exact host or subdomain). See choosing a website link.handle and organization_domain are immutable — they cannot be changed by any tool. Sending no fields is a validation_error.
Rate limits: burst only.
get_rate_limits
Returns live consumption against every limit bucket for your account, so agents can self-throttle before bulk operations. No inputs.burst (10/second), search (100/hour), list (60/hour), read (200/hour), express_interest_in_role (30/day), withdraw_interest_in_role (30/day), express_interest_in_seeker (30/day), withdraw_interest_in_seeker (30/day), unlock_seeker (20/day), role_write (20/day), seeker_write (20/day). Organization keys additionally get one express_interest_in_seeker:{role_id} bucket (50/day) per role they’ve expressed interest from.
Rate limits: burst only.
list_matches
Lists your mutual matches —(seeker, role) pairs where both sides expressed interest and the role is still open. Newest match first. No inputs. The result shape depends on your side. (Seeker-to-Seeker connections are separate — see list_connections.)
As a Seeker — full role + Organization details per match:
contact_email — Organizations get that from get_profile after unlock_seeker.
Rate limits: list (60/hour).