Getting started
This guide takes you from install to a verified attestation on Base, in TypeScript, Python, or Go.
1. Install the SDK
Section titled “1. Install the SDK”npm install @fidemark/sdk etherspip install fidemarkgo get github.com/fidemark/sdk-go/fidemark2. Attest a piece of content
Section titled “2. Attest a piece of content”import { Fidemark, getNetwork } from "@fidemark/sdk";import { JsonRpcProvider, Wallet, NonceManager } from "ethers";
const network = getNetwork("base-sepolia"); // or "base" for mainnetconst provider = new JsonRpcProvider(network.rpcUrl);const signer = new NonceManager(new Wallet(process.env.PRIVATE_KEY!, provider));
const fidemark = new Fidemark({ network, signer });
const { uid, verifyUrl } = await fidemark.attestHuman({ content: "An essay I wrote myself.", contentType: "text/article",});
console.log(uid);console.log(verifyUrl);import osfrom fidemark import Fidemark, AttestHumanInput, get_network
network = get_network("base-sepolia") # or "base"fidemark = Fidemark(network=network, private_key=os.environ["PRIVATE_KEY"])
result = fidemark.attest_human( AttestHumanInput( content="An essay I wrote myself.", content_type="text/article", ))print(result.uid)print(result.verify_url)package main
import ( "context" "log" "os"
"github.com/fidemark/sdk-go/fidemark")
func main() { network, err := fidemark.GetNetwork("base-sepolia") // or "base" if err != nil { log.Fatal(err) }
client, err := fidemark.New(fidemark.Config{ Network: network, PrivateKey: os.Getenv("PRIVATE_KEY"), }) if err != nil { log.Fatal(err) }
res, err := client.AttestHuman(context.Background(), fidemark.AttestHumanInput{ Content: []byte("An essay I wrote myself."), ContentType: "text/article", }) if err != nil { log.Fatal(err) } log.Println(res.UID) log.Println(res.VerifyURL)}The SDK hashed your content client-side, encoded the EAS payload, signed the transaction, and broadcast it. The original content never left your machine; only the SHA-256 digest went on chain.
3. Verify it
Section titled “3. Verify it”const att = await fidemark.verify(uid);att = fidemark.verify(uid)att, err := client.Verify(context.Background(), uid)All three return the same shape: type, attester, contentHash, decoded type-specific fields (human, ai, …), and revoked. Or open verifyUrl in any browser, verification is a read-only on-chain query, no wallet required.
4. Attest an AI output
Section titled “4. Attest an AI output”const result = await fidemark.attestAI({ content: aiResponseText, modelId: "claude-sonnet-4-6", provider: "anthropic", prompt: originalPrompt, parameters: { temperature: 0.7 },});from fidemark import AttestAIInput
result = fidemark.attest_ai(AttestAIInput( content=ai_response_text, model_id="claude-sonnet-4-6", provider="anthropic", prompt=original_prompt, parameters={"temperature": 0.7},))res, err := client.AttestAI(ctx, fidemark.AttestAIInput{ Content: []byte(aiResponseText), ModelID: "claude-sonnet-4-6", Provider: "anthropic", Prompt: []byte(originalPrompt), Parameters: `{"temperature":0.7}`,})The SDK hashes the prompt to bytes32 so the attestation proves which prompt produced the output without revealing the prompt itself.
What’s next
Section titled “What’s next”- Concepts → How it works: what’s actually on chain.
- Concepts → Trust layers: how
proofMethodupgrades from a wallet signature to ENS, multi-party, or proof-of-personhood. - SDK → Installation: full surface parity table across TypeScript, Python, and Go.
- SDK → Configuration: pointing the SDK at Base Sepolia or Base mainnet.
- Embeddable badge: drop a verifier badge into any web page.