排查问题时,请提供请求路径、去除敏感信息的参数、时间与时区、HTTP 状态和错误信息,不要发送包含完整 API Key 的截图或日志。
Whitzard Threat Intelligence API User Guide
Version: v1 · Updated: 2026-10-08
The Whitzard API provides AI security intelligence articles and policy records. Query data using filters or keep a local copy synchronized with the platform.
Request an API key from your platform contact before starting. Once you receive your key, follow the quick start below.
1. Available data
Resource
Purpose
Endpoint
Subscription catalog
Check available resources, latest publication dates and request quota
GET /api/v1/catalog
Intelligence articles
Query security incidents, vulnerabilities, offensive and defensive research, regulatory developments and industry news
GET /api/v1/articles
Policies and regulations
Query policies by region, source and publication date
GET /api/v1/policies
Incremental synchronization
Retrieve additions, updates and deletions for articles and policies
GET /api/v1/changes
By default, access begins one calendar month before the application date (inclusive) and includes later publications. The platform records the application date; if no separate date is recorded, the key activation date is used. For an application on 2026-10-08, the earliest publication date is 2026-09-08. For March 31, the boundary is the last day of February. This is a fixed start date, not a rolling 30-day window. Records with missing or invalid publication dates are excluded from default access.
To request full history, explain your research or business purpose, required date range, why the default range is insufficient, and how data will be stored and shared. The platform must review and approve the exception before access is granted. Submitting a reason does not grant access.
Do not publicly redistribute raw API data or bulk datasets (including on GitHub), or resell them, without the platform's written authorization.
Report subscriptions are not available; daily, weekly, monthly and industry reports are outside this API guide's scope.
“Subscription” means your application pulls data. It is not an email notification or webhook service. Data updates as collection and processing complete. An article's publication date may differ from the date it was collected.
2. Quick start
API base URL:
https://whitzard-intelligence.tech/api/v1
These commands are for Bash or zsh on macOS/Linux. Replace the placeholder with the API key you received separately, then run the following once in your current terminal:
A successful JSON response includes history (limited or all), applied_on (the recorded application date), and earliest_publish_date (the inclusive earliest permitted publication date, or null for approved full history). The server enforces this scope; query parameters cannot expand it.
The response lists articles and policies under resources. Each resource's latest value is its maximum publication date, which indicates data coverage; it is not a service health-check timestamp.
Append | python3 -m json.tool to format the output. If your curl version does not support --fail-with-body, use --fail instead.
Send exactly one X-API-Key header per request. Do not put your key in URLs, public repositories or browser frontend code. Call the API from your backend or scripts. Each customer should use their own key; do not share another customer's test key for production access.
3. Query intelligence articles
GET /api/v1/articles
All parameters are optional and can be combined. Records must match every supplied filter. Results are ordered by publication date, newest first, then by ID for equal dates.
Parameter
Description
Default or constraint
limit
Records per page
Default 50; range 1–200
offset
Number of records to skip
Default 0; range 0–1000000
id
Exact article ID
Maximum 2048 characters
risk_level
Risk level
One of critical, high, medium, low, info
content_type
Exact content type
Maximum 80 characters; common types below
is_track_f
Whether the record is Track F industry reference
true / false; omit to include both
category
Exact match for one threat tag
For example 提示注入 (prompt injection); maximum 100 characters
search
Substring search in title and summary
Maximum 200 characters
start_date
Publication date lower bound, inclusive
A valid date in strict YYYY-MM-DD format
end_date
Publication date upper bound, inclusive
A valid date in strict YYYY-MM-DD format
Risk levels represent critical, high, medium, low and informational risk. The API accepts info, but records with this level may not currently exist.
start_date must not be later than end_date. Dates cannot be Unix timestamps or date-time strings. Both risk_level and category accept one value only, not comma-separated lists. Custom sorting is not currently supported.
Common content_type values:
Type
Meaning
Type
Meaning
incident_report
Security incident
vulnerability
Vulnerability
research_paper
Research paper
jailbreak_technique
Jailbreak technique
alignment_safety
Alignment and safety
vendor_advisory
Vendor advisory
policy_regulation
Policy or regulation
regulatory_action
Regulatory action
legal_action
Legal action
security_ai_tool
AI security tool
industry_analysis
Industry analysis
industry_observation
Industry observation
ai_society_risk
AI societal risk
ecosystem_news
Ecosystem news
positive_development
Positive development
product_with_security
Product security
Content types and tags may expand over time. Use the values in actual records. Preserve unfamiliar values instead of discarding their records.
Use --data-urlencode for Chinese text, spaces or URL-shaped IDs. Exact-match tags use the original stored value, such as 提示注入; do not translate the filter value into English. Switching this guide's language does not translate API response data.
4. Query policies and regulations
GET /api/v1/policies
Parameter
Description
Default or constraint
limit
Records per page
Default 50; range 1–200
offset
Number of records to skip
Default 0; range 0–1000000
id
Exact policy ID
Maximum 2048 characters
area
Exact country or region
For example China; maximum 100 characters
source
Exact source identifier
Use the original source value from a record; maximum 100 characters
policies contains policy records. Regulatory news and legal events may also appear as intelligence articles in articles. Use both resources for broader regulatory coverage.
5. Responses and pagination
Articles and policies share the same pagination structure. This example illustrates the structure and omits some article fields:
Common article fields include title, summary, source URL, publication date, risk, entities, threat tags, response recommendations and related events. Fields may be null or empty arrays. Not every article has a vulnerability identifier, attack chain or response recommendation. Policies typically provide a title, summary and source link; do not assume full text is returned.
For default access, related_event_ids and cross_event_timeline are empty arrays to prevent cross-record expansions from exposing out-of-scope history. With full-history approval, related_event_ids identifies related coverage. Separate reports retain their own IDs. An empty field does not mean the absence of risk has been confirmed.
Page positions can shift while new data is written. Pagination is suitable for searching and browsing. To build a local database or synchronize continuously, use the changes endpoint described next.
6. Keep your system synchronized
GET /api/v1/changes
Parameter
Description
Default or constraint
after
Resume after this cursor
Default 0; non-negative integer; use the returned next_cursor
report_type is a reserved field, currently null. You can ignore it; it does not mean report subscriptions are available.
Implement synchronization as follows:
Use cursor 0 initially, then read your saved cursor for subsequent requests.
Identify local records by (resource, id). operation=upsert means insert or replace. operation=delete means delete the local record; data is null in this case.
Save next_cursor only after successfully processing the entire page. Prefer updating data and the cursor in the same local transaction.
If has_more is true, continue to the next page while respecting your quota. If false, wait approximately 60 seconds before polling again. Save the returned cursor even for an empty page.
Do not use the example cursor 123 as your initial cursor. Retrying a cursor can return duplicate records; replace or delete them by identity.
When using resource=articles or resource=policies, keep separate cursors for each filter configuration. Restart from 0 when changing resource; do not reuse cursors across filters.
This synchronizes the latest state, not the full change history. If a record changes several times between requests, only its final state may be returned. Older articles collected later and revisions to existing articles are included only within your authorized publication-date range. Publication-date filtering is not a substitute for incremental synchronization.
changed_at is in UTC and describes the synchronization record's change time, not the original publication date. Use revision/next_cursor to determine ordering.
7. Quotas and error handling
The current default is 60 requests per minute per API key and up to 200 records per request. Check rate_per_minute in catalog for your actual quota. Applications sharing a key also share its quota.
HTTP status
Common cause
Action
200
Success
Read data; an empty array is valid
401
Missing, invalid or revoked key, or duplicate key headers
Check the key and headers; contact the platform if the error persists
404
Path not found or endpoint unavailable
Check the URL; reports are currently unavailable
405
Unsupported method
Use GET
409
Cursor exceeds the current data version
Ask the platform whether resynchronization is needed; after confirmation, rebuild the local copy starting from 0
422
Invalid parameter format, range or combination
Read detail; check dates, pagination, enumerations and resource type
429
Request quota exceeded
Wait the number of seconds in Retry-After, then retry with the same cursor
503
Subscription service unconfigured or temporarily unavailable
Retry later; contact the platform if it persists
Use increasing retry delays for network timeouts and other 5xx errors. Avoid rapid retry loops. Do not advance the cursor when synchronization fails.
For troubleshooting, provide the request path, sanitized parameters, time and time zone, HTTP status and error message. Do not send screenshots or logs containing a complete API key.