seorak/API docs

Developer platform

Public evidence, by explicit grant.

Read owner-published developer profiles, activity, project stories, and selected measurements. HTTP and MCP share one public-only projection. Neither surface can reach a developer's private Seorak record.

Base URLhttps://directory.seorak.app
Versionv1
Public authNo API key
CacheNo store

Core flow

One projection, two protocols.

Owners choose the surface and fields first. Consumers can only read the resulting frozen publication.

  1. 01
    The owner publishes

    Profile fields, activity, projects, evidence, and web/search/API/MCP grants are independent choices.

  2. 02
    You query the projection

    Use JSON over HTTP or the anonymous Streamable HTTP MCP resource. Both use the same public query service.

  3. 03
    Revocation wins

    A revoke removes current reads and search membership. Delayed older deliveries cannot restore them.

Quickstart

Make the first request.

Search text is 2 to 80 characters. Empty results are successful and mean no current API-enabled projection matched.

Public reads are anonymous.

No bearer token grants access or is required. The directory returns only fields whose owner enabled the API surface, and search additionally requires the separate search grant.

Every response is Cache-Control: no-store.

Request
curl -sS 'https://directory.seorak.app/v1/search?q=agentic&limit=10'

Access model

Public does not mean everything.

A profile can appear on the web but not in API or MCP. It can permit direct API reads without appearing in search.

This host

Public directory

Anonymous, grant-filtered, frozen projections. Public slugs, selected fields, coverage, freshness, and publication versions only.

Separate authority

Private integrations

Owner-authorized API and MCP grants live in an isolated owner cell. They use different credentials, DTOs, audiences, and routes.

Reference

Public HTTP API

JSON reads expose only the api projection. Fields are optional because each publisher controls the allowlist.

GET/v1/profiles/{profileSlug}

Read one current profile projection when its public API grant is enabled.

  • profileSlugpathrequired

    The public profile slug.

GET/v1/profiles/{profileSlug}/activity

Read the frozen activity calendar or streak fields selected for public API disclosure.

  • profileSlugpathrequired

    The public profile slug.

GET/v1/profiles/{profileSlug}/projects

List API-enabled projects under one current profile. Search permission is not required.

  • profileSlugpathrequired

    The public profile slug.

  • limitquery

    Page size from 1 to 20. Defaults to 10.

  • cursorquery

    Opaque nextCursor from this profile's project listing.

GET/v1/profiles/{profileSlug}/projects/{projectSlug}

Read one current project projection and only its selected evidence fields.

  • profileSlugpathrequired

    The public profile slug.

  • projectSlugpathrequired

    The public project slug.

Illustrative profile response
{
  "apiVersion": "v1",
  "publicationVersion": 7,
  "publishedAt": "2026-08-01T15:00:00.000Z",
  "updatedAt": "2026-08-02T12:30:00.000Z",
  "revokedAt": null,
  "surface": "api",
  "profileSlug": "ada",
  "fields": {
    "displayName": "Ada",
    "headline": "Building careful developer tools"
  }
}

Agent discovery

Public MCP

The anonymous Streamable HTTP endpoint is /mcp/public. MCP reads the separately enabled mcp projection, not the API projection.

search_public_profiles

Search profiles that independently permit both public search discovery and MCP disclosure.

search_public_projects

Search projects that independently permit both public search discovery and MCP disclosure.

get_public_profile

Get one stored public profile projection when its MCP grant is enabled.

get_public_activity

Get the frozen calendar or streak fields explicitly granted to public MCP for a profile.

get_public_project

Get one stored public project projection when its MCP grant is enabled.

list_public_profile_projects

List projects under a public profile when each project's MCP grant is enabled; search permission is not required.

Generic HTTP client configuration
{
  "mcpServers": {
    "seorak-public-directory": {
      "type": "http",
      "url": "https://directory.seorak.app/mcp/public"
    }
  }
}

Protocol behavior

Pagination and errors

Cursors are opaque and bound to their query shape. Do not decode, construct, or reuse one for a different profile or search kind.

  • bad_request

    A path, query, cursor, or bounded request is invalid.

  • not_published

    No current projection is available to this public surface.

  • rate_limited

    The public read budget is exhausted. Honor Retry-After when present.

  • unavailable

    A required hosted dependency or security binding is unavailable.

Data contract

The privacy boundary travels with the response.

Measured values preserve coverage, freshness, availability, measurement windows, and sample sizes. Missing evidence never becomes zero.

May appear when selected

  • Public names, bios, links, and slugs
  • Frozen activity days and streak state
  • Project descriptions and technologies
  • Selected counts or rates with coverage
  • Publication version and timestamps

Never exposed here

  • Prompts, messages, code, or commands
  • Tool arguments, diffs, stdout, or stderr
  • File paths, raw events, or commit messages
  • Owner, session, repository, or device identifiers
  • Secrets, private credentials, or private DTOs

Owner-authorized

Private API and MCP are a different system.

Private integrations require explicit owner consent, least-privilege scopes, expiry, revocation, and an exact resource audience. They are never served by this directory.

Hosted private access is not generally available yet.

The implementation is complete, but production OAuth provider configuration and remote consent verification remain release gates. This page does not advertise an unavailable sign-up flow.