+1 (888) 885-5991|impact@theailab.org|info@theailab.org
Trust Identity Protocol

TIP Node Operator Guide

Everything you need to deploy, configure, and operate a TIP Protocol node on the Trust Identity Protocol network. This guide covers the complete API reference, Docker deployment, peer networking, and monitoring.

Protocol v2.0·Chain ID: tip-mainnet-v2·18 REST Endpoints

What Is a TIP Node

A TIP node is a server that participates in the Trust Identity Protocol network. It stores a local copy of the directed acyclic graph (DAG) containing all identity registrations, content provenance records, disputes, and trust score updates. Any organization can run a node. No permission is required.

Nodes communicate via a gossip protocol, synchronizing new transactions with their peers. Every node can independently compute any trust score from its local DAG copy. There is no central database. The protocol is deterministic: given the same DAG history, every compliant node computes the same score.

Running a node is free. The TIP Protocol specification is licensed under CC-BY 4.0. The reference implementation code is licensed under TIPCL-1.0 (free for individuals, small businesses under $100K revenue, nonprofits, NGOs, educational institutions, government entities, and journalism organizations).

Quick Start (Docker)

1. Pull and run
docker run -d \
  --name tip-node \
  -p 4000:4000 \
  -e TIP_ADMIN_API_KEY=$(openssl rand -hex 32) \
  -e TIP_PEER_URLS=https://node.theailab.org \
  -v tip-data:/app/data \
  ghcr.io/theailab-org/tip-node:latest
2. Verify
curl http://localhost:4000/health

# Expected response:
{
  "status": "ok",
  "chain_id": "tip-mainnet-v2",
  "protocol_version": "2.0.0",
  "tx_count": 0,
  "peer_count": 1
}
3. Register a TIP-ID (requires VP)
curl -X POST http://localhost:4000/v1/identity/register \
  -H "Content-Type: application/json" \
  -d '{
    "region": "US",
    "public_key": "<ML-DSA-65 public key hex>",
    "vp_id": "theailab",
    "vp_signature": "<VP signature>",
    "zk_dedup_proof": "<ZK proof hex>"
  }'

API Reference

Base URL: http://localhost:4000. All request and response bodies use application/json. Admin endpoints require the Authorization: Bearer <TIP_ADMIN_API_KEY> header. All responses include X-Powered-By: TIP-Protocol/theailab.org.

MethodEndpointDescription
GET/healthNode health, chain_id, protocol version
GET/v1/node/infoNode metadata and capabilities
GET/v1/node/peersConnected peer list
GET/v1/dag/statsTransaction, identity, and content counts
POST/v1/vp/registeradminRegister a new Verification Provider
GET/v1/vp/:vpIdVP record, jurisdiction tier, warrant canary
POST/v1/identity/registerRegister new TIP-ID (requires zk_dedup_proof)
GET/v1/identity/:tipIdResolve TIP-ID (respects GDPR display mode)
GET/v1/identity/:tipId/scoreTrust score (respects display mode)
GET/v1/identity/:tipId/historyFull transaction history for a TIP-ID
POST/v1/content/registerRegister content with origin declaration
GET/v1/content/:ctidResolve content provenance record
POST/v1/content/:ctid/disputeFile a dispute against content
POST/v1/content/:ctid/verifyCommunity verification of content
GET/v1/revocationsAll revocations (optional ?since= filter)
POST/v1/revocationsCreate revocation (4 types)
POST/v1/dedup/checkZK uniqueness check (boolean only)
GET/v1/dedup/merkle-rootCurrent Merkle root and registry counts

Rate Limits

Default rate limits per IP address: 100 requests/minute for public (read) endpoints, 20 requests/minute for write endpoints, and 50 requests/minute for admin endpoints. Rate-limited responses return HTTP 429 with a Retry-After header.

Example: Register Content

POST /v1/content/register
{
  "author_tip_id": "tip://id/US-a3f8c91b2d4e7021",
  "origin_code": "OH",
  "content": "First 10,000 characters of the content...",
  "content_hash": "<SHAKE-256 hash of the full content>",
  "title": "My Article Title",
  "author_signature": "<ML-DSA-65 signature of content_hash + origin_code>"
}

# Response:
{
  "ctid": "tip://c/OH-7f2a91bc3d5e4a-a3f8",
  "status": "registered",
  "pre_scan_flagged": false,
  "pre_scan_score": 0.42,
  "registered_at": "2026-03-26T12:00:00Z"
}

TIP-ID and CTID Formats

TIP-ID (Identity URI)

tip://id/[REGION]-[SHAKE256(public_key)[:16]]

Example: tip://id/US-a3f8c91b2d4e7021
Regex:   ^tip://id/[A-Z]{2}-[0-9a-f]{16}$

CTID (Content URI)

tip://c/[ORIGIN]-[SHAKE256(content)[:14]]-[tip_id[-4:]]

Example: tip://c/OH-7f2a91bc3d5e4a-a3f8
Regex:   ^tip://c/(OH|AA|AG|MX)-[0-9a-f]{14}-[0-9a-f]{4}$

