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), temperature and top_p fields 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 model field in a request is ignored.
  • Function/tool calling, embeddings, images and audio aren't supported.
Info
Base URL: https://ai.piedmonthosting.com/v1 — manage your token and see your usage at /ai.

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
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"}]
  }'
OpenAI Python SDK
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

FreePro ($7.99/mo)
ModelLlama 3.2 3BLlama 3.1 8B
Requests per hour20200
Requests per day1002,000
Concurrent requests12
Max output per reply512 tokens2,048 tokens
PriceFree 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.

Info
Both plans share one GPU, which holds one model at a time. When Free and Pro requests arrive together, a request can wait a few seconds while the model is switched.

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.

ReasonMeaningWhat to do
hourly_limitYour hourly allowance is used upWait the seconds in Retry-After (the window resets one hour after it began)
daily_limitYour 24-hour allowance is used upResets 24 hours after your current daily window began — Retry-After gives the exact wait
concurrent_limitYou already have your plan's maximum number of requests in progressWait for one to finish, then retry
system_busyPiedmont AI is at its shared capacity limitRetry 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.