API Documentation

Base URL: https://siftforms.com/api/v1

Authentication

Include your API key in the Authorization header:

Authorization: Bearer iq_live_xxxxxxxxxxxxx

Key types:

  • iq_pub_ — Public keys for widget embedding. Can only call extract + confirm.
  • iq_live_ — Secret keys for API access. Full access to all endpoints.

POST /extract

Text Extraction

Extract structured data from plain text.

curl -X POST https://siftforms.com/api/v1/extract \
  -H "Authorization: Bearer iq_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hi, I\'m Sarah Chen, email sarah@gmail.com. I have a billing issue with account AC-2847.",
    "schema_id": "your-schema-uuid"
  }'

Response

{
  "submission_id": "uuid",
  "status": "completed",
  "fields": {
    "customer_name": { "value": "Sarah Chen", "confidence": 0.98 },
    "email": { "value": "sarah@gmail.com", "confidence": 0.99 },
    "account_id": { "value": "AC-2847", "confidence": 0.95 },
    "issue_type": { "value": "Billing", "confidence": 0.92 }
  },
  "extras": {
    "sentiment": "frustrated"
  },
  "missing_required": [],
  "overall_confidence": 0.96,
  "warnings": []
}

POST /extract/file

File Extraction

Upload an image or PDF. Sift extracts text via AI vision, then maps to your schema.

curl -X POST https://siftforms.com/api/v1/extract/file \
  -H "Authorization: Bearer iq_live_xxx" \
  -F "file=@receipt.jpg" \
  -F "schema_id=your-schema-uuid"

Accepted: JPEG, PNG, GIF, WebP, PDF. Max 10MB.

POST /submissions/confirm

Follow-up

Complete a pending submission by providing missing required fields.

curl -X POST https://siftforms.com/api/v1/submissions/confirm \
  -H "Authorization: Bearer iq_pub_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "submission_id": "uuid",
    "fields": { "email": "sarah@gmail.com" }
  }'

GET /submissions

List

List submissions with optional filters.

GET /submissions?schema_id=uuid&status=completed&from=2024-01-01&page=1&limit=50

Requires a iq_live_ key.

GET /submissions/:id

Detail

Get full submission detail including extracted data, extras, and warnings.

Requires a iq_live_ key.

Webhooks

Configure webhooks in the dashboard. Payloads are signed with HMAC-SHA256.

// Verify signature
const crypto = require('crypto');
const signature = crypto
  .createHmac('sha256', webhookSecret)
  .update(rawBody)
  .digest('hex');
const isValid = signature === headers['x-sift-signature'];

Retries: 0s, 30s, 2min, 10min, 1hr. Auto-disables after 10 consecutive failures.