Authentication

All data endpoints require an API key. Include it in the x-api-key header with every request.

curl https://datatap.polsia.app/api/v1/companies \
  -H "x-api-key: dtap_live_your_key_here"

Get your API key by creating a free account. Your key starts with dtap_live_.

Quick Start

Here's how to fetch technology companies in San Francisco:

cURL

curl "https://datatap.polsia.app/api/v1/companies?industry=Technology&city=San+Francisco&limit=5" \
  -H "x-api-key: YOUR_KEY"

JavaScript

const response = await fetch(
  'https://datatap.polsia.app/api/v1/companies?industry=Technology&limit=5',
  { headers: { 'x-api-key': 'YOUR_KEY' } }
);
const { data, pagination } = await response.json();
// data = [{ name, domain, industry, employee_count, ... }]

Python

import requests

response = requests.get(
  "https://datatap.polsia.app/api/v1/companies",
  headers={"x-api-key": "YOUR_KEY"},
  params={"industry": "Technology", "limit": 5}
)
data = response.json()

List Companies

GET /api/v1/companies

Search and filter the company database. Returns paginated results.

Query Parameters

ParameterTypeDescription
qstringSearch by name, domain, or description
industrystringFilter by industry (e.g., "Technology", "Healthcare")
sub_industrystringFilter by sub-industry (e.g., "SaaS", "Fintech")
citystringFilter by city
statestringFilter by state (2-letter code, e.g., "CA")
min_employeesintegerMinimum employee count
max_employeesintegerMaximum employee count
founded_afterintegerFounded year minimum (e.g., 2020)
founded_beforeintegerFounded year maximum
fundingstringFilter by funding (e.g., "Series A")
tagsstringFilter by tag (e.g., "startup", "enterprise")
sortstringSort field: name, employee_count, founded_year, city, industry
orderstringSort order: asc (default) or desc
pageintegerPage number (default: 1)
limitintegerResults per page, max 100 (default: 25)

Response

{
  "data": [
    {
      "id": 1,
      "name": "CloudForge",
      "domain": "cloudforge.io",
      "industry": "Technology",
      "sub_industry": "SaaS",
      "employee_count": 127,
      "employee_range": "51-200",
      "revenue_estimate": "$5M-$25M",
      "founded_year": 2019,
      "city": "San Francisco",
      "state": "CA",
      "country": "United States",
      "description": "CloudForge is a SaaS company...",
      "tech_stack": ["React", "Node.js"],
      "funding_total": "Series A"
    }
  ],
  "pagination": { "page": 1, "limit": 25, "total": 247, "pages": 10 },
  "meta": { "api_calls_remaining": 950, "plan": "starter" }
}

Get Company

GET /api/v1/companies/:id

Get a single company by ID.

Response

{
  "data": { /* full company object */ },
  "meta": { "api_calls_remaining": 949, "plan": "starter" }
}

List Industries

GET /api/v1/industries

Get all industries and their company counts.

Response

{
  "data": [
    { "industry": "Technology", "company_count": "87" },
    { "industry": "Healthcare", "company_count": "42" }
  ]
}

Dataset Stats

GET /api/v1/stats

Public endpoint. No authentication required. Returns dataset overview.

Rate Limits

Rate limits are applied per API key. Exceeding limits returns 429 Too Many Requests.

Response headers include:

  • X-RateLimit-Limit — Monthly call limit
  • X-RateLimit-Remaining — Calls remaining
  • X-RateLimit-Plan — Your current plan
PlanMonthly CallsPer MinutePrice
Free10010$0
Starter1,00030$49/mo
Growth10,000100$149/mo
Scale1,000,000500$299/mo

Error Codes

StatusMeaning
200Success
401Invalid or missing API key
404Resource not found
429Rate limit exceeded (per-minute or monthly)
500Internal server error

Error Response Format

{
  "error": "Monthly API limit reached. Upgrade your plan for more calls.",
  "usage": { "used": 1000, "limit": 1000, "plan": "starter" },
  "upgrade_url": "/pricing"
}

Pagination

All list endpoints return paginated results. Use page and limit query parameters to control pagination.

The response includes a pagination object with page, limit, total, pages, and has_more fields.

Maximum limit is 100 records per request.