WebDMCA

Developer API

File takedowns, read everything,
get pushed the moment things move.

One JSON API for the whole service: create takedown cases, poll detections and case status, manage your compliance inbox, and subscribe to signed webhooks for real-time pushes. Free with any account, including the free plan; cases you file are billed at the standard per-case rates.

8
Endpoints (v1)
5
Webhook event types
60/min
Rate limit per key
$0
API access cost

Authentication

Bearer keys, hashed at rest

Create up to 5 keys in account settings (revocable any time; shown once, stored as SHA-256 hashes). Rate limit: 60 requests/min per key.

Authorization: Bearer wd_live_<your-key>

Takedowns

File and track cases

POST/api/v1/complaints

Create a takedown case with the same rules and pricing as the web form, including the free annual takedown for verified badge holders. The case is created AWAITING_PAYMENT; complete payment at the returned payUrl and filing starts.

curl -X POST https://webdmca.com/api/v1/complaints \ -H "Authorization: Bearer $WD_KEY" \ -H "content-type: application/json" \ -d '{ "type": "PHOTO", "title": "Stolen portfolio images", "description": "My photography portfolio copied onto a wallpaper aggregator...", "infringingUrls": "https://pirate-site.com/img1, https://pirate-site.com/img2", "originalContentUrl": "https://mysite.com/portfolio", "urgency": "standard", "contactName": "Jane Doe", "contactAddress": "1 Main St, Springfield", "contactCountry": "US", "signature": "Jane Doe", "swornGoodFaith": true, "swornAccuracy": true }' → 201 { "id": "cmt…", "status": "AWAITING_PAYMENT", "priceCents": 9900, "currency": "usd", "badgeFree": false, "payUrl": "/account/complaints_pay/cmt…" }

type: VIDEO | MUSIC | PHOTO | SOFTWARE | WRITING | GAME | ART | OTHER · urgency: quicksend | standard | urgent · one site and up to 25 URLs per case, same as the web form. The sworn fields and signature are the §512(c)(3) statements; they must be true.

GET/api/v1/complaints

Your takedown cases: id, type, title, status, urgency, created and delivered timestamps. Poll status to track progress, or subscribe to the complaint.status_changed webhook instead.

Monitoring & compliance

Read the rest of your account

GET/api/v1/detections

Monitoring detections newest first: URL, match score, source, status, matched asset, and the SHA-256 evidence hash. Query param: limit (1–100, default 50).

GET/api/v1/me

Account snapshot: email, active protection and compliance plans, credit balance.

GET/api/v1/compliance/notices

Compliance intake inbox (Compliant Pro/ISP plans): inbound §512(c)(3) notices with all fields and counter-notice state.

POST/api/v1/compliance/notices/:id/status

Update a notice's status (actioned | rejected | forwarded) from your abuse tooling.

Webhooks

Push, don't poll

Register up to 10 endpoints, subscribe to event types, and receive signed POSTs the moment things happen. Retries: 3 attempts with backoff; endpoints failing 10 consecutive deliveries are auto-disabled.

POST/api/v1/webhooks

Register an endpoint (https recommended, public hosts only). The per-endpoint secret is shown once, in the creation response.

curl -X POST https://webdmca.com/api/v1/webhooks \ -H "Authorization: Bearer $WD_KEY" \ -H "content-type: application/json" \ -d '{"url": "https://api.yoursite.com/hooks/webdmca", "events": ["detection.created", "complaint.status_changed"]}' → 201 { "id": "wh…", "secret": "whsec_…", … }
GET/api/v1/webhooks

List your endpoints with delivery health (last delivery, last status, consecutive fails).

DELETE/api/v1/webhooks/:id

Remove an endpoint.

Verifying deliveries

Every delivery carries three headers. Reject deliveries with stale timestamps (over 5 minutes old) and invalid signatures:

X-WebDMCA-Event: complaint.status_changed X-WebDMCA-Timestamp: 1725417601 X-WebDMCA-Signature: sha256=<hex> # signature = HMAC_SHA256(secret, # `${timestamp}.${rawBody}`) # verify against the raw request body!
detection.createdcomplaint.createdcomplaint.status_changednotice.creatednotice.counter_filed

Pricing

API access is free. Cases cost the same as everywhere else.

Included at no cost

  • All read endpoints, webhooks, and API keys on every plan, free tier included
  • Compliance endpoints on Compliant Pro/ISP (the plans that receive notices)
  • No per-call fees, no API surcharge, 60 req/min per key

Cases filed via API

  • Quick Send $49 · Standard $99 · Urgent $199, identical to the web form
  • Volume tiers apply automatically: 10% off at 10+ lifetime notices, 17% off at 25+ ($89 / $82 on Standard)
  • All four channels in every case: site, host, registrar and search de-listing, no premium tiers

Notes & limits

The fine print, up front

  • Creating complaints via API shares the web form's daily limit (10/day) and validation, including the one-site-per-case and 25-URL rules
  • Payments complete in the browser at the payUrl; card data never touches the API
  • Webhook URLs must be public http(s) hosts; localhost and private ranges are rejected
  • Everything is versioned under /api/v1, breaking changes get a v2, not a surprise

Your enforcement pipeline, one key away.

Generate a key, file a test case, point a webhook at your inbox, and let the pushes arrive.