DATPAQ Web Scraping API
Headless scrape, batch, crawl, and site-map extraction
Headless scrape, batch, crawl, and site-map extraction
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/datpaq-com:datpaq-com-web-scraping-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Datpaq Com Web Scraping API
version: 1.1.0
contact:
name: Datpaq Support
url: https://datpaq.com
license:
name: Proprietary
description: 'Operations tagged Web Scraping across 2 of this provider''s published API definitions: datpaq-com.yaml, datpaq-com-openapi.yaml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
security:
- ApiKeyHeader: []
- ApiKeyQuery: []
tags:
- name: Web Scraping
description: Headless scrape, batch, crawl, and site-map extraction
paths:
/web-scraping/scrape:
post:
tags:
- Web Scraping
operationId: webScrapingScrape
summary: Synchronously scrape a public URL
description: Returns page content in the requested formats. SSRF-guarded. Default format is markdown with Readability main-content extraction enabled.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
example: https://example.com/article
formats:
type: array
items:
type: string
enum:
- markdown
- html
- rawHtml
- links
- images
- screenshot
default:
- markdown
onlyMainContent:
type: boolean
default: true
waitUntil:
type: string
enum:
- load
- domcontentloaded
- networkidle0
- networkidle2
default: domcontentloaded
waitFor:
type: integer
minimum: 0
maximum: 10000
default: 0
includeTags:
type: array
items:
type: string
excludeTags:
type: array
items:
type: string
example:
url: https://example.com/article
formats:
- markdown
responses:
'200':
description: Scraped page content
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
success: true
url: https://example.com/article
title: Article Title
text: Plain text content...
excerpt: Summary...
byline: null
siteName: Example
length: 1200
content: <article>...</article>
markdown: '# Article Title
Plain text content...'
metadata:
timingMs: 3500
cached: false
correlationId: req_abc123
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
/web-scraping/batch/scrape:
post:
tags:
- Web Scraping
operationId: webScrapingBatchStart
summary: Start an async batch scrape job
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- urls
properties:
urls:
type: array
items:
type: string
format: uri
minItems: 1
maxItems: 100
formats:
type: array
items:
type: string
example:
urls:
- https://a.example.com
- https://b.example.com
formats:
- markdown
responses:
'202':
description: Batch job accepted
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
id: batch_01HXYZ
status: queued
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
/web-scraping/batch/scrape/{id}:
get:
tags:
- Web Scraping
operationId: webScrapingBatchStatus
summary: Poll an async batch scrape job
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: skip
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
responses:
'200':
description: Batch job status and results
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
id: batch_01HXYZ
status: completed
completed: 2
failed: 0
results:
- url: https://a.example.com
title: A
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
/web-scraping/crawl:
post:
tags:
- Web Scraping
operationId: webScrapingCrawlStart
summary: Start an async site crawl
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
limit:
type: integer
maxDepth:
type: integer
includePaths:
type: array
items:
type: string
excludePaths:
type: array
items:
type: string
example:
url: https://example.com
limit: 25
maxDepth: 2
responses:
'202':
description: Crawl job accepted
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
id: crawl_01HXYZ
status: queued
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
/web-scraping/crawl/{id}:
get:
tags:
- Web Scraping
operationId: webScrapingCrawlStatus
summary: Poll an async crawl job
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: Crawl progress and page results
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
id: crawl_01HXYZ
status: completed
pages: 12
results:
- url: https://example.com
title: Home
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
/web-scraping/map:
post:
tags:
- Web Scraping
operationId: webScrapingMap
summary: Discover links reachable from a URL
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
example:
url: https://example.com
responses:
'200':
description: Discovered URL map
content:
application/json:
schema:
$ref: '#/components/schemas/GenericSuccess'
example:
url: https://example.com
links:
- https://example.com/about
- https://example.com/docs
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/ServiceUnavailable'
servers:
- url: https://datpaq.com/api/v1
description: Production
- url: https://staging.datpaq.com/api/v1
description: Staging
components:
schemas:
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message
example: Invalid API key
correlationId:
type: string
description: Request tracking identifier for support
example: abc123-def456-789ghi
service:
type: string
description: Service name that produced the error
example: ip-geolocation
GenericSuccess:
type: object
description: Standard success envelope. The data property structure varies by endpoint.
properties:
correlationId:
type: string
description: Request tracking identifier
example: abc123-def456
data:
type: object
description: Response payload (structure varies by endpoint)
cached:
type: boolean
description: Whether the response was served from cache
example: false
responses:
NotFound:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
BadRequest:
description: Bad request — missing or invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
RateLimited:
description: Rate limit exceeded — retry after the indicated period
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
ServiceUnavailable:
description: Service temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
Unauthorized:
description: Unauthorized — missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
securitySchemes:
ApiKeyHeader:
type: apiKey
in: header
name: x-api-key
description: API key passed via x-api-key request header
ApiKeyQuery:
type: apiKey
in: query
name: api_key
description: API key passed as api_key query parameter
x-refined-from:
- datpaq-com.yaml
- datpaq-com-openapi.yaml