AdScaled API
Public API of the AdScaled digital agency (www.adscaled.media): send a project inquiry to the team.
AdScaled is a Czech digital agency (performance marketing, web and app development, branding, photo and video). This API backs the contact form on www.adscaled.media. Use sendContactInquiry only when a real person has asked you to contact AdScaled on their behalf and has given you their name, e-mail and message. It e-mails the team and sends a confirmation to the given address. Do not use it for testing, marketing or bulk messages.
No authentication is required. Requests from browsers are limited to the AdScaled origins (CORS); server-side clients without an Origin header are accepted. Every rate-limited response carries the IETF RateLimit-Policy and RateLimit headers (draft-ietf-httpapi-ratelimit-headers-11); a 429 also carries Retry-After in seconds. All /api paths share a limit of 300 requests per minute per client IP; the contact endpoint allows 5 messages per 15 minutes per client IP.
- OpenAPI 3.1 specification: https://api.adscaled.media/api/openapi.json
- Base URL: https://api.adscaled.media
- Agency website: https://www.adscaled.media/en/ (agent guide: https://www.adscaled.media/llms.txt)
Endpoints
GET /api/health (getHealth)
Check API availability. Returns ok: true when the API is running and whether e-mail delivery for the contact endpoint is configured.
Example:
curl https://api.adscaled.media/api/health
Responses:
200: The API is running.429: Rate limit exceeded. Wait forRetry-Afterseconds before the next request.
POST /api/contact (sendContactInquiry)
Send a project inquiry to AdScaled. E-mails the inquiry to the AdScaled team (Reply-To is the sender) and sends the sender a confirmation e-mail in the chosen language. Only call this on behalf of a real person who asked to contact AdScaled. The team usually answers within one business day. Text fields are trimmed and truncated to the stated maximum length.
Request body (JSON):
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
name | string | yes | min 2, max 100 | Full name of the person or company contact. |
email | string | yes | email, max 160 | Reply address; the confirmation e-mail is sent here. |
phone | string | no | max 40 | Optional phone number with 9–15 digits. |
subject | string | no | max 100 | Optional topic, e.g. "Website", "Performance marketing", "Branding". |
message | string | yes | min 10, max 5000 | What the person needs: project, goals, timeline, budget. |
language | string | no | one of cs, en, ru, de, fr | Language of the response messages and of the confirmation e-mail. |
website | string | no | max 0 | Spam trap. Must be omitted or empty. |
Example:
curl -X POST https://api.adscaled.media/api/contact \
-H 'Content-Type: application/json' \
-d '{"name":"Jana Nováková","email":"jana@example.com","phone":"+420 777 123 456","subject":"Website","message":"We need a new website for our e-shop and Meta Ads campaigns. Budget around 150k CZK.","language":"en"}'
Responses:
200: The inquiry was delivered to the team.400: Validation failed (name shorter than 2 characters, invalid e-mail or phone, message shorter than 10 characters) or the body is not valid JSON.403: The request came from a browser origin that is not allowed.413: The JSON body is larger than 32 kB.429: Rate limit exceeded. Wait forRetry-Afterseconds before the next request.502: The e-mail could not be sent. Ask the person to write to contact@adscaled.media directly.503: E-mail delivery is temporarily not configured. Ask the person to write to contact@adscaled.media directly.
Rate limits
Responses carry RateLimit-Policy and RateLimit headers (draft-ietf-httpapi-ratelimit-headers-11). Each policy is listed by name:
flood: 300 requests per 60 s per client IP, shared by all/apipaths.contact: 5 inquiries per 900 s per client IP.
Example: RateLimit-Policy: "flood";q=300;w=60, "contact";q=5;w=900 and RateLimit: "flood";r=297;t=41, "contact";r=4;t=900 (q quota, w window in seconds, r remaining, t seconds until the quota resets). A 429 response adds Retry-After in seconds.
Authentication
None. Browser requests are accepted only from the AdScaled origins (CORS); server-side requests without an Origin header are accepted.