SureshakeDocs
API ReferenceEndpoints

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.

  • subjectType is person or entity.
  • slug is the profile's public slug. If you request a profile by an old slug, the response includes redirectedFromSlug alongside the canonical slug.
  • 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.

GET/v2/directory/:subjectType/:slug
curl -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

ParameterTypeDefaultDescription
privateBrowsingbooleanfalseHide your identity from the profile owner while preserving restricted security and audit records.
sourcestring"direct"View-attribution source label (e.g. "directory").

Response fields (data)

FieldTypeDescription
listingIdstring (uuid)Directory listing identifier.
subjectType"person" | "entity"Subject type.
slugstringCanonical public slug.
redirectedFromSlugstring (optional)Present when the requested slug was superseded.
versionIdstring (uuid)Published profile version identifier.
versionnumberPublished profile version number.
snapshotobjectThe public snapshot (see below).
publishedAtstring (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.

200 OK
{
"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.

GET/v2/directory/:subjectType/:slug/record-summary
curl -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)

FieldTypeDescription
listingIdstring (uuid)Directory listing identifier.
subjectType"person" | "entity"Subject type.
subjectIdstring | nullBacking subject identifier when linked.
claimStatus"not_claimable" | "unclaimed" | "claim_pending" | "claimed"Claim state of the listing.
verification.verifiedbooleanWhether identity control is verified by Sureshake.
verification.verifiedAtstring (datetime) | nullWhen verification completed.
reporting.reportsPublishednumberTotal filed reports.
reporting.publicReportsnumberFiled reports that are public.
reporting.reportingSincestring (datetime) | nullStart of the filing record.
reporting.latestReportAtstring (datetime) | nullMost recent filing.
followersnumberFollower count.
reportIndex[]arrayid, title, publishedAt, and access ("public" | "permissioned") per report.
viewerobject | nullPresent only for authenticated callers: following (boolean) and accessStatus ("none" | "pending" | "active").
200 OK
{
"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.

GET/v2/directory/:subjectType/:slug/profile-experience
curl -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)

FieldTypeDescription
listingIdstring (uuid)Directory listing identifier.
subjectType"person" | "entity"Subject type.
slugstringCanonical public slug.
presentationStateenumServer-derived profile presentation state (see below).
profileobjectThe public profile payload (same shape as Get Public Profile).
recordSummaryobjectThe record summary payload (same shape as Get Record Summary).
verificationobjectverified (boolean), verifiedAt (datetime | null).
trustDimensionsobjectIndependent trust dimensions (see below).
provenanceobjectSources and field-level provenance (see below).
actionsobjectServer-derived action states with reason codes (see below).
viewerobject | nullViewer-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.

ActionStatesNotes
followProfileavailable, active, unavailable
claimProfileavailable, pending, managed, unavailable
inviteToClaimavailable, unavailable
suggestCorrectionavailable, unavailableavailable on published, non-archived listings; unavailable carries a reasonCode.
requestPackages[]available, pending, active, expired, revoked, unavailablePer-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.

DimensionFields
organizationIdentitystatus: verified | controlled_not_verified | claim_pending | not_claimed; verifiedAt (datetime | null).
referenceProvenancestatus: cited | none; citedSourceCount; lastCheckedAt.
sourceConnectionstatus: none (no source-system connections surface yet).
filingIntegritystatus: timestamped | none; timestampedFilings; totalFilings. A timestamp proves an artifact is unchanged since filing — never that its contents are correct.
managementCertificationstatus: none (no certification model yet).
externalAttestationstatus: none (no attestation model yet).
relationshipConfirmationstatus: confirmed | none; confirmedCount — relationships confirmed through Sureshake only.

provenance

FieldTypeDescription
sources[]arrayid, kind (stored link type, e.g. about_page, sec_filing), label, url (nullable), suppliedBy ("sureshake" | "organization"), checkedAt (datetime | null).
fields[]arrayPer-field provenance: field (snapshot path, e.g. "overview"), suppliedBy, sourceKind (nullable), confidence (nullable), status ("current" or "disputed" while a public correction is under review).
lastResearchedAtstring (datetime) | nullWhen the public record was last researched.

viewer

Present only for authenticated callers; null otherwise.

FieldTypeDescription
authenticatedbooleanAlways true when present.
selfOrManagerbooleanWhether the viewer manages this profile.
publicFollowunion{ status: "unavailable", reason } | { status: "not_following" } | { status: "following" }.
relationshipunion{ status: "none" } | { status: "pending", requestId } | { status: "active", relationshipId }.
packageAccess[]arrayPer-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.
200 OK
{
"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
}
}
404 Not FoundRollout flag off, or listing not found
{
"error": {
  "code": "NOT_FOUND",
  "message": "Directory capability is not enabled"
}
}

On this page