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.
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
curl https://api.tulipds.com/api/verify/YOUR_HASH \
-H "X-API-Key: tulip_live_xxxxxxxxxxxx"3. Or use the SDK
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
All API requests must include your API key in the X-API-Key header. Public endpoints (verify, donor portal) require no authentication.
# All authenticated requests
curl https://api.tulipds.com/api/audit \
-H "X-API-Key: tulip_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json"API Key format
tulip_live_Production key — real blockchain anchorstulip_test_Test key — Amoy testnet, no real costVerify API
Public endpoints — no authentication required. Anyone can verify a hash.
Audit Log API
Create and retrieve immutable audit log entries. Every entry is automatically SHA-256 hashed and queued for blockchain anchoring.
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// 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
The official tulip-js SDK wraps the REST API with a clean interface for Node.js and browser environments.
npm install tulip-jsFull example
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.