Websites and pages
Personal sites, portfolios, small business pages, menus, landing pages, documentation. Anything that runs in a browser.
You do not need to understand websites, hosting or code. Three steps, once, and then you just talk to your AI.
Your AI needs to be able to send your website to us, not just write it. Assistants that run on your computer can; most chat windows in a browser tab cannot, and will say so rather than failing quietly.
Which AI can publish? — and what to do if yours cannot.
You already have one — every account is given a code when it is created. While it is still unused it sits in the green bar at the top of every page, with a button that copies the whole line you need. You can also find it any time on your codes page. It is a private password that lets your AI publish websites for you.
That bar disappears the first time your AI uses the code, and the code stops being shown anywhere after that. It keeps working — but if you lose it, it cannot be looked up again. Replace it with a new one and give that to your AI instead.
Paste this into Antigravity, Cursor, Claude Code, or ChatGPT with Codex — or whichever AI you use — replacing the capital letters with your own code. Not every assistant can publish; this page says which can.
Deploy my website with DashPloy.
Read https://dashploy.com/llms.txt first — it explains how to publish, how to
check what my plan allows before you build, and what to do if I do not have an
account yet.
Also available as a plain file at https://dashploy.com/start.txt
That is all your AI needs. It reads the instructions itself.
Describe what you want in your own words — for example, “make me a one-page site for my dog-walking business with prices and a contact form”. Your AI builds it, publishes it, and gives you a link like your-name.dashploy.app.
Want changes? Just ask. The same address updates within seconds.
Separately: the websites you publish are public, exactly like any other website. Never put passwords, private keys or personal information into a page — anyone can view it.
Personal sites, portfolios, small business pages, menus, landing pages, documentation. Anything that runs in a browser.
Calculators, games, charts, forms and small apps. These run on your visitor’s device, so they use none of your computing allowance — their files still count as requests, like any other page.
If your AI needs to keep secrets or talk to a database, it can publish a small server-side app too. This needs a verified account.
Every site gets a free address that works immediately, and you can put your own domain name on top of it whenever you like.
your-name.dashploy.app, on every plan including the free one, with its HTTPS certificate issued and renewed for you. Nothing to set up and nothing to pay.
Point it here by adding one record at whoever you bought it from. Ask your AI to connect it and it will give you the exact record to paste; your domains page shows the same thing, and tells you when it has gone live.
Ask your AI to search for one and it will come back with prices. We show what it costs to register and what it costs to renew, because those are often different. Buying it here means there is nothing to connect — it is pointed at your site for you.
1 on Free, 2 on Starter and 5 on Pro. The free address keeps working alongside them, so a link you have already shared never breaks.
All of it is done by asking your AI, in ordinary words. These are the ones where it is worth knowing what happens before you ask.
Every version you publish is kept. If a change goes wrong, ask your AI to put the previous one back — it is one step and nothing was thrown away. You can also do it yourself from the website’s page in your dashboard.
You can change the free address at any time. The old one stops working straight away, so any link you have already given out breaks — which is the one reason to think before doing it. A domain of your own is unaffected.
Deleting a website takes it offline and removes its files, the stored copies of its source, and its logs. It cannot be undone, so take a copy of anything you want to keep first.
The free plan does not expire and never asks for a card. Paid plans are for room rather than for features — see what each plan includes, or ask your AI to check what you have used.
Usually the code is wrong or was deleted. Create a new one and give your AI the new line.
You have used your monthly allowance. On the free plan the site stops serving until the period resets; on a paid plan it keeps serving more slowly for a while first. Nothing is deleted either way and everything comes back on its own — the reset date is on your dashboard, or you can move up a plan for more room.
Some things cannot run here, and your AI is told exactly what and what to use instead. Ask it to build it a different way.
Check the status page first. It says whether publishing, the dashboard and the addresses we serve are working right now, so you know whether to keep trying.
Ask your AI to check https://dashploy.com/api/v1/whoami — it explains exactly what is wrong with the account and what to do about it. Or send us a message and a person will answer.
If your assistant says publishing failed, it will usually name a code. Most of them are for it to act on rather than you — where that is the case, this says so plainly instead of asking you to fix something you cannot see.
| Code | What it means | What to do |
|---|---|---|
| EMPTY_PROJECT | No files were sent, so there was nothing to publish. | Ask your assistant to include every file the site needs, starting with index.html. |
| NO_ENTRYPOINT | The files arrived but nothing said which page to serve first. | A website needs an index.html at the top level; an app needs a fetch handler. Ask your assistant to add one. |
| NO_BUILD_SCRIPT | The project looks like it needs building, and no build command was found. | Ask your assistant to publish the finished files rather than the project that produces them. |
| INVALID_PACKAGE_JSON | The package.json could not be read. | Ask your assistant to check it for a mistake and publish again. |
| PROJECT_TOO_LARGE | The site is over the file count or size your plan allows. | Remove large images and unused files, or move up a plan for more room. The limits are on the pricing page. |
| MISSING_DEPENDENCY | The code uses a package that is not available here, or a file that was not sent. | Only a fixed list of packages can be used. Your assistant is told which, and can rewrite using one of them. |
| DEPENDENCY_INSTALL_FAILED | A package could not be prepared. | Nothing for you to change. Ask your assistant to try again, or to build it without that package. |
| LOCKFILE_MISMATCH | The versions the project asks for do not match the ones available. | Ask your assistant to use the versions we provide rather than pinning its own. |
| UNSUPPORTED_RUNTIME_API | The code uses something the environment your site runs in does not have. | Common in code written for an ordinary server. Your assistant is told exactly what to use instead — ask it to build it that way. |
| NODE_VERSION_MISMATCH | The project asks for a version of Node we do not run. | Ask your assistant to drop the version requirement. |
| BUNDLE_FAILED | The code could not be assembled into something publishable. | Nothing for you to change. Ask your assistant to read the error it was given and publish again. |
| TYPE_ERROR | The code did not pass its own checks. | Nothing for you to change. Ask your assistant to fix the reported error. |
| SYNTAX_ERROR | There is a mistake in the code, and we can name the file and line. | Nothing for you to change. Ask your assistant to fix it — it is told where. |
| MISSING_ENV | The app expects a secret or setting that has not been given to it. | Add it under Secrets on your website’s page, or ask your assistant to set it for you. |
| CPU_LIMIT_EXCEEDED | A single request did too much work and was stopped. | Ask your assistant to do the heavy work once and store the result, rather than on every visit. |
| MEMORY_LIMIT_EXCEEDED | A request tried to hold too much in memory at once. | Usually a very large file being read whole. Ask your assistant to handle it in pieces. |
| BOOT_TIMEOUT | The app took too long to start. | Ask your assistant to move work out of the start-up path and into the request that needs it. |
| UNCAUGHT_EXCEPTION | The app stopped with an error while answering a request. | Your website’s page shows the recent logs. Ask your assistant to read them and fix the cause. |
| UNAUTHENTICATED | No code was sent, so we do not know whose account this is. | Your assistant needs your code. Copy it from the bar at the top of the page and paste it in again. |
| INVALID_TOKEN | The code sent is wrong, was replaced, or has been revoked. | Create a new code on your codes page and give your assistant that one instead. |
| NOT_FOUND | The website or version named does not exist on your account. | Check the name. Your assistant can list your websites to find the right one. |
| NAME_TAKEN | That address is already in use — by one of your sites, or by somebody else’s. | Addresses are unique across the whole platform. Pick another name, or publish to the site that is there on purpose. |
| INVALID_NAME | That name cannot be used as a web address. | Letters, numbers and hyphens only. Some names are reserved, and names that impersonate a known brand are refused. |
| DELETE_INCOMPLETE | A deletion stopped partway, so the site may still be reachable. | Ask your assistant to run the delete again. It is safe to repeat and it finishes the job. |
| EGRESS_BLOCKED | Your app tried to reach an address it is not allowed to reach. | Apps may only contact an approved list of services. Ask your assistant which are allowed, or email support to ask for one to be added. |
| QUOTA_EXCEEDED | You have reached one of your plan’s limits for this period. | The message names which one. It resets at the start of the next period, or you can move up a plan for more room. |
| SUSPENDED | This website, or the account, has been stopped. | Email support and we will explain why and what to do. Nothing has been deleted. |
| CONTENT_REFUSED | An automated check would not publish this content, so nothing was published. | Your existing site, if you have one, is untouched — this stopped the new version going up. The check looks for pages that imitate a well-known company or collect passwords. If that is not what you built, email support and a person will look at it; we aim to answer the same working day. |
| UNKNOWN | Something failed and we could not identify it precisely. | Worth telling us about — email support with what you were doing. Trying again sometimes works. |
This is the address to give your app:
https://dashploy.com/mcp
You do not need a code for this. Your app will send you here to sign in, and connecting it to your account happens automatically — there is nothing to copy, paste, or keep safe.
Some chat apps let you connect an outside service to them. Connecting DashPloy gives the assistant the one ability it was missing — the ability to send your website somewhere — and after that it can publish from inside the conversation, with nothing installed on your computer.
For somebody who has never opened a terminal this is the easiest route there is. Add a connector wherever your app lists them, using the address above. Which apps support this.
Where the app asks how it should sign in, choose the sign-in option rather than the one for a key or a password. You will land on a DashPloy page listing exactly what the app is asking to do, with a Connect button, and that is the whole setup. You can withdraw it again from Connected apps whenever you like.
If your app has no sign-in option and asks for a key or a header instead, use a header called X-API-Key with your code as its value. Prefer that name over Authorization, even where the app offers both: some apps keep the second one for their own sign-in and quietly discard yours, and the connection still looks perfectly fine afterwards — it says it is connected right up until the first attempt to publish fails.
Either way, to check it worked, ask the assistant to “call whoami on DashPloy”. If it comes back with your email address and your plan, the connection is genuinely good.
Under the covers it is the Model Context Protocol, over Streamable HTTP, with your code as an Authorization: Bearer or X-API-Key header. It is a wrapper over the same API — same account, same limits, same websites — so anything you can do one way you can do the other. The full tool list is in the API reference, and your assistant can read /llms.txt for the rest.
There is a full reference at https://dashploy.com/api-reference — every endpoint, every field, a sample response and the error codes each one can return. It is generated from the same catalogue the API is checked against, so it cannot describe a call that does not exist.
It is a plain HTTP API: no SDK, no CLI, nothing to install. Sites are served from *.dashploy.app, a separate domain from this one, so nothing anyone publishes can affect the platform.
curl -X POST https://dashploy.com/api/v1/deploy \
-H "Authorization: Bearer $DASHPLOY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"project":"my-site","files":[
{"path":"index.html","content":"<h1>Hello</h1>"}]}'
That call creates the project. Running it a second time against a project that already has a website is refused with 409 unless you add "replace": true — publishing replaces everything that is there, so it has to be asked for. Nothing is lost either way: every previous version is kept and can be restored.
If you are wiring up an assistant rather than writing the calls yourself, /llms.txt is the same API written for a model to read directly.