FAST DEV 24
For web studios and AI agents

Get a price and order a website through the API

One address on our site returns a fixed price and takes an order in JSON. Call it from your own system, from a bot, or from an AI agent, at the same price as on the studio page.

curl "https://fast24.dev/api/studio-order?type=website&pages=5&languages=2&booking=1&currency=EUR"

200 OK
{
  "quote": {
    "amount": 125,
    "currency": "EUR",
    "total_pages": 10,
    "breakdown": { "base": 75, "booking": 50 }
  },
  "project": {
    "type": "website", "pages": 5, "languages": 2, "booking": true, …
  },
  "delivery": "Live within 24 hours of our email confirming we have everything: the filled-in brief, texts or a brief for them, a logo, photos and contact details.",
  "payment": "The studio pays only after seeing the finished site. If it does not suit you, you owe nothing.",
  …
}

Shortened API response to a price request

How ordering works

From your studio's agent to a finished site

  1. Your studio's agent

    Your agent or your own program calls the address and gets the price at once.

  2. Brief questions

    The agent asks your client the brief questions: what the business does and what a visitor should do.

  3. The order

    POST returns an order number and the same price. We confirm by email or Telegram.

  4. Site in 24 hours

    Ready 24 hours from our email confirming we have everything.

WNR Group vacancies page on a laptop and one vacancy on a phone
wnrgroup.work: our client's live site

This page is a code reference. The studio price list and the rules are on the studio page.

For an AI agent

Instructions for the agent

A text your studio hands to its AI agent: how to get the price, which brief questions to ask and how to place the order.

Instructions
Instructions for your AI agent You are acting for a web studio at fast24.dev. One address does everything: https://fast24.dev/api/studio-order. Full machine description: https://fast24.dev/openapi.json. Full instructions for a program: https://fast24.dev/studios/api/agent.md. 1. Price. GET the address with the project as parameters (type, pages, languages, currency, and the add-ons) to get the fixed price. Nothing is saved by this call. 2. Interview the client. GET the address with brief=1 and lang set to the client's own language to get the studio's brief questions, most important first, each marked whether it is required to start the site. Ask the client one or two questions at a time, in that order, in the client's own language, not in the language of this instruction. Never invent an answer for the client: an empty or "not sure" answer is a real answer, pass it on as it is. If two of the client's own answers conflict (say, two different cities), do not pick one: leave the field out and tell the studio about the conflict. 3. Order. POST the studio's contact (email or Telegram), the project, and the brief answers you collected, keyed by question id. The answer gives an order number and the fixed price, which does not change afterwards. 4. If something is still missing. The order is still received even when the brief is not complete: the answer lists exactly which questions are still needed. Ask the client those, then send them again with the same order number: the new answers are added to what is already on file, and you repeat this until nothing is missing. 5. Test first. Add "dry_run": true to check a request exactly like a real one (same price, same missing list) without creating an order and without any message going out. Use it while you are still drafting, then send the real request without it. 6. What to tell the client. Only what the address itself says: the site goes live on a private preview link within 24 hours after the content arrives; the studio pays only after seeing the finished site, and owes nothing if it does not suit them; after payment the studio gets plain HTML, CSS and JavaScript files with no admin panel, and up to 3 rounds of changes are included within a week after delivery. 7. What you must not do. Do not promise a different price or a different deadline than the address returns. Do not send a real order without the studio's own go-ahead: it is the studio's decision, not yours. Do not answer the brief questions yourself when the client has not answered them.
What the address does

One address, two calls

GET

Get a price

Send the project as parameters in the address. Get the price back. Nothing is saved.

POST

Place an order

Send the project as JSON. Get an order number and the same price back. We confirm it by email or Telegram.

Address

GET https://fast24.dev/api/studio-order

Called with no parameters, it returns a short description of the service. With brief=1 it returns the brief questions; with any other parameter, a price.

curl, no parameters

curl "https://fast24.dev/api/studio-order"

Answer

{
  "service": "fast24.dev order API for web studios and AI agents",
  "quote": "GET /api/studio-order?type=website&pages=5&languages=2&booking=1&currency=EUR",
  "order": "POST /api/studio-order with JSON {studio, project, currency}",
  "spec": "https://fast24.dev/openapi.json",
  "delivery": "Live within 24 hours of our email confirming we have everything: the filled-in brief, texts or a brief for them, a logo, photos and contact details.",
  "payment": "The studio pays only after seeing the finished site. If it does not suit you, you owe nothing.",
  "edits": "Plain HTML, CSS and JavaScript files, no admin panel: after payment you get the source files and change the text directly in them, which any developer can do. Up to 3 rounds of changes are included within a week after delivery, each done within 24 hours, plus 7 days of free fixes for anything broken in our work.",
  "terms": "https://fast24.dev/terms",
  "studios": "https://fast24.dev/studios/"
}

curl, with a price

curl "https://fast24.dev/api/studio-order?type=website&pages=5&languages=2&booking=1&currency=EUR"

JavaScript

const answer = await fetch('https://fast24.dev/api/studio-order?type=website&pages=5&languages=2&booking=1&currency=EUR');
const price = await answer.json();
console.log(price.quote.amount, price.quote.currency); // 125 EUR

Answer

