FastDOL Bulk Data Pipelines
Operational workflow for data engineers and platform teams: batch employer lookups, CSV upload matching, async bulk export jobs, usage telemetry, and API-key lifecycle management — including key rotation with 48-hour grace.
Run with Naftiko
FastDOLBulk DataData PipelinesBatchExportAPI Key ManagementDevOps
What You Can Do
POST
Batch lookup
— Submit up to 100 employer queries in one batch.
/v1/batch-lookups
POST
Upload csv
— Upload a CSV (up to 500 rows / 5MB) for matching.
/v1/csv-uploads
POST
Create export
— Create an async bulk export job (up to 100,000 rows).
/v1/exports
GET
Get export
— Get an export job's status.
/v1/exports
GET
Download export
— Download a completed export.
/v1/exports
POST
Log lookup
— Log a downstream lookup event.
/v1/usage
POST
Claim pdf report
— Claim a PDF compliance report.
/v1/usage
GET
Get usage
— Per-key quota and usage state.
/v1/usage
GET
List keys
— List API keys.
/v1/api-keys
POST
Create key
— Create a new API key.
/v1/api-keys
POST
Rotate key
— Rotate a key with a 48-hour grace period.
/v1/api-keys
DELETE
Revoke key
— Revoke an API key.
/v1/api-keys
GET
Get plan
— Get the current account plan.
/v1/account
DELETE
Delete account
— Delete the FastDOL account.
/v1/account
GET
Sitemap employers
— Employer sitemap.
/v1/sitemaps
GET
Health
— Liveness check.
/v1/health
GET
Health detail
— Detailed health and dependency status.
/v1/health
APIs Used
fastdol
Capability Spec
naftiko: "1.0.0-alpha1"
info:
label: "FastDOL Bulk Data Pipelines"
description: "Operational workflow for data engineers and platform teams: batch employer lookups, CSV upload matching, async bulk export jobs, usage telemetry, and API-key lifecycle management — including key rotation with 48-hour grace."
tags:
- FastDOL
- Bulk Data
- Data Pipelines
- Batch
- Export
- API Key Management
- DevOps
created: "2026-05-16"
modified: "2026-05-16"
binds:
- namespace: env
keys:
FASTDOL_API_KEY: FASTDOL_API_KEY
capability:
consumes:
- import: fastdol
location: ./shared/fastdol.yaml
exposes:
- type: rest
port: 8081
namespace: bulk-data-pipelines-api
description: "Unified REST API for batch lookup, async export, usage telemetry, and API-key management."
resources:
- path: /v1/batch-lookups
name: batch-lookups
description: "Batch employer lookups."
operations:
- method: POST
name: batch-lookup
description: "Submit up to 100 employer queries in one batch."
call: "fastdol.batch-lookup"
with:
items: "rest.items"
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/csv-uploads
name: csv-uploads
description: "Bulk CSV upload."
operations:
- method: POST
name: upload-csv
description: "Upload a CSV (up to 500 rows / 5MB) for matching."
call: "fastdol.upload-csv"
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/exports
name: exports
description: "Async bulk export jobs (Enterprise)."
operations:
- method: POST
name: create-export
description: "Create an async bulk export job (up to 100,000 rows)."
call: "fastdol.create-export"
with:
filters: "rest.filters"
format: "rest.format"
outputParameters: [ { type: object, mapping: "$." } ]
- method: GET
name: get-export
description: "Get an export job's status."
call: "fastdol.get-export"
with: { job_id: "rest.job_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- method: GET
name: download-export
description: "Download a completed export."
call: "fastdol.download-export"
with: { job_id: "rest.job_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/usage
name: usage
description: "Usage telemetry and PDF report claim."
operations:
- method: POST
name: log-lookup
description: "Log a downstream lookup event."
call: "fastdol.log-lookup"
with:
employer_id: "rest.employer_id"
context: "rest.context"
outputParameters: [ { type: object, mapping: "$." } ]
- method: POST
name: claim-pdf-report
description: "Claim a PDF compliance report."
call: "fastdol.claim-pdf-report"
with: { employer_id: "rest.employer_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- method: GET
name: get-usage
description: "Per-key quota and usage state."
call: "fastdol.get-usage"
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/api-keys
name: api-keys
description: "API key lifecycle."
operations:
- method: GET
name: list-keys
description: "List API keys."
call: "fastdol.list-keys"
outputParameters: [ { type: object, mapping: "$." } ]
- method: POST
name: create-key
description: "Create a new API key."
call: "fastdol.create-key"
with: { label: "rest.label" }
outputParameters: [ { type: object, mapping: "$." } ]
- method: POST
name: rotate-key
description: "Rotate a key with a 48-hour grace period."
call: "fastdol.rotate-key"
with: { key_id: "rest.key_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- method: DELETE
name: revoke-key
description: "Revoke an API key."
call: "fastdol.revoke-key"
with: { key_id: "rest.key_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/account
name: account
description: "Account plan and lifecycle."
operations:
- method: GET
name: get-plan
description: "Get the current account plan."
call: "fastdol.get-plan"
outputParameters: [ { type: object, mapping: "$." } ]
- method: DELETE
name: delete-account
description: "Delete the FastDOL account."
call: "fastdol.delete-account"
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/sitemaps
name: sitemaps
description: "SEO sitemap feeds."
operations:
- method: GET
name: sitemap-employers
description: "Employer sitemap."
call: "fastdol.sitemap-employers"
outputParameters: [ { type: object, mapping: "$." } ]
- path: /v1/health
name: health
description: "Service health."
operations:
- method: GET
name: health
description: "Liveness check."
call: "fastdol.health"
outputParameters: [ { type: object, mapping: "$." } ]
- method: GET
name: health-detail
description: "Detailed health and dependency status."
call: "fastdol.health-detail"
outputParameters: [ { type: object, mapping: "$." } ]
- type: mcp
port: 9091
namespace: bulk-data-pipelines-mcp
transport: http
description: "MCP server for AI-assisted batch, export, and key-management workflows."
tools:
- name: batch-lookup
description: "Submit up to 100 employer queries in a single batch."
hints: { readOnly: true, openWorld: true }
call: "fastdol.batch-lookup"
with: { items: "tools.items" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: upload-csv
description: "Upload a CSV (up to 500 rows) for bulk match."
hints: { readOnly: false, destructive: false, idempotent: false }
call: "fastdol.upload-csv"
outputParameters: [ { type: object, mapping: "$." } ]
- name: create-export
description: "Create an async bulk export job."
hints: { readOnly: false, destructive: false, idempotent: false }
call: "fastdol.create-export"
with:
filters: "tools.filters"
format: "tools.format"
outputParameters: [ { type: object, mapping: "$." } ]
- name: get-export
description: "Get an export job's status."
hints: { readOnly: true, openWorld: true }
call: "fastdol.get-export"
with: { job_id: "tools.job_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: download-export
description: "Download a completed export."
hints: { readOnly: true, openWorld: true }
call: "fastdol.download-export"
with: { job_id: "tools.job_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: log-lookup
description: "Log a downstream lookup for attribution."
hints: { readOnly: false, destructive: false, idempotent: false }
call: "fastdol.log-lookup"
with:
employer_id: "tools.employer_id"
context: "tools.context"
outputParameters: [ { type: object, mapping: "$." } ]
- name: claim-pdf-report
description: "Claim a PDF compliance report."
hints: { readOnly: false, destructive: false, idempotent: false }
call: "fastdol.claim-pdf-report"
with: { employer_id: "tools.employer_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: get-usage
description: "Get current per-key quota and usage."
hints: { readOnly: true, openWorld: true }
call: "fastdol.get-usage"
outputParameters: [ { type: object, mapping: "$." } ]
- name: list-keys
description: "List API keys."
hints: { readOnly: true, openWorld: true }
call: "fastdol.list-keys"
outputParameters: [ { type: object, mapping: "$." } ]
- name: create-key
description: "Create a new API key."
hints: { readOnly: false, destructive: false, idempotent: false }
call: "fastdol.create-key"
with: { label: "tools.label" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: rotate-key
description: "Rotate an API key with 48-hour grace."
hints: { readOnly: false, destructive: false, idempotent: true }
call: "fastdol.rotate-key"
with: { key_id: "tools.key_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: revoke-key
description: "Revoke an API key."
hints: { readOnly: false, destructive: true, idempotent: true }
call: "fastdol.revoke-key"
with: { key_id: "tools.key_id" }
outputParameters: [ { type: object, mapping: "$." } ]
- name: get-plan
description: "Get the current account plan and quota."
hints: { readOnly: true, openWorld: true }
call: "fastdol.get-plan"
outputParameters: [ { type: object, mapping: "$." } ]
- name: sitemap-employers
description: "Crawler-friendly employer sitemap."
hints: { readOnly: true, openWorld: true }
call: "fastdol.sitemap-employers"
outputParameters: [ { type: object, mapping: "$." } ]
- name: health-detail
description: "Detailed service health and dependencies."
hints: { readOnly: true, openWorld: true }
call: "fastdol.health-detail"
outputParameters: [ { type: object, mapping: "$." } ]