Start from the headers

Every public page answers with a Link header (RFC 8288). One request to the homepage is enough to find the rest — no HTML parsing required.

$ curl -sI https://albamed.org/

Link: <https://albamed.org/.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json",
      <https://albamed.org/api/openapi.json>; rel="service-desc"; type="application/vnd.oai.openapi+json;version=3.1.0",
      <https://albamed.org/docs/api>; rel="service-doc"; type="text/html",
      <https://albamed.org/site.jsonld>; rel="describedby"; type="application/ld+json",
      <https://albamed.org/terms>; rel="terms-of-service"; type="text/html",
      <https://albamed.org/privacy>; rel="privacy-policy"; type="text/html"

Pages as markdown

Every public HTML page answers in markdown when you ask for it. Same URL, same content, one representation each — so the response carries Vary: Accept and a shared cache keeps the two apart.

$ curl -s -H 'Accept: text/markdown' https://albamed.org/

content-type: text/markdown; charset=utf-8
vary: Accept, Accept-Encoding
x-markdown-tokens: 5528
x-original-tokens: 61748

---
title: "AlbaMed — Practice management for behavioral health"
description: "One platform. Every provider, enrolled…"
url: "https://albamed.org/"
lang: "en"
---

# Clinical, billing and compliance for behavioral health.
…
What you getYAML frontmatter from the page's own metadata, the body without navigation, chrome or decoration, and the JSON-LD graph preserved in a fenced json block at the end.
LanguageAdd ?lang=es for the Spanish page; the frontmatter reports which one you got.
Token countsx-markdown-tokens and x-original-tokens are estimates (~4 characters per token), not the output of a particular tokenizer.
BrowsersUnaffected: an Accept that does not mention text/markdown, or ranks HTML above it, keeps getting HTML.

Endpoints

Base URL https://albamed.org. No API key, no token, no rate limit beyond ordinary abuse protection. Responses are JSON and UTF-8.

get /api/branding Shared brand and social metadata

Public brand values every AlbaMed system reads: site name, logo, social preview image and the marketing title/description. Same payload as the CDN copy at platform/branding.json; this endpoint is the fallback source.

Request

curl -s https://albamed.org/api/branding

Response 200

{
  "site_name": "AlbaMed",
  "og_title": "AlbaMed \u2014 Healthcare operations, billing and compliance",
  "og_description": "Billing, clinical documentation and audit for Florida behavioral health.",
  "og_image_url": "https://albamed.org/assets/og-image.png",
  "og_image_width": 1200,
  "og_image_height": 630,
  "og_image_alt": "AlbaMed",
  "logo_url": "https://albamed.org/assets/logo.png",
  "logo_alt": "AlbaMed",
  "source": "https://albamed.org"
}
post /contact Send a contact request

Stores a lead and notifies the team. Cross-site protected: read the token from the <meta name="csrf-token"> tag on the homepage and send it back in the X-CSRFToken header, with the session cookie from that same request. `name` and `email` are always required, plus at least one of `interests` or `message`. Returns 422 with the offending field name when validation fails.

Request body (JSON)

FieldTypeRequiredDescription
name string yes
email string yes
phone string no
organization string no
interests object no Which services you are asking about: service key → list of labels. Unknown keys are dropped.
message string no

Request

curl -X POST https://albamed.org/contact \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFToken: <token from the homepage>' \
  -b cookies.txt \
  -d '{"name": "\u2026", "email": "\u2026"}'

Response 200 · 422 on validation error

{
  "ok": true,
  "id": 42,
  "emailed": true
}
get /healthz Liveness probe

Returns 200 while the application is serving. No authentication, no side effects.

Request

curl -s https://albamed.org/healthz

Response 200

{
  "ok": true
}

Conventions

AuthenticationNone. Every endpoint on this page is public and read-only, except POST /contact. There is nothing to obtain a token for: this domain is not an OAuth authorization server, publishes no /.well-known/openid-configuration, and issues no tokens. Staff sign-in uses Google as the OpenID provider; that flow is not part of this API.
CORSThe discovery documents and /api/branding answer with Access-Control-Allow-Origin: *. Link is listed in Access-Control-Expose-Headers, so a browser client can read it cross-origin.
CachingCache-Control: public, max-age=300 on the data endpoints, 3600 on the catalog and the OpenAPI document. Cache them; they change rarely.
ErrorsJSON with ok: false. 404 when nothing is published, 422 with the offending field on invalid input.
VersioningThe OpenAPI document carries the site version in info.version. Fields are added, never silently repurposed.
Content signals/robots.txt declares search=yes, ai-input=yes, ai-train=no (contentsignals.org): index us, read a page to answer a question about us, but do not train models on this content.
ContactQuestions about this API: the contact form.

What is not here

This is the public marketing site. Nothing on this API touches patient data: no protected health information, no claims, no clinical notes and no tenant records are reachable from these endpoints. The AlbaMed systems that hold that data — billing, clinical and audit — sit behind authentication and are not described here.