{
  "quote": {
    "amount": 125,
    "currency": "EUR",
    "total_pages": 10,
    "breakdown": { "base": 75, "booking": 50 }
  },
  "project": {
    "type": "website", "pages": 5, "languages": 2,
    "payments": false, "subscriptions": false, "booking": true,
    "accounts": false, "extra_roles": 0, "integrations": 0
  },
  "delivery": "Live within 24 hours of our email confirming we have everything: the filled-in brief, texts or a brief for them, a logo, photos and contact details.",
  "payment": "The studio pays only after seeing the finished site. If it does not suit you, you owe nothing.",
  "edits": "Plain HTML, CSS and JavaScript files, no admin panel: after payment you get the source files and change the text directly in them, which any developer can do. Up to 3 rounds of changes are included within a week after delivery, each done within 24 hours, plus 7 days of free fixes for anything broken in our work.",
  "terms": "https://fast24.dev/terms",
  "studios": "https://fast24.dev/studios/"
}
Parameters

Query parameters for GET

ParameterValuesDefault
typelanding, website, shop, redesignwebsite
pages1–5001
languages1–201
paymentson / offoff
subscriptionson / offoff
bookingon / offoff
accountson / offoff
extra_roles0–100
integrations0–100
currencyEUR, USD, PLNEUR
brief1: the brief questions instead of a price—
langlanguage of the brief questions: en, ru, pl, de, fr, es, pt, byen

In EUR and USD the price is the same number; in PLN it is 4 times larger. For an on/off parameter, send 1, true, yes or on to turn it on, and leave it out for off.

Order

POST https://fast24.dev/api/studio-order

Send the project as JSON. studio.email or studio.telegram is required, so we can confirm the order.

curl

curl -X POST https://fast24.dev/api/studio-order \
  -H "Content-Type: application/json" \
  -d '{"studio":{"name":"Studio","email":"studio@example.com"},"project":{"type":"website","pages":5,"languages":2,"booking":true,"business":"A dental clinic with two dentists","goal":"Book a visit by phone or through the form"},"currency":"EUR"}'

Answer, order received (201)

{
  "order_id": "FD-MUKEOJ1N-BBC8",
  "status": "received",
  "price": {
    "amount": 125,
    "currency": "EUR",
    "total_pages": 10,
    "breakdown": { "base": 75, "booking": 50 }
  },
  "project": {
    "type": "website", "pages": 5, "languages": 2,
    "payments": false, "subscriptions": false, "booking": true,
    "accounts": false, "extra_roles": 0, "integrations": 0
  },
  "next": "We confirm the order and ask for the content within 15 minutes, by email or Telegram.",
  "delivery": "Live within 24 hours of our email confirming we have everything: the filled-in brief, texts or a brief for them, a logo, photos and contact details.",
  "payment": "The studio pays only after seeing the finished site. If it does not suit you, you owe nothing.",
  "edits": "Plain HTML, CSS and JavaScript files, no admin panel: after payment you get the source files and change the text directly in them, which any developer can do. Up to 3 rounds of changes are included within a week after delivery, each done within 24 hours, plus 7 days of free fixes for anything broken in our work.",
  "terms": "https://fast24.dev/terms",
  "studios": "https://fast24.dev/studios/"
}
Fields

What goes in, what comes back

studio

FieldRequiredNote
namenostudio or agency name
websitenostudio or agency website
emailat least one of the twoso we can confirm the order
telegramat least one of the twoso we can confirm the order

project

FieldValuesDefault
typelanding, website, shop, redesignwebsite
pages1–5001
languages1–201
paymentson / offoff
subscriptionson / offoff
bookingon / offoff
accountson / offoff
extra_roles0–100
integrations0–100
businesstext: what the end client's business does—
goaltext: what a visitor should do on the site—
content_readyon / offoff
notestext: anything else worth telling us—

Other fields of the request

FieldMeaning
briefthe brief answers, keyed by question id from brief_questions
langlanguage of the missing list in the answer, en by default
order_idnumber of an order already received: the new brief answers are added to it, and studio and project are then optional
dry_runtrue: checks the request without creating an order or sending any message

The answer to an order

FieldMeaning
order_idthe order number, for example FD-MUKEOJ1N-BBC8
status"received": order received, brief complete; "brief_incomplete": order received, what is missing is in missing; "brief_complete": the answers sent with order_id completed the brief
missingthe brief questions still needed to start; empty when nothing is missing
dry_runtrue only when dry_run was set in the request
pricethe same object as quote in the GET answer: amount, currency, total_pages, breakdown
projectthe project, with the defaults filled in
nextwhat happens next, in one line
deliverythe delivery condition, the same wording as on the studio page
paymentthe payment condition, the same wording as on the studio page
editsthe edits condition, the same wording as on the studio page
termsa link to the contract terms
studiosa link to the studio price list
Errors

What can come back instead of a price

CodeErrorWhen
400{ "error": "Send JSON: {studio, project, currency}" }the body is not valid JSON
400{ "error": "studio.email or studio.telegram is required, so we can confirm the order" }neither studio.email nor studio.telegram is filled in
413{ "error": "Request too large" }the request body is over 20,000 bytes
429{ "error": "Too many orders from this address, try again in an hour" }more than 10 orders from one IP address within an hour
404{ "error": "order_id not found" }there is no order with the order_id sent to add brief answers
Limits

What the address allows

  • Open to any site: the address answers requests from any origin (CORS).
  • Methods: GET, POST and OPTIONS.
  • A POST body up to 20,000 bytes.
  • Up to 10 orders per hour from one IP address; GET has no such limit.
After the order

What happens after a POST

The order gets a number and the fixed price straight in the answer. We save it the same way as a request sent through the site's own form, then confirm it by email or Telegram and ask for the content within 15 minutes.

The delivery, payment and edit conditions in every answer are the same as on the studio page.

Full description

For a program or an AI agent

The full machine-readable description of both calls is in openapi.json.

Questions about connecting: [email protected].