Public & system API
Request access
Ask for an account. No API key required.
https://api.screamingdata.dev/v1/public/access_request- Authentication
- None
- Cost
- Free
- Body
- JSON object
Overview
Stores a request for an account. Every request is reviewed; when it is approved we e-mail you a secure one-time link to your API login and first key (the key itself is never sent in an e-mail). The Request access form uses this endpoint.
The body is a JSON object (an array holding one object is also accepted). Errors are reported for the request as a whole: invalid input returns HTTP 400 with 40501 and the field name; more than 5 requests per hour from one IP address return HTTP 429 with 40202.
Cost
Request
POST /v1/public/access_request with Content-Type: application/json.
Body fields
The request body is a JSON object with the fields below.
emailWork e-mail address; the secure link to your credentials is sent there.
- Max length254 characters
- Example
[email protected]
nameYour name.
- Max length200 characters
- Example
Jane Doe
companyCompany or project name.
- Max length200 characters
- Example
Acme Analytics
use_caseWhat you want to build and roughly how many products and marketplaces you need.
- Max length2000 characters
- Example
Daily BSR and price tracking for about 5,000 products on com, uk and de.
websiteSpam trap: leave it empty. Forms should render this field hidden from people.
- Max length500 characters
Request example
This endpoint does not need credentials.
curl --request POST \
--url "https://api.screamingdata.dev/ v1/ public/ access_request" \
--header "Content-Type: application/json" \
--data '{
"email": "[email protected]",
"name": "Jane Doe",
"company": "Acme Analytics",
"use_case": "Daily BSR and price tracking for about 5,000 products on com, uk and de."
}'import requests
response = requests.post(
"https://api.screamingdata.dev/ v1/ public/ access_request",
json={
"email": "[email protected]",
"name": "Jane Doe",
"company": "Acme Analytics",
"use_case": "Daily BSR and price tracking for about 5,000 products on com, uk and de.",
},
timeout=30,
)
data = response.json()
print(data["status_code"], data["status_message"], "cost:", data["cost"])
for task in data["tasks"]:
print(task["id"], task["status_code"], task["status_message"])const response = await fetch("https://api.screamingdata.dev/ v1/ public/ access_request", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
email: "[email protected]",
name: "Jane Doe",
company: "Acme Analytics",
use_case: "Daily BSR and price tracking for about 5,000 products on com, uk and de.",
}),
});
const data = await response.json();
console.log(data.status_code, data.status_message, "cost:", data.cost);
for (const task of data.tasks) {
console.log(task.id, task.status_code, task.status_message);
}Response
HTTP 200. The body is the standard response envelope; check status_code at the top level and in every task.
{
"version": "1.0.0",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.0158 sec.",
"cost": 0,
"tasks_count": 1,
"tasks_error": 0,
"tasks": [
{
"id": "09241305-2d8f-4c1a-9e6b-7a3c5e0d4f82",
"status_code": 20000,
"status_message": "Ok.",
"time": "0.0044 sec.",
"cost": 0,
"result_count": 1,
"path": [
"v1",
"public",
"access_request"
],
"data": {
"api": "public",
"function": "access_request"
},
"result": [
{
"id": 1287,
"status": "received",
"created_at": "2026-09-24T13:05:12Z"
}
]
}
]
}Example: Invalid e-mail address (HTTP 400)
{
"version": "1.0.0",
"status_code": 40501,
"status_message": "Invalid field: `email`.",
"time": "0.0012 sec.",
"cost": 0,
"tasks_count": 0,
"tasks_error": 0,
"tasks": []
}Example: Too many requests from this IP address (HTTP 429)
{
"version": "1.0.0",
"status_code": 40202,
"status_message": "Rate limit exceeded.",
"time": "0.0012 sec.",
"cost": 0,
"tasks_count": 0,
"tasks_error": 0,
"tasks": []
}Result fields
Each element of tasks[].result is a access request receipt. Confirms that the request was stored.
idId of the stored request.
statusAlways received.
created_atWhen the request was stored, ISO 8601 in UTC.
Status codes
Codes this endpoint can return, at the request or task level. See Status codes for handling advice.
| Code | Message | HTTP | Level | When |
|---|---|---|---|---|
| 20000 | Ok. | 200 | Request / task | The request, or the individual task, was processed successfully. |
| 40000 | Bad Request. | 400 / 200 | Request / task | The body is not valid JSON or does not have the expected shape (for example, not an array of task objects, or more than one task for live). Also returned with HTTP 413 for bodies larger than 1 MiB and with HTTP 405 for a wrong HTTP method. As a task-level code (HTTP 200) it means the task cannot be carried out as asked, for example because the account already has the maximum number of API keys or monitored products. |
| 40202 | Rate limit exceeded. | 429 | Request | Too many requests or tasks per minute for this account, or too many access requests from one IP address. The Retry-After header says how many seconds to wait. |
| 40501 | Invalid field: `<name>`. | 400 / 200 | Request / task | A field has a wrong type, format or value; the message names the field, for example "Invalid field: `priority`." |
| 50000 | Internal error. | 500 | Request | Unexpected server error. The request can be retried; contact support if it persists. |