Overview
Authentication
API Key
Pass your key in the X-API-Key header on every request. Get a free key at datascreeniq.com/signup — 500K rows/month free.
X-API-Key: dsiq_live_...
Error codes
| Status | Code | Meaning |
|---|---|---|
| 200 | — | Success |
| 400 | INVALID_JSON · MISSING_SOURCE · INVALID_ROWS | Bad payload |
| 401 | AUTH_INVALID | Missing or invalid API key |
| 413 | PAYLOAD_TOO_LARGE | Over 10,000 rows per request |
| 429 | PLAN_LIMIT_EXCEEDED · RATE_LIMITED | Monthly row limit or rate limit hit |
Screening
Screen a payload
Submit rows for quality screening. Returns PASS, WARN, or BLOCK with a full issue breakdown, schema map with confidence scores, and drift events. Also accepts
text/csv with X-Source header.
POST
/v1/screen
Core endpoint
Request body
| Field | Type | Description | |
|---|---|---|---|
| source | string | required | Pipeline or table name — used for baseline tracking |
| rows | array | required | Array of row objects. Max 10,000 per request. |
| options.full_scan | boolean | optional | Analyze all rows instead of sampling. Default: false. |
curl
curl -X POST https://api.datascreeniq.com/v1/screen \
-H "Content-Type: application/json" \
-H "X-API-Key: dsiq_live_..." \
-d '{"source":"orders","rows":[
{"order_id":"ORD-001","amount":99.50,"email":"[email protected]"},
{"order_id":"ORD-002","amount":"broken","email":null}
]}'
-H "Content-Type: application/json" \
-H "X-API-Key: dsiq_live_..." \
-d '{"source":"orders","rows":[
{"order_id":"ORD-001","amount":99.50,"email":"[email protected]"},
{"order_id":"ORD-002","amount":"broken","email":null}
]}'
Response — 200 OK
json
{
"request_id": "batch_8fb151d5771f0cec",
"status": "BLOCK",
"health_score": 0.34,
"decision": {
"action": "BLOCK",
"reason": "Type mismatch in: 'amount'; High null rate in 'email' (50%)"
},
"schema": {
"order_id": { "type": "string", "confidence": 1.0 },
"amount": { "type": "mixed", "confidence": 0.5 },
"email": { "type": "string", "confidence": 1.0 }
},
"schema_fingerprint": "59b492b0e8ab0ca0...",
"issues": {
"type_mismatches": {
"amount": { "expected": "number", "found": ["string"], "sample_value": "broken", "severity": "critical" }
},
"null_rates": {
"email": { "actual": 0.50, "threshold": 0.30, "severity": "critical" }
}
},
"stats": { "rows_received": 2, "rows_sampled": 2, "source": "orders" },
"latency_ms": 38,
"timestamp": "2026-03-31T10:00:00.000Z"
}
"request_id": "batch_8fb151d5771f0cec",
"status": "BLOCK",
"health_score": 0.34,
"decision": {
"action": "BLOCK",
"reason": "Type mismatch in: 'amount'; High null rate in 'email' (50%)"
},
"schema": {
"order_id": { "type": "string", "confidence": 1.0 },
"amount": { "type": "mixed", "confidence": 0.5 },
"email": { "type": "string", "confidence": 1.0 }
},
"schema_fingerprint": "59b492b0e8ab0ca0...",
"issues": {
"type_mismatches": {
"amount": { "expected": "number", "found": ["string"], "sample_value": "broken", "severity": "critical" }
},
"null_rates": {
"email": { "actual": 0.50, "threshold": 0.30, "severity": "critical" }
}
},
"stats": { "rows_received": 2, "rows_sampled": 2, "source": "orders" },
"latency_ms": 38,
"timestamp": "2026-03-31T10:00:00.000Z"
}
Reset baseline
Clears the schema baseline for a source. The next screen call builds a fresh baseline. Use after fixing data quality issues in your pipeline.
DELETE
/v1/schema/{source}
Reset one source
curl
curl -X DELETE https://api.datascreeniq.com/v1/schema/orders -H "X-API-Key: dsiq_live_..."
json — 200 OK
{ "ok": true, "reset": "orders", "message": "Baseline reset for source \"orders\"" }
DELETE
/v1/schema
Reset all sources
curl
curl -X DELETE https://api.datascreeniq.com/v1/schema -H "X-API-Key: dsiq_live_..."
Jobs
List jobs
Returns recent screening jobs sorted newest first.
GET
/v1/jobs
?limit=50&source=orders
Query parameters
| Param | Type | Default | Description |
|---|---|---|---|
| limit | integer | 50 | Max jobs to return (max 200) |
| source | string | — | Filter by source name |
Aggregate statistics
Returns quality stats grouped by source for a given time window. Used by the dashboard overview.
GET
/v1/stats
?days=7
| Param | Type | Default | Description |
|---|---|---|---|
| days | integer | 30 | Days to aggregate (max 365) |
Keys
API keys
List, create, and delete API keys. The full key is only shown at creation — store it immediately.
GET
/v1/keys
List all keys
curl
curl https://api.datascreeniq.com/v1/keys -H "X-API-Key: dsiq_live_..."
POST
/v1/keys
Create a key
json — 201 Created
{ "key": "dsiq_live_...", "id": "key_abc123", "name": "Production" }
DELETE
/v1/keys/{id}
Delete a key
curl
curl -X DELETE https://api.datascreeniq.com/v1/keys/key_abc123 -H "X-API-Key: dsiq_live_..."
Billing
Billing
Get current plan and usage, or create a Stripe checkout session.
GET
/v1/billing
Plan & usage
json — 200 OK
{ "plan": "starter", "rowsProcessed": 142000, "periodEnd": "2026-03-31T23:59:59.000Z" }
POST
/v1/billing/checkout
Create checkout
| Field | Values |
|---|---|
| tier | starter · growth · scale |
json — 200 OK
{ "url": "https://checkout.stripe.com/..." }
System
Health check
No authentication required. Returns API status and version.
GET
/v1/health
No auth required
json — 200 OK
{ "status": "ok", "version": "1.0.0" }