agent interface

Everything an agent needs. One call, open and free.


structured api specification

GET /.well-known/attest.json for this data programmatically.

{
  "name": "attest",
  "version": "3.0",
  "description": "Open protocol for AI content attribution. Fully open, zero setup.",
  "base_url": "https://attest.97115104.com",
  "endpoints": {
    "create": {
      "method": "GET",
      "path": "/api/create",
      "description": "Create an attestation from query parameters",
      "parameters": {
        "content_name": { "required": true, "type": "string", "description": "Title or filename" },
        "model": { "required": false, "type": "string", "default": "gpt-4", "description": "AI model name" },
        "role": { "required": false, "type": "string", "default": "collaborated", "enum": ["authored", "collaborated", "generated"] },
        "author": { "required": false, "type": "string", "default": "Anonymous", "description": "Author or agent name" },
        "content": { "required": false, "type": "string", "description": "Raw content for SHA-256 hash" },
        "authorship_type": { "required": false, "type": "string", "enum": ["human", "collab", "ai"], "description": "Override auto-derived type" },
        "platform": { "required": false, "type": "string", "description": "The tool/interface the model was used through (e.g. 'GitHub Copilot VS Code', 'Claude Code', 'ChatGPT', 'Cursor'). This is NOT the attest service URL — it identifies the environment/IDE/app." },
        "prompt": { "required": false, "type": "string", "description": "The prompt used to generate the content" },
        "prompt_type": { "required": false, "type": "string", "enum": ["single", "multi-prompt"], "default": "single", "description": "Whether content was created from a single prompt or multiple prompts" }
      },
      "response": {
        "success": true,
        "attestation": { "version": "3.0", "id": "...", "content_name": "...", "..." : "..." },
        "urls": { "verify": "https://...", "short": "https://..." }
      }
    },
    "create_upload": {
      "method": "POST",
      "path": "/api/create-upload",
      "content_type": "multipart/form-data",
      "description": "Upload a file to hash and attest",
      "fields": {
        "file": { "required": true, "type": "file" },
        "content_name": { "required": false, "type": "string" },
        "role": { "required": false, "type": "string" },
        "model": { "required": false, "type": "string" },
        "author": { "required": false, "type": "string" },
        "platform": { "required": false, "type": "string" },
        "prompt": { "required": false, "type": "string" },
        "prompt_type": { "required": false, "type": "string" }
      }
    },
    "create_url": {
      "method": "POST",
      "path": "/api/create-url",
      "content_type": "application/json",
      "description": "Fetch a URL, hash its content, create attestation",
      "body": {
        "url": { "required": true, "type": "string" },
        "content_name": { "required": false, "type": "string" },
        "role": { "required": false, "type": "string" },
        "model": { "required": false, "type": "string" },
        "author": { "required": false, "type": "string" },
        "platform": { "required": false, "type": "string" },
        "prompt": { "required": false, "type": "string" },
        "prompt_type": { "required": false, "type": "string" }
      }
    },
    "shorten": {
      "method": "POST",
      "path": "/api/shorten",
      "content_type": "application/json",
      "description": "Shorten a verify URL",
      "body": { "data": { "required": true, "type": "string", "description": "Base64-encoded attestation JSON" } },
      "response": { "shortUrl": "https://...", "shortId": "..." }
    },
    "verify": {
      "method": "GET",
      "path": "/verify/?data={base64}",
      "description": "Verify an attestation (client-side decode)"
    },
    "short_redirect": {
      "method": "GET",
      "path": "/s/{shortId}",
      "description": "Redirect short URL to verify page"
    },
    "metrics": {
      "method": "GET",
      "path": "/api/metrics",
      "description": "Get platform usage metrics"
    }
  },
  "roles": {
    "authored": { "authorship_type": "human", "model_override": "Human", "description": "Entirely human-written" },
    "collaborated": { "authorship_type": "collab", "description": "Human directed, AI assisted" },
    "generated": { "authorship_type": "ai", "description": "Fully AI-generated" }
  },
  "attestation_schema": {
    "version": "string (3.0)",
    "id": "string (date-hex)",
    "content_name": "string",
    "model": "string",
    "role": "string (authored|collaborated|generated)",
    "authorship_type": "string (human|collab|ai)",
    "timestamp": "string (ISO 8601)",
    "platform": "string (tool/interface, e.g. 'GitHub Copilot VS Code', 'Claude Code', 'ChatGPT')",
    "author": "string",
    "prompt": "string (optional, the prompt used)",
    "prompt_type": "string (single|multi-prompt, default single)",
    "content_hash": "string (sha256:hex, if content provided)",
    "signature": {
      "type": "hmac-sha256",
      "algorithm": "HMAC-SHA256",
      "value": "string (hex)",
      "data_to_sign": "string (JSON)"
    },
    "signer": { "name": "string", "id": "string (slug)" }
  },
  "storage_recommendations": [
    { "method": "html_meta", "example": "<meta name=\"attestation\" content=\"{base64}\">" },
    { "method": "markdown_frontmatter", "example": "attestation: https://attest.97115104.com/s/{id}" },
    { "method": "json_sidecar", "example": "/attestations/filename.json" },
    { "method": "commit_message", "example": "append verify URL to commit message" }
  ]
}
sdk (recommended)

