Directory Profile Endpoints
Public directory profile, record summary, and consolidated profile experience endpoints.
Directory profile endpoints serve the public directory profile page: the published public profile, the record summary (filings, followers, claim and verification state), and the consolidated profile experience read model.
All three endpoints are public reads with optional authentication. Send an
Authorization: Bearer $TOKEN header to receive viewer-specific state
(viewer in the response); unauthenticated requests receive the same public
data with viewer set to null.
subjectTypeispersonorentity.slugis the profile's public slug. If you request a profile by an old slug, the response includesredirectedFromSlugalongside the canonicalslug.- Responses use the standard item envelope:
{ "data": ..., "meta": { "timestamp": ... } }.
The examples below use the placeholder slug example-capital-partners.
Replace it with a real profile slug from directory search.
Get Public Profile
Retrieve the published public profile for a directory listing.
/v2/directory/:subjectType/:slugcurl -H "Authorization: Bearer $TOKEN" \ "https://api.sureshake.com/v2/directory/entity/example-capital-partners"
const response = await fetch(
'https://api.sureshake.com/v2/directory/entity/example-capital-partners',
{ headers: { 'Authorization': `Bearer ${token}` } }, // optional
);
const { data } = await response.json();Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
privateBrowsing | boolean | false | Hide your identity from the profile owner while preserving restricted security and audit records. |
source | string | "direct" | View-attribution source label (e.g. "directory"). |
Response fields (data)
| Field | Type | Description |
|---|---|---|
listingId | string (uuid) | Directory listing identifier. |
subjectType | "person" | "entity" | Subject type. |
slug | string | Canonical public slug. |
redirectedFromSlug | string (optional) | Present when the requested slug was superseded. |
versionId | string (uuid) | Published profile version identifier. |
version | number | Published profile version number. |
snapshot | object | The public snapshot (see below). |
publishedAt | string (datetime) | When this version was published. |
snapshot fields: identity (displayName, aliases, avatarUrl,
logoUrl), overview, location, category, websiteUrl, socialLinks
(label, url), experienceOrTeam, credentials, businessDetails,
publicEvidence, directEmail, directPhone, streetAddress. Sensitive
fields only appear when the listing's visibility policy discloses them.
{
"data": {
"listingId": "8f2349ef-22ab-46ae-a129-2eb4c2570001",
"subjectType": "entity",
"slug": "example-capital-partners",
"versionId": "1d7a3f52-9cf0-4a44-9e51-0f4e8f6a0002",
"version": 3,
"snapshot": {
"identity": { "displayName": "Example Capital Partners" },
"overview": "Seed and Series A investor focused on industrial software.",
"location": "Detroit, Michigan",
"category": "Investor",
"websiteUrl": "https://example.com"
},
"publishedAt": "2026-06-01T12:00:00Z"
},
"meta": { "timestamp": "2026-07-20T00:00:00Z" }
}Get Record Summary
Retrieve the profile's Sureshake record: claim status, verification, filing counts, followers, the report index, and (for authenticated callers) viewer state.
/v2/directory/:subjectType/:slug/record-summarycurl -H "Authorization: Bearer $TOKEN" \ "https://api.sureshake.com/v2/directory/entity/example-capital-partners/record-summary"
const response = await fetch(
'https://api.sureshake.com/v2/directory/entity/example-capital-partners/record-summary',
{ headers: { 'Authorization': `Bearer ${token}` } }, // optional
);
const { data } = await response.json();Response fields (data)
| Field | Type | Description |
|---|---|---|
listingId | string (uuid) | Directory listing identifier. |
subjectType | "person" | "entity" | Subject type. |
subjectId | string | null | Backing subject identifier when linked. |
claimStatus | "not_claimable" | "unclaimed" | "claim_pending" | "claimed" | Claim state of the listing. |
verification.verified | boolean | Whether identity control is verified by Sureshake. |
verification.verifiedAt | string (datetime) | null | When verification completed. |
reporting.reportsPublished | number | Total filed reports. |
reporting.publicReports | number | Filed reports that are public. |
reporting.reportingSince | string (datetime) | null | Start of the filing record. |
reporting.latestReportAt | string (datetime) | null | Most recent filing. |
followers | number | Follower count. |
reportIndex[] | array | id, title, publishedAt, and access ("public" | "permissioned") per report. |
viewer | object | null | Present only for authenticated callers: following (boolean) and accessStatus ("none" | "pending" | "active"). |
{
"data": {
"listingId": "8f2349ef-22ab-46ae-a129-2eb4c2570001",
"subjectType": "entity",
"subjectId": "3b8de1c2-6f4a-4e2b-9c1d-7a5e9f120003",
"claimStatus": "claimed",
"verification": { "verified": true, "verifiedAt": "2026-05-14T09:30:00Z" },
"reporting": {
"reportsPublished": 4,
"publicReports": 2,
"reportingSince": "2025-11-02T00:00:00Z",
"latestReportAt": "2026-07-01T00:00:00Z"
},
"followers": 12,
"reportIndex": [
{
"id": "a1b2c3d4-0000-4000-8000-000000000004",
"title": "Q2 2026 Performance Report",
"publishedAt": "2026-07-01T00:00:00Z",
"access": "permissioned"
}
],
"viewer": { "following": true, "accessStatus": "pending" }
}
}Get Profile Experience
Retrieve the consolidated, typed read model for the redesigned profile page: server-derived presentation state, truthful action states with reason codes, independent trust dimensions, sources and field-level provenance, and viewer state — in one response.
This endpoint is currently behind a rollout feature flag
(directory_profile_experience_v2). While the flag is off for your account,
it returns 404 with code NOT_FOUND ("Directory capability is not
enabled"). The public profile and record-summary endpoints above remain stable
regardless of the flag.
/v2/directory/:subjectType/:slug/profile-experiencecurl -H "Authorization: Bearer $TOKEN" \ "https://api.sureshake.com/v2/directory/entity/example-capital-partners/profile-experience?source=directory"
const response = await fetch(
'https://api.sureshake.com/v2/directory/entity/example-capital-partners/profile-experience?source=directory',
{ headers: { 'Authorization': `Bearer ${token}` } }, // optional
);
const { data } = await response.json();Query parameters
Same as Get Public Profile: privateBrowsing and
source.
Response fields (data)
| Field | Type | Description |
|---|---|---|
listingId | string (uuid) | Directory listing identifier. |
subjectType | "person" | "entity" | Subject type. |
slug | string | Canonical public slug. |
presentationState | enum | Server-derived profile presentation state (see below). |
profile | object | The public profile payload (same shape as Get Public Profile). |
recordSummary | object | The record summary payload (same shape as Get Record Summary). |
verification | object | verified (boolean), verifiedAt (datetime | null). |
trustDimensions | object | Independent trust dimensions (see below). |
provenance | object | Sources and field-level provenance (see below). |
actions | object | Server-derived action states with reason codes (see below). |
viewer | object | null | Viewer-specific state; present only for authenticated callers. |
presentationState
One of: reference_unclaimed, claim_pending, managed_no_filings,
managed_public_filings, managed_permissioned_packages,
managed_mixed_record, disputed, archived.
These are profile presentation states, not authorization states —
viewer-specific access is modeled separately in viewer.
actions
The server decides whether an action is authorized or meaningful; clients choose layout and wording but must not re-derive availability.
| Action | States | Notes |
|---|---|---|
followProfile | available, active, unavailable | |
claimProfile | available, pending, managed, unavailable | |
inviteToClaim | available, unavailable | |
suggestCorrection | available, unavailable | available on published, non-archived listings; unavailable carries a reasonCode. |
requestPackages[] | available, pending, active, expired, revoked, unavailable | Per-package entries with packageId and title. Empty until named access packages ship. |
Unavailable or limited actions carry a stable machine reasonCode, one of:
PROFILE_UNCLAIMED, PROFILE_ARCHIVED, CLAIM_PENDING,
NO_REQUESTABLE_PACKAGES, VIEWER_IS_MANAGER, RELATIONSHIP_PENDING,
NOT_YET_AVAILABLE, SUBJECT_NOT_FOLLOWABLE.
trustDimensions
Each dimension is independent and states its own object and method. There is deliberately no composite trust score.
| Dimension | Fields |
|---|---|
organizationIdentity | status: verified | controlled_not_verified | claim_pending | not_claimed; verifiedAt (datetime | null). |
referenceProvenance | status: cited | none; citedSourceCount; lastCheckedAt. |
sourceConnection | status: none (no source-system connections surface yet). |
filingIntegrity | status: timestamped | none; timestampedFilings; totalFilings. A timestamp proves an artifact is unchanged since filing — never that its contents are correct. |
managementCertification | status: none (no certification model yet). |
externalAttestation | status: none (no attestation model yet). |
relationshipConfirmation | status: confirmed | none; confirmedCount — relationships confirmed through Sureshake only. |
provenance
| Field | Type | Description |
|---|---|---|
sources[] | array | id, kind (stored link type, e.g. about_page, sec_filing), label, url (nullable), suppliedBy ("sureshake" | "organization"), checkedAt (datetime | null). |
fields[] | array | Per-field provenance: field (snapshot path, e.g. "overview"), suppliedBy, sourceKind (nullable), confidence (nullable), status ("current" or "disputed" while a public correction is under review). |
lastResearchedAt | string (datetime) | null | When the public record was last researched. |
viewer
Present only for authenticated callers; null otherwise.
| Field | Type | Description |
|---|---|---|
authenticated | boolean | Always true when present. |
selfOrManager | boolean | Whether the viewer manages this profile. |
publicFollow | union | { status: "unavailable", reason } | { status: "not_following" } | { status: "following" }. |
relationship | union | { status: "none" } | { status: "pending", requestId } | { status: "active", relationshipId }. |
packageAccess[] | array | Per-package status: not_requested, pending, provisioning, active, failed, expired, revoked (plus optional collectionId, expiresAt). Empty until named access packages ship — a relationship never implies active package access. |
{
"data": {
"listingId": "8f2349ef-22ab-46ae-a129-2eb4c2570001",
"subjectType": "entity",
"slug": "example-capital-partners",
"presentationState": "reference_unclaimed",
"profile": { "...": "see Get Public Profile" },
"recordSummary": { "...": "see Get Record Summary" },
"verification": { "verified": false, "verifiedAt": null },
"trustDimensions": {
"organizationIdentity": { "status": "not_claimed", "verifiedAt": null },
"referenceProvenance": {
"status": "cited",
"citedSourceCount": 7,
"lastCheckedAt": "2026-07-18T00:00:00Z"
},
"sourceConnection": { "status": "none" },
"filingIntegrity": {
"status": "none",
"timestampedFilings": 0,
"totalFilings": 0
},
"managementCertification": { "status": "none" },
"externalAttestation": { "status": "none" },
"relationshipConfirmation": { "status": "none", "confirmedCount": 0 }
},
"provenance": {
"sources": [
{
"id": "src_01",
"kind": "website",
"label": "example.com",
"url": "https://example.com",
"suppliedBy": "sureshake",
"checkedAt": "2026-07-18T00:00:00Z"
}
],
"fields": [
{
"field": "overview",
"suppliedBy": "sureshake",
"sourceKind": "website",
"confidence": "high",
"status": "current"
}
],
"lastResearchedAt": "2026-07-18T00:00:00Z"
},
"actions": {
"followProfile": { "state": "available" },
"claimProfile": { "state": "available" },
"inviteToClaim": { "state": "available" },
"suggestCorrection": { "state": "available" },
"requestPackages": []
},
"viewer": null
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Directory capability is not enabled"
}
}