Aestar docs

Aestar / Docs / API reference

API reference

What your own website and tools can actually call today — and a straight answer about everything that is browser-only.

The honest version first: Aestar does not have a public API with API keys. There is no key to issue, no token to rotate and no REST surface over your jobs, customers or invoices. If you came here looking for one, the short answer is "not yet" and the long answer is below.

What does exist is a small number of endpoints your own website or tooling can reach without a browser session. They are documented here exactly as they behave.

Send a job request from your own website

This is the useful one. If you have your own website and want its contact or request form to land in Aestar, post to this endpoint instead of emailing yourself.

POST https://aestarai.com/api/lead
Content-Type: application/json
{
  "source": "shop-site",
  "slug":   "your-shop-slug",
  "name":   "Dana Whitfield",
  "phone":  "+14805551212",
  "email":  "dana@example.com",
  "message":"Upstairs unit is not cooling. Available Thursday.",
  "service":"No cooling",
  "channel":"form"
}

Fields

FieldRequiredNotes
sourceYesMust be "shop-site" to route the request to your shop.
slugYesYour shop's slug, the one in your Aestar website address. Lowercase letters, numbers and hyphens.
nameOne of theseTrimmed to 80 characters.
phoneOne of theseTrimmed to 24 characters.
emailOne of theseLowercased, trimmed to 90 characters.
messageNoWhat they need. Trimmed to 600 characters.
serviceNoTrimmed to 80 characters.
requested_isoNoA requested time as an ISO date, e.g. 2026-10-02T09:00. Ignored if it is not one.
channelNo"form" or "chat". Anything else becomes "form".

Responses

StatusBodyMeaning
200{ ok: true, stored, emailed: false, texted: false }Saved to your shop's inquiry list. Nothing was emailed or texted to the customer — see the note below.
400{ ok: false, error: "bad_slug" }The slug is not in the allowed shape.
400{ ok: false, error: "missing_fields" }No way to contact the person.
404{ ok: false, error: "not_published" }The shop exists but its Aestar site is not published yet.
404{ ok: false, error: "not_found" }No shop with that slug.
429{ ok: false, error: "rate_limited" }Too many requests from one address in an hour.
503{ ok: false, error: "save_failed" }We could not store it. Retry.

Two things to be clear about. This endpoint has no authentication. Your slug is public — it is in your website address — so treat an inquiry as an unverified stranger filling in a form, because that is what it is. And it is rate limited per address, so it is a form endpoint, not a bulk import.

If the price book can price what was asked for, an estimate is drafted for you at the same time. Drafted, not sent — see Estimates.

Read your published shop page

GET https://aestarai.com/api/lead?action=shop-site&slug=your-shop-slug

Returns the public content of your Aestar shop page as JSON — your services, prices, hours, service area and review summary. It is the same data the page itself renders, so you can reuse it on your own site without keeping two lists in step. Public, no credential, limited to 60 reads an hour per shop.

StatusBody
200{ ok: true, site: { … } }
400{ ok: false, error: "bad_slug" }
404{ ok: false, error: "not_found" }
429{ ok: false, error: "rate_limited" }

Is it up?

GET https://aestarai.com/api/health

Public, unauthenticated, cached for a few seconds. Returns 200 with { ok: true, ts, supabase, checks } when the service and its database are reachable, and 503 with the same shape when they are not. HEAD works too if you only want the status code. Point a monitor at it if you like.

What is not a public API

Everything else in the product is reached by your signed-in browser and nothing else. These are not secret endpoints you could use with a key — there is no key, and they will refuse you:

  • Jobs, customers, estimates, invoices, the price book, timesheets, team chat, referrals and settings. All of it is behind the aestar_session cookie your browser gets when you sign in.
  • Billing and checkout. Behind the same session, and additionally locked to requests that came from our own site.
  • Anything under the admin area. That is ours, not yours.

A request without a browser session gets 401 with { ok: false, error: "unauthenticated" }. Some routes also check that the request came from our own pages — that is a cross-site-request defence, not a credential, and we are not going to describe it as one.

Webhooks we receive

Aestar accepts signed webhooks from the services it uses — the payment processor and the telephony and voice providers. Those are verified against each provider's own signature and are not something you configure or call. Aestar does not send outbound webhooks to you yet.

Not yet

ThingStatus
API keys or tokens for shopsLater
A REST surface over jobs, customers and invoicesLater
Outbound webhooks when something happens in your shopLater
A published OpenAPI descriptionLater
Jobber, Housecall Pro, ServiceTitan importsLater

If you are building something and one of those would unblock it, tell us what you are building. That is genuinely how the order gets decided.

Still stuck?

Ask Ava. She answers questions about Aestar itself — pricing, setup, what she does on a call — and she will tell you when something is not built yet.

Generated from the Aestar codebase at commit ceb26e3, last shipped September 23, 2026. Prices, statuses and screen names on this page are read from the running code, not typed by hand — so this page changes when the product does.

Start typing to search every docs page.

↑↓ to moveEnter to openEsc to close