Loading...
Loading...
An automated multi-stage pipeline for content ingestion, fingerprinting, scanning, classification, and review. Configure rules to automate routing decisions.
Intake
Content enters the pipeline from upload, URL, API, crawler, or webhook sources.
Fingerprint
Perceptual hashing generates content fingerprints for deduplication and tracking.
Scan
Content is scanned for policy violations, copyright matches, and safety issues.
Classify
AI classifies content type, sensitivity, and applicable regulations.
Review
Content flagged for human review enters the moderation queue.
Complete
Content passes all checks and is published or archived.
Direct file uploads through the dashboard or API.
Fetch and process content from remote URLs.
Programmatic content submission via REST or SDK.
Automated web crawling for content discovery.
Receive content via webhook from external platforms.
Submit content to the pipeline via multipart upload, URL reference, or cloud storage integration. The API returns a pipeline job ID for tracking.
// Upload content to the pipeline
POST /api/v1/content/ingest
Content-Type: multipart/form-data
{
"file": <binary>,
"metadata": {
"title": "Quarterly Report Q1 2026",
"contentType": "document",
"owner": "019user-...",
"tags": ["financial", "quarterly"],
"license": "proprietary"
},
"pipeline": {
"watermark": ["invisible", "forensic"],
"autoApproveThreshold": 0.95,
"priority": "high"
}
}
// Response
{
"ok": true,
"data": {
"jobId": "019job-a1b2c3d4",
"contentId": "019content-e5f6g7h8",
"status": "processing",
"estimatedCompletionMs": 12000,
"stages": {
"ingestion": "completed",
"fingerprint": "processing",
"watermark": "pending",
"verify": "pending",
"register": "pending",
"review": "pending"
}
}
}DRD generates multiple fingerprint types for each content item, ensuring detection even after modification, re-encoding, or paraphrasing.
| Fingerprint Type | Content Types | Resilience |
|---|---|---|
| Perceptual Hash (pHash) | Images, Video | Crops, compression, color shifts |
| Audio Fingerprint | Audio, Video | Re-encoding, speed changes, noise |
| Semantic Hash | Text, Documents | Paraphrasing, translation, summarization |
| Structural Hash | Code, Documents | Formatting, comments, variable renaming |
| Neural Embedding | All types | AI-generated derivatives, style transfer |
// Fingerprint result
{
"contentId": "019content-...",
"fingerprints": [
{
"type": "perceptual_hash",
"algorithm": "pHash-DCT-64",
"hash": "a3b4c5d6e7f80192",
"confidence": 0.99
},
{
"type": "neural_embedding",
"algorithm": "drd-embed-v3",
"vector": [0.123, -0.456, ...], // 768-dim
"confidence": 0.97
}
],
"globalMatches": [],
"processingTimeMs": 2340
}Configure pipeline behavior at the workspace level. Settings control which stages run, parallelism, retry policies, and quality thresholds.
PUT /api/v1/content/pipeline/config
{
"stages": {
"fingerprint": {
"enabled": true,
"algorithms": ["pHash-DCT-64", "drd-embed-v3"],
"parallelism": 4
},
"watermark": {
"enabled": true,
"defaultTypes": ["invisible", "forensic"],
"skipForContentTypes": ["code"]
},
"verify": {
"enabled": true,
"matchThreshold": 0.85,
"c2paValidation": true
},
"review": {
"enabled": true,
"autoApproveThreshold": 0.95,
"escalateOnMatch": true,
"maxQueueDepth": 500
}
},
"retry": {
"maxAttempts": 3,
"backoffMs": 1000,
"backoffMultiplier": 2
},
"notifications": {
"onFailure": ["webhook", "email"],
"onMatch": ["webhook", "slack"]
}
}The default pipeline processes up to 1,000 items per minute. Enterprise plans support up to 50,000 items per minute with dedicated pipeline workers. Contact sales for custom capacity requirements.
Track pipeline jobs in real-time. Each job exposes per-stage status, timing, and artifacts.
GET /api/v1/content/jobs/019job-a1b2c3d4
{
"ok": true,
"data": {
"jobId": "019job-a1b2c3d4",
"contentId": "019content-e5f6g7h8",
"status": "completed",
"stages": {
"ingestion": { "status": "completed", "durationMs": 230, "startedAt": "...T10:00:00.000Z" },
"fingerprint": { "status": "completed", "durationMs": 2340, "startedAt": "...T10:00:00.230Z" },
"watermark": { "status": "completed", "durationMs": 4120, "startedAt": "...T10:00:02.570Z" },
"verify": { "status": "completed", "durationMs": 1890, "startedAt": "...T10:00:06.690Z" },
"register": { "status": "completed", "durationMs": 340, "startedAt": "...T10:00:08.580Z" },
"review": { "status": "skipped", "reason": "auto_approved", "confidence": 0.98 }
},
"totalDurationMs": 8920,
"artifacts": {
"fingerprints": 2,
"watermarks": 2,
"provenanceEntry": "019prov-...",
"c2paManifest": "019c2pa-..."
}
}
}import { DRD } from '@drd/sdk';
const drd = new DRD({ apiKey: process.env.DRD_API_KEY });
// Submit content to pipeline
const item = await drd.contentPipeline.create({
title: 'Product Documentation v2',
sourceType: 'upload',
contentType: 'document',
metadata: { version: '2.0', author: 'team' },
});
// Create a processing rule
await drd.contentPipeline.createRule({
name: 'Auto-approve internal docs',
sourceType: 'upload',
action: 'auto_publish',
conditions: { contentType: 'document', internal: true },
enabled: true,
});
// Check pipeline stats
const stats = await drd.contentPipeline.getStats();
console.log(stats.byStatus);
console.log(stats.byStage);