Docs / Piedmont AI
Piedmont AI
An OpenAI-compatible LLM endpoint on a GPU we own and run. Get a token, call it with curl or the OpenAI SDK, use it with OpenClaw, and compare the Free and Pro limits.
Overview
Piedmont AI is a free LLM endpoint included with every Piedmont account. It speaks the OpenAI Chat Completions API — POST /v1/chat/completions (streaming supported) and GET /v1/models — so OpenAI-compatible clients such as the OpenAI SDKs, LangChain, LiteLLM and chat apps like Open WebUI can use it by changing the base URL and API key.
The models run on a GPU we own and operate. There's no per-token billing: the Free plan costs nothing, and Pro is a flat $7.99/mo.
What's supported
- The
messages,stream,max_tokens(capped at your plan's maximum output),temperatureandtop_pfields are passed to the model. Other request fields are ignored. - Your plan decides the model — Llama 3.2 3B on Free, Llama 3.1 8B on Pro. The
modelfield in a request is ignored. - Function/tool calling, embeddings, images and audio aren't supported.
Quick Start
1. Get your token
Sign in and visit /ai. Your personal token, starting with pai_, is created the first time you open the page. Treat it like a password — if it leaks, click Rotate token there; the old token stops working immediately.
2. Use it
curl https://ai.piedmonthosting.com/v1/chat/completions \
-H "Authorization: Bearer pai_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2:3b",
"messages": [{"role":"user","content":"Hello"}]
}'from openai import OpenAI
client = OpenAI(
base_url="https://ai.piedmonthosting.com/v1",
api_key="pai_YOUR_TOKEN",
)
resp = client.chat.completions.create(
model="llama3.2:3b",
messages=[{"role":"user","content":"Hello"}],
)
print(resp.choices[0].message.content)Most SDKs require a model value, so the examples send one, but your plan picks the model either way. Add "stream": true to receive the reply as server-sent events. Successful responses carry X-Piedmont-AI-Tier and X-Piedmont-AI-Model headers showing which plan and model served the request.
Using with OpenClaw
OpenClaw is in the App Marketplace under AI. When you install it on a VPS, the installer passes your account's Piedmont AI token and the endpoint to the OpenClaw container. OpenClaw has no web dashboard: install the OpenClaw CLI on your computer or phone, run openclaw configure with the gateway URL and gateway token shown under Show Credentials, then set the AI provider to OpenAI-compatible using the AI endpoint and API key shown there.
To use a different AI provider instead (Anthropic, OpenAI and so on), choose it in openclaw configure and enter that provider's API key. If you rotate your Piedmont AI token, update it in OpenClaw too.
Free vs Pro
| Free | Pro ($7.99/mo) | |
|---|---|---|
| Model | Llama 3.2 3B | Llama 3.1 8B |
| Requests per hour | 20 | 200 |
| Requests per day | 100 | 2,000 |
| Concurrent requests | 1 | 2 |
| Max output per reply | 512 tokens | 2,048 tokens |
| Price | Free with every Piedmont account | $7.99/mo — cancel anytime |
Upgrade or cancel on the Piedmont AI dashboard. Upgrades take effect as soon as checkout completes, and your token stays the same. Cancellations take effect at the end of the current billing period — you keep Pro until then, and you can click Resume Pro before that date to stay on it.
Rate Limits & Errors
When you hit a limit, the API returns HTTP 429 with an X-Piedmont-AI-Reason header saying why (the same reason is in the error body's type and code) and a Retry-After header with the number of seconds to wait. The hourly and daily windows start from your own usage, not the clock — they don't reset on the hour or at midnight, so check Retry-After for the exact wait.
| Reason | Meaning | What to do |
|---|---|---|
| hourly_limit | Your hourly allowance is used up | Wait the seconds in Retry-After (the window resets one hour after it began) |
| daily_limit | Your 24-hour allowance is used up | Resets 24 hours after your current daily window began — Retry-After gives the exact wait |
| concurrent_limit | You already have your plan's maximum number of requests in progress | Wait for one to finish, then retry |
| system_busy | Piedmont AI is at its shared capacity limit | Retry in about 15 seconds |
Other errors return an OpenAI-style error object with a message and type: 401 for a missing or invalid token, 400 for invalid JSON or an empty messages array, and 502 if the model backend fails.