Sign in

Local development

Use 127.0.0.1 (not localhost) so sign-in redirects work.

Extend

Integrate funding discovery into your app — embeds and APIs for accessing fund.at records on the AT Protocol.

at.fund data is open. Builders, funding links, and endorsements on the network are accessible through our API — no authentication required. Build integrations, embed support buttons, or create your own tools on top of the fund.at.* lexicon.

Read the Lexicon

Full schema reference for the fund.at.* lexicon — record types, field semantics, and ATProto conventions.

Embed Playground

Add a support button to any page with a single iframe tag.

Live preview

Loading preview…

Steward data

GET /api/steward?uri=atprotocol.dev

Embed code

<iframe
  src="https://at.fund/embed/atprotocol.dev"
  style="border: none; border-radius: 12px; width: 260px; height: 120px;"
  title="Support on at.fund"
></iframe>

Direct from the PDS

You can fetch fund.at records directly from the AT Protocol network. Each record is stored on the user's own PDS.

javascript// Fetch fund.at data directly from the AT Protocol network.
// Uses the Bluesky AppView as a public resolver — any compatible endpoint works.

async function getFundingInfo(handle) {
  // 1. Resolve handle → DID
  const resolve = await fetch(
    `https://public.api.bsky.app/xrpc/com.atproto.identity.resolveHandle?handle=${handle}`
  )
  const { did } = await resolve.json()

  // 2. Resolve DID → PDS URL (from DID document)
  const plcRes = await fetch(`https://plc.directory/${did}`)
  const didDoc = await plcRes.json()
  const pds = didDoc.service?.find(s => s.id === '#atproto_pds')?.serviceEndpoint

  // 3. Fetch the funding record from their PDS
  const record = await fetch(
    `${pds}/xrpc/com.atproto.repo.getRecord?repo=${did}&collection=fund.at.funding.contribute&rkey=self`
  )
  const { value } = await record.json()

  return { did, pds, contributeUrl: value?.url }
}

// Usage
const info = await getFundingInfo('atprotocol.dev')
console.log(info.contributeUrl) // "https://..."

API Explorer

Test public endpoints inline — resolve any handle, DID, or hostname.

Public API

No authentication required

GET/api/steward

Thin resolution — identity + funding only. No capability discovery or transitive dependency resolution. Use /api/entry for full resolution including capabilities and dependencies.

GET/api/entry

Full vertical resolution for a single URI — identity → funding → capabilities → dependencies. Returns { entry: StewardEntry, referenced: StewardEntry[] }.