Skip to main content
New: 190 SEO checks now available. See what's new

API Reference

Build powerful integrations with the Dr Urls REST API. Manage projects, trigger scans, and access SEO data programmatically.

Authentication

Secure API access with Bearer tokens

Every request must carry a valid API key in the Authorization header, using the Bearer scheme. Keys look like drseo_sk_… and are created from Settings → API Keys in the dashboard. The full key is shown once, at creation— we only ever store a hash of it, so it cannot be recovered later. If you lose it, revoke the key and create a new one.

Request Header
Authorization: Bearer drseo_sk_your_key_here
Example Request
curl https://drurls.com/api/v1/projects \
  -H "Authorization: Bearer drseo_sk_your_key_here"

Scope of a key

  • A key is bound to the organization it was created in and can only ever read and write that organization’s data.
  • Keys authenticate /api/v1/* data endpoints only. They are not accepted on the dashboard, on sign-in flows, or on internal platform-administration endpoints.
  • A key acts with your organization’s owner-level permissions, so treat it as a full-access credential: store it in a secret manager, never commit it, and revoke it immediately if it leaks.
  • Keys can be given an expiry at creation. Expired and revoked keys stop working immediately.

Base URL

All requests use HTTPS

https://drurls.com/api/v1

Endpoints

Available API endpoints

MethodEndpoint
POST/check
GET/projects
POST/projects
GET/scans
POST/scans
GET/scans/:id
GET/scans/:id/issues

Rate Limits

Fair usage limits for all plans

Authenticated requests are metered per API key, not per IP address, so your traffic is never affected by other customers sharing an egress address. A separate, wider network-level limit applies per source IP.

100
Requests per minute, per API key
200
Requests per minute, per source IP
60s
Window length, and Retry-After value

How limits are reported. Exceeding the per-IP limit returns 429 RATE_LIMIT_EXCEEDED with a Retry-After: 60 header. Exceeding the per-key limit currently causes the key to stop authenticating for the remainder of the 60-second window, so those requests return 401 UNAUTHORIZED rather than 429. If a key that worked a moment ago starts returning 401 under heavy load, back off for a minute before assuming it is invalid.

Error Responses

What the API returns when a request fails

StatusCodeWhen it happens
401UNAUTHORIZEDMissing, malformed, unknown, expired or revoked API key — or the per-key rate limit was exceeded.
403FORBIDDENThe key is valid but not permitted to perform this action, or the endpoint does not accept API keys at all.
404NOT_FOUNDThe resource does not exist, or belongs to a different organization than the key.
422VALIDATION_ERRORThe request body failed validation. A details field describes the offending fields.
429RATE_LIMIT_EXCEEDEDToo many requests from your IP address. Retry after the Retry-After interval.
500INTERNAL_ERRORSomething went wrong on our side. Retry with backoff and quote the X-Request-Id header if it persists.
Error Response
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}

Every response — success or error — carries an X-Request-Id header. Include it when contacting support so we can trace the exact request.

Response Format

All responses are returned in JSON format with a consistent structure. Successful responses include a data field. Error responses include an error field with a message and code.

Success Response
{
  "data": {
    "id": "scan_abc123",
    "status": "completed",
    "pagesScanned": 142,
    "issuesFound": 23,
    "score": 87,
    "createdAt": "2026-03-15T10:30:00Z"
  },
  "meta": {
    "requestId": "req_xyz789"
  }
}

SDKs & Libraries

Node.js SDK

Coming soon

Official Node.js client for the Dr Urls API with TypeScript support.

npm install @drurls/sdk

Python SDK

Coming soon

Official Python client for the Dr Urls API with async support.

pip install drurls

Ready to integrate?

Generate your API key from the dashboard and start building.

Get your API key