REST + MCP · API v1

API Documentation

Retrieve semantically relevant text passages and tables from SEC filings. The public base URL is https://api.secregate.com.

Current dataset

Endpoint capabilities and available filing coverage are separate. Coverage is expanded progressively; an empty result does not imply that the requested filing is available in the current public dataset.

Authentication

Direct REST requests use an API key in the X-Secregate-Key header. API keys are not Bearer tokens. OAuth Bearer authentication is available for MCP clients.

REST authentication
X-Secregate-Key: YOUR_API_KEY

Quick start: submit → poll → result

01

Submit

POST /v1/search returns 202 by default.

02

Poll

Follow Location or poll the returned request ID.

03

Consume

Read response after status becomes completed.

1 · POST /v1/search
curl -i https://api.secregate.com/v1/search \
  -H "X-Secregate-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: research-2026-08-17-001" \
  -d '{
    "query": "What factors affected data center revenue growth?",
    "ciks": ["0001045810"],
    "form_types": ["10-K", "10-Q"],
    "date_from": "2022-01-01",
    "date_to": "2026-08-17",
    "result_types": ["text", "table"],
    "top_k_by_type": {"text": 5, "table": 3}
  }'
202 Accepted
HTTP/1.1 202 Accepted
Location: /v1/requests/7c3f92b0-04fa-4dac-9281-a55247431d34
Retry-After: 1

{
  "request_id": "7c3f92b0-04fa-4dac-9281-a55247431d34",
  "status": "queued",
  "poll": "/v1/requests/7c3f92b0-04fa-4dac-9281-a55247431d34",
  "billing": {"status": "pending", "credits": 3, "cost": 0.003, "currency": "EUR"}
}

To wait briefly in the initial connection, add Prefer: wait=N. The server caps N at 30 seconds. If processing is still underway, the response remains 202.

2 · Poll request
curl https://api.secregate.com/v1/requests/7c3f92b0-04fa-4dac-9281-a55247431d34 \
  -H "X-Secregate-Key: YOUR_API_KEY"
3 · Completed request
{
  "request_id": "7c3f92b0-04fa-4dac-9281-a55247431d34",
  "status": "completed",
  "priority": 10000,
  "received_at": "2026-08-17T12:00:00Z",
  "processing_started_at": "2026-08-17T12:00:00.190Z",
  "completed_at": "2026-08-17T12:00:02.060Z",
  "billing": {"status": "charged", "credits": 3, "cost": 0.003, "currency": "EUR"},
  "response": {
    "search_mode": "company_comparison",
    "company_count": 1,
    "results_by_company": [{
      "cik": "0001045810",
      "ticker": "NVDA",
      "company_name": "NVIDIA CORP",
      "text_results": [{
        "content_type": "text",
        "accession_number": "example-accession-number",
        "content": "Relevant filing passage…",
        "score": 0.89
      }],
      "table_results": [{
        "content_type": "table",
        "table_representation": "ixbrl",
        "table": {"representation": "ixbrl", "status": "resolved", "data": {"columns": [], "rows": []}}
      }]
    }]
  },
  "error": null
}

Search fields

Omit both ticker and ciks to search the complete currently indexed dataset. With several CIKs, results are separated by company and each requested result type receives its configured quota per company.

ParameterTypeRequiredDescription
querystringyesSearch string, question or longer prompt (1–20,000 characters).
tickerstringoptionalOne company ticker. Cannot be combined with ciks.
ciksstring[]optionalOne to 25 SEC CIKs. Values are normalized to ten digits. Cannot be combined with ticker.
top_kintegeroptionalOverall result limit from 1–50. Default: 5.
form_typesstring[]optionalFiling types to search. Semantic retrieval currently supports 10-K, 10-Q and 8-K.
accession_numbersstring[]optionalRestrict retrieval to specific SEC accession numbers.
date_fromstringoptionalInclusive start date in YYYY-MM-DD format.
date_tostringoptionalInclusive end date in YYYY-MM-DD format.
result_typesstring[]optionalAny combination of text and table. Default: both.
top_k_by_typeobjectoptionalIndependent text/table quotas, each from 1–50. Example: {"text": 5, "table": 3}.

Table results

When a table can be resolved from iXBRL, table_representation is ixbrl and the structured columns, rows, facts, contexts and units are returned in table.data. If resolved iXBRL is unavailable, the API returns the filing-derived table as table_markdown and in the Markdown table envelope instead of returning an empty table payload.

Markdown fallback example
{
  "content_type": "table",
  "table_representation": "markdown",
  "table_data": null,
  "table_markdown": "| Metric | 2025 | 2024 |\n|---|---:|---:|\n| Revenue | … | … |",
  "table": {
    "representation": "markdown",
    "status": "html_fallback",
    "reason": "no_resolved_ixbrl",
    "markdown": "| Metric | 2025 | 2024 |\n|---|---:|---:|\n| Revenue | … | … |"
  }
}

Character offsets and the parameters include_metadata and include_positions are not part of the current contract.

Asynchronous requests and batches

POST/v1/requests

Explicitly submit one asynchronous semantic search. It always responds with 202.

GET/v1/requests/{request_id}

Read queued, processing, completed, failed or cancelled state and the completed response.

DELETE/v1/requests/{request_id}

Cancel a request that has not reached a terminal state.

POST/v1/requests/batch

Submit 1–100 logical searches in one HTTP request. Every item receives its own request ID and charge.

GET/v1/requests/batch/{batch_id}

Poll aggregate counts and all individual request states.

POST /v1/requests/batch
{
  "requests": [
    {"query": "Data center revenue", "ticker": "NVDA", "top_k": 5},
    {"query": "Export control risks", "ticker": "NVDA", "result_types": ["text"], "top_k": 10}
  ]
}

Use Idempotency-Key for safe retries. Reusing a key for the same customer returns the existing request or batch and avoids duplicate processing and billing. Batch items may additionally define their own idempotency_key.

MCP integration

Secregate exposes an MCP integration for semantic SEC search. MCP uses OAuth Bearer authentication and the same centralized retrieval infrastructure as REST. Client registration and authorization details are provided through the service's OAuth metadata; integration-specific values should be taken from that metadata rather than hard-coded.

Pricing

One usage creditEUR 0.001
Direct structured or document retrieval1 credit
Semantic search, including up to 3 companies3 credits
Each additional company, from company 4+ 1 credit
JSON as reported (Pro only; upcoming)10 credits
Maximum companies per search25

Every successful logical batch item is billed independently. Failed or cancelled semantic searches are not charged. Free includes a one-time 1,000-credit welcome grant and a 300-credit floor every 24 hours; Pro includes a 3,000-credit floor every 24 hours.

Status and errors

202Accepted; use Location or poll to retrieve the result.
400Invalid fields, filters, company selection or unsupported request.
401Missing or invalid credentials.
402Insufficient Secregate credits.
429Rate limit exceeded; honor Retry-After.
502Downstream search processing failed.
503Service or database capacity temporarily unavailable; honor Retry-After.

Observed performance

In the current deployment, an isolated sustained test at 10 requests per second measured approximately 2 seconds median server-side processing latency and below 3 seconds at p95. Public network time is additional. This is an observed measurement under normal test load, not a latency SLA; network path, filters, provider latency and concurrent load can change results.

Access

To request credentials, contact nithard@portrak.com.