Developer API Documentation
Welcome to the AssurePort Freemium Threat Intel API. This API exposes all 14 public reconnaissance and security inspection tools driving our online toolbox, enabling you to automate scans directly inside your CI/CD workflows, custom monitoring scripts, or security pipelines.
With a free developer account, you receive a personal API key providing 100 free requests per month across all endpoints, bypassing anonymous IP-based rate limiting.
Authentication
All programmatic API requests must carry your personal API Key passed as a Bearer token in the Authorization header:
Authorization: Bearer aprt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
To generate your API Key, sign in to your dashboard at app.assureport.com, navigate to Settings > API Keys, and click Generate Key.
Limits & Quotas
Our freemium layer enforces two levels of rate limits to guarantee system reliability:
- Monthly Quota: 100 requests per calendar month per tenant. Check your usage metrics in the developer dashboard.
- Burst Limit: 10 requests per minute per API key to prevent brief throttling or spamming.
API Endpoints
1. DNS Lookup
Query standard DNS records directly from global authoritative name servers.
| Parameter | Type | Required | Description |
|---|---|---|---|
| host | string | Yes | The domain name to resolve (e.g. example.com). |
2. TLS/SSL Logs
Query Certificate Transparency logs for public certificate mappings and expirations.
| Parameter | Type | Required | Description |
|---|---|---|---|
| host | string | Yes | The hostname to scan (e.g. example.com). |
3. HTTP Security Headers
Inspect HTTP headers and calculate security grade (A+ to F).
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The full destination URL to check (e.g. https://example.com). |
4. CryptoCheck Grader
Grade the cryptographic hygiene, TLS configurations, and post-quantum readiness.
| Parameter | Type | Required | Description |
|---|---|---|---|
| target | string | Yes | The hostname (without https://) to assess. |
5. Aggregated Threat Intelligence
Aggregate reputation lookups across Shodan, URLhaus, ThreatFox, and ASN listings.
| Parameter | Type | Required | Description |
|---|---|---|---|
| target | string | Yes | The domain name, IPv4, or email address to query. |
| type | string | Yes | Must be one of domain, ip, or email. |
Code Examples
Integrate our endpoints using your favorite programming language:
curl -X GET "https://api.assureport.com/api/intel/headers?url=https://example.com" \
-H "Authorization: Bearer aprt_YOUR_FREE_API_KEY"
Response
All endpoints return JSON. A successful GET /api/intel/headers responds 200 with a HeaderGrade object:
{
"url": "https://example.com",
"status": 200,
"scoreOutOf100": 82,
"letterGrade": "B",
"redirects": 0,
"headers": {
"strict-transport-security": "max-age=63072000; includeSubDomains; preload",
"content-security-policy": "default-src 'self'"
},
"checks": [
{ "name": "Strict-Transport-Security", "status": "pass", "value": "max-age=63072000; includeSubDomains; preload", "weight": 20, "notes": "Present with a long max-age." },
{ "name": "Content-Security-Policy", "status": "warn", "value": "default-src 'self'", "weight": 20, "notes": "Present, but no report-uri configured." }
]
}
| Field | Type | Description |
|---|---|---|
| url | string | The URL that was probed (final target after redirects). |
| status | number | HTTP status returned by the target. |
| scoreOutOf100 | number | Weighted security-header hygiene score. |
| letterGrade | string | One of A+ A B C D F, derived from scoreOutOf100. |
| redirects | number | Number of redirects followed before grading. |
| headers | object | Observed response headers (lowercased keys). |
| checks | array | Per-header evaluation: name, status (pass/warn/fail), value, weight, notes. |
Errors
Errors return a JSON body with an error code (and often a human-readable message) at the matching HTTP status:
| Status | error | Meaning |
|---|---|---|
| 400 | missing_url / missing_host | A required query parameter is absent. |
| 401 | unauthenticated | Missing or invalid Authorization: Bearer aprt_… key. |
| 403 | untrusted_origin | Request rejected as an off-platform spoofing attempt. |
| 429 | rate_limit / quota_exceeded | Per-minute burst or monthly quota exceeded. Burst responses include resetIn (seconds). |
| 500 | probe_failed | The target could not be reached or its response parsed. |
Parameter reference
Endpoints take one of three input parameters. The name reflects what the check actually needs — it is not interchangeable:
| Parameter | Format | Used by |
|---|---|---|
| url | Full URL incl. scheme — https://example.com | HTTP-probing checks (/intel/headers, /intel/tech, /intel/cookies) — the scheme and port are part of what is graded. |
| host | Bare hostname — example.com | DNS / TLS lookups (/intel/ssl, /intel/dns) — these resolve a name, not a URL. |
| type | domain | ip | email | Classification / reputation endpoints. |
Platform API — run real scans
Everything above is the free threat-intel surface. The Platform API drives the paid engines — dispatch a pentest, poll it, read findings, check your balance — with the same aprt_ key. It is the API behind the console, exposed for CI/CD, a scan step in your pipeline, or your own tooling.
| Requirement | Detail |
|---|---|
| Auth | Authorization: Bearer aprt_… |
| Scope | Dispatch needs a key carrying scan:write; registering targets needs asset:write. Keys default to both. Issue a narrower key from the console (Settings → API Keys) for least privilege — a scan:read-only key can poll but not start scans. |
| Billing | Each dispatch reserves scan credit up front (engine-priced); a successful scan consumes it, a failed scan releases the full reservation. |
Dispatch a scan
POST /api/scans — start a scan. Supply a URL target (web/api/github/email) or structured config (cloud/ad/sap). Returns 202 with a scanId to poll.
curl -X POST "https://api.assureport.com/api/scans" \
-H "Authorization: Bearer aprt_YOUR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 9f2c1e7a-..." \
-d '{ "engine": "web", "targetUrl": "https://example.com", "onboardingMode": "quick", "attestation": true }'
Idempotency (recommended). Send a unique Idempotency-Key header and reuse it verbatim if you retry (a timed-out request, an at-least-once queue). A retry with the same key replays the original scan instead of starting — and charging for — a second one. Keys are scoped to your tenant and cover a short retry window.
Successful 202 response:
{
"scanId": "b6571822-4232-4f5e-81b8-15a3c62c5855",
"status": "queued",
"reservation": { "id": "...", "credits": 6900 },
"gate": "quick_scan"
}
| Status | error | Meaning |
|---|---|---|
| 400 | bad_request | Missing/invalid field (e.g. unknown engine). |
| 402 | (preflight) | Insufficient scan credit for the engine — top up. |
| 403 | insufficient_scope | Key lacks scan:write. |
| 409 | idempotency_in_progress | A scan with this Idempotency-Key is still being created — retry shortly. |
| 200 | (idempotentReplay) | Replay of a prior identical dispatch — body carries the original scanId. |
| 503 | audit_log_unavailable | Immutable audit log temporarily down; nothing charged — retry. |
Poll, findings & balance
| Endpoint | Returns |
|---|---|
| GET /api/scans/:id | Scan status (queued → running → succeeded/failed) and progress. |
| GET /api/scans/:id/findings | Findings for a completed scan — severity, title, CWE/OWASP, and a reproducible PoC for every Critical/High. |
| GET /api/scans/:id/report?format=pdf | The rendered PDF report. |
| GET /api/balance | Current scan-credit balance for your tenant. |
All Platform endpoints are tenant-scoped: a key only ever sees its own tenant's scans, findings and balance.