Origin Codes

Every piece of content registered on TIP must declare one of four origin codes. The origin code is cryptographically bound to the content hash and the author's signature. Conservative labeling (declaring content as more AI-involved than it actually is) carries zero penalty. Only under-disclosure is penalized.

OH
Original Human
Created entirely by the author, no AI generation tools
AA
AI-Assisted
Human primary author, AI used for enhancement
AG
AI-Generated
AI primary creator, human prompted or curated
MX
Mixed
Multiple sources, some human, some AI

Trust Scoring and Tiers

Trust scores are deterministic integers from 0 to 1000, computed from the complete DAG transaction history. New identities start at 500 (or 550 with social attestation). Any protocol-compliant node given the same DAG must compute the same score.

800 – 1000Highly Trusted
600 – 799Trusted
400 – 599Review Advised
200 – 399Low Trust
0 – 199Not Trusted

Score Events

Registration (no attestation):        500
Registration (with social attestation): 550
OH declared, confirmed AG (1st):       -100
OH declared, confirmed AA (1st):        -40
AA declared, confirmed AG (1st):        -25
2nd offense:                           -200
3rd offense:                           -350
Conservative label (no penalty):          0
90-day clean record bonus:              +10

DAG Transaction Types

The DAG stores 17 transaction types. The first 8 were introduced in v1. The remaining 9 are v2 additions (FIX-02 through FIX-08).

GENESIS
VP_REGISTERED
REGISTER_IDENTITY
REGISTER_CONTENT
CONTENT_VERIFIED
CONTENT_DISPUTED
ADJUDICATION_RESULT
SCORE_UPDATE
REVOKE_VOLUNTARY
REVOKE_VP
REVOKE_DECEASED
REVOKE_DEVICE
MERKLE_ROOT_PUBLISHED
UPDATE_DISPLAY_MODE
HISTORY_ERASED
SCORE_ZK_PROOF_ISSUED
JURISDICTION_ADVISORY

Configuration Reference

All configuration is via environment variables. No config files.

VariableDefaultDescription
TIP_NODE_PORT4000HTTP listen port
TIP_CHAIN_IDtip-mainnet-v2Network chain identifier
TIP_ADMIN_API_KEY(generate)Admin endpoint authentication key
TIP_DB_PATH./tip_dag.dbSQLite database file path
TIP_PEER_URLSComma-separated peer node URLs for gossip
TIP_GOSSIP_INTERVAL30Seconds between gossip sync rounds
TIP_MERKLE_PUBLISH_HOURS6Hours between Merkle root publications
TIP_LOG_LEVELinfoLogging verbosity (debug, info, warn, error)
TIP_CORS_ORIGINS*Allowed CORS origins (comma-separated)
TIP_RATE_LIMIT_PUBLIC100Public requests per minute per IP
TIP_RATE_LIMIT_WRITE20Write requests per minute per IP

Peer Networking

Nodes discover and sync with each other via a gossip protocol. On startup, a node connects to the peers listed in TIP_PEER_URLS and requests their peer lists. This bootstrapping process builds the mesh.

Gossip sync cycle (every TIP_GOSSIP_INTERVAL seconds)
1. Node A sends GET /v1/dag/stats to each peer
2. If peer has more transactions, A sends GET /v1/node/peers
3. A requests missing transactions by hash range
4. A validates each transaction signature before inserting
5. A recomputes affected trust scores
6. A announces new local transactions to peers
Bootstrap peer: To join the mainnet, set TIP_PEER_URLS=https://node.theailab.org. The AI Lab operates the genesis node. Your node will discover additional peers through the gossip protocol automatically.

Monitoring and Health

Health check endpoint
GET /health

{
  "status": "ok",
  "chain_id": "tip-mainnet-v2",
  "protocol_version": "2.0.0",
  "tx_count": 14823,
  "identity_count": 1247,
  "content_count": 8934,
  "peer_count": 12,
  "uptime_seconds": 86400,
  "last_gossip_at": "2026-03-26T11:45:00Z"
}

Monitor /health with your existing infrastructure tooling (Prometheus, Datadog, UptimeRobot, etc.). A healthy node returns HTTP 200 with "status": "ok". Alert if peer_count drops to 0 or if the response time exceeds 5 seconds.

Attribution and Licensing

The TIP Protocol specification is licensed under CC-BY 4.0 (free for everyone, forever). Attribution required:

TIP Protocol Specification by Dinesh Mendhe,
The AI Lab Intelligence Unobscured, Inc. (theailab.org)

The reference implementation code is licensed under TIPCL-1.0. Free for individuals, small businesses under $100K revenue, nonprofits, NGOs, educational institutions, government entities, and journalism organizations. Commercial tiers apply at and above $100K annual revenue, starting at the Micro tier ($500/yr) and scaling up to the Global tier. The license converts to Apache 2.0 on January 1, 2031.

Mandatory attribution for all code users:

Built on TIP Protocol by The AI Lab Intelligence Unobscured, Inc.
(theailab.org) | Licensed under TIPCL-1.0