Quick Start

Tulip DS API

Add blockchain-verified audit trails to any application in minutes. Every record is SHA-256 hashed, anchored to Polygon, and RFC 3161 timestamped.

REST API
Simple HTTP endpoints
JavaScript SDK
npm install tulip-js
Webhooks
Real-time event delivery

1. Get your API key

Sign in to your NGO dashboard and create an API key under Settings → API Keys.

2. Make your first request

bash
curl https://api.tulipds.com/api/verify/YOUR_HASH \
  -H "X-API-Key: tulip_live_xxxxxxxxxxxx"

3. Or use the SDK

javascript
import Tulip from 'tulip-js'

const tulip = new Tulip({ apiKey: 'tulip_live_xxxxxxxxxxxx' })

// Log an audit event (auto-hashed + anchored)
const entry = await tulip.audit.log({
  action: 'EXPENSE_CREATED',
  entityType: 'Expense',
  entityId: 'exp_123',
  metadata: { amount: 4200, currency: 'USD' }
})

console.log(entry.dataHash)
// → ab32d3e3e5befae2a6ea9dcb53ad1305372c...
Authentication

Authentication

All API requests must include your API key in the X-API-Key header. Public endpoints (verify, donor portal) require no authentication.

bash
# All authenticated requests
curl https://api.tulipds.com/api/audit \
  -H "X-API-Key: tulip_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json"
Keep your API key secret
Never expose API keys in client-side code or public repositories. Use environment variables.

API Key format

tulip_live_Production key — real blockchain anchors
tulip_test_Test key — Amoy testnet, no real cost
Verify API

Verify API

Public endpoints — no authentication required. Anyone can verify a hash.

Audit Log API

Audit Log API

Create and retrieve immutable audit log entries. Every entry is automatically SHA-256 hashed and queued for blockchain anchoring.

Webhooks

Webhooks

Receive real-time notifications when blockchain anchoring completes. Register a URL and we POST to it on every anchor event.

Event types

audit.anchoredaudit.failedbatch.confirmeddocument.verified
javascript
// Your webhook endpoint receives:
{
  "event": "audit.anchored",
  "timestamp": "2026-03-06T19:05:00.000Z",
  "data": {
    "dataHash": "ab32d3e3e5befae2a6ea9dcb53ad...",
    "blockchainTx": "0xc74e560d8047580a13ff81...",
    "blockNumber": 34841006,
    "network": "Polygon",
    "batchId": "88e631dfd0739e661dec25e33f0f3aa907..."
  }
}
JavaScript SDK

JavaScript SDK

The official tulip-js SDK wraps the REST API with a clean interface for Node.js and browser environments.

bash
npm install tulip-js

Full example

javascript
import Tulip from 'tulip-js'

const tulip = new Tulip({
  apiKey: process.env.TULIP_API_KEY,
  // baseUrl: 'https://api.tulipds.com' // default
})

// ── Audit log ──────────────────────────────
const entry = await tulip.audit.log({
  action: 'DOCUMENT_SIGNED',
  entityType: 'Document',
  entityId: 'doc_789',
})

// ── Verify any hash ────────────────────────
const result = await tulip.verify(entry.dataHash)
console.log(result.verified)          // true
console.log(result.blockchain.txHash) // 0xc74e...

// ── List entries ───────────────────────────
const log = await tulip.audit.list({ limit: 10 })
log.items.forEach(e => console.log(e.dataHash))

Ready to integrate?

Sign in to your dashboard, create an API key, and make your first verified audit entry in under 5 minutes.