The attest-client npm package provides deterministic attestation creation. It eliminates URL hallucination by returning exact server-generated URLs as structured objects. Zero dependencies.

install

npm install attest-client

one-shot

import { attest } from 'attest-client';

const result = await attest({
  content_name: 'README.md',
  model: 'claude-opus-4',
  role: 'collaborated',
  author: 'my-agent',
  platform: 'GitHub Copilot VS Code'
});
// result.urls.short → exact short URL from server
// result.urls.verify → exact verify URL from server

client instance (reusable)

import { createClient } from 'attest-client';

const client = createClient({ author: 'my-agent' });
const r1 = await client.create({ content_name: 'file1.md', model: 'claude-opus-4', platform: 'Claude Code' });
const r2 = await client.create({ content_name: 'file2.md', model: 'claude-opus-4', platform: 'Claude Code' });
const metrics = await client.metrics();
const spec = await client.discover();

cli

npx attest --content README.md --model claude-opus-4 --role collaborated
npx attest --metrics
npx attest --discover
npx attest --content file.md --json  # raw JSON output

Identifies itself via User-Agent: attest-client/3.0.0 for tracking. npmjs.com/package/attest-client

executable examples

create attestation (minimal)

GET https://attest.97115104.com/api/create?content_name=README.md

create attestation (full)

GET https://attest.97115104.com/api/create?content_name=README.md&model=claude-opus-4&role=collaborated&author=my-agent&platform=GitHub+Copilot+VS+Code&content=hello+world

upload file

curl -F "[email protected]" \
  -F "role=collaborated" \
  -F "model=claude-opus-4" \
  -F "author=my-agent" \
  https://attest.97115104.com/api/create-upload

attest a url

curl -X POST https://attest.97115104.com/api/create-url \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","role":"generated","model":"gpt-4","author":"my-agent"}'

shorten a verify url

curl -X POST https://attest.97115104.com/api/shorten \
  -H "Content-Type: application/json" \
  -d '{"data":"eyJ2ZXJzaW9uIjoiMi4wIn0="}'

decode attestation (client-side)

JSON.parse(atob(data))

get platform metrics

GET https://attest.97115104.com/api/metrics
recommended agent workflow
1. Install: npm install attest-client (or use raw HTTP)
2. Create content (code, docs, articles, etc.)
3. Call attest() or GET /api/create with content_name, model, role, author, platform
   - Set platform to the tool/interface you are running in (e.g. 'GitHub Copilot VS Code', 'Claude Code', 'ChatGPT')
   - SDK returns exact URLs, no hallucination risk
   - Optionally pass content= for SHA-256 hash verification
   - Optionally pass prompt= and prompt_type= to record the prompt used
4. Receive attestation JSON + verify URL + short URL
5. Store attestation alongside content:
   - HTML: <meta name="attestation" content="{base64}">
   - Frontmatter: attestation: {short_url}
   - Sidecar: /attestations/{filename}.json
6. Anyone can verify at the verify URL