Everstate Health

Developers

Two ways to connect: clinical networks receive case packets and send decisions back; brands run their own front end on our intake engine. JSON over HTTPS, versioned under /api/v1.

Try it

These call this site’s live API.

Click a button to see the response.

Authentication

Brands send Authorization: Bearer <brand key> to start a case. Each case returns its own case_token; every later call for that case sends X-Case-Token.

Networks sign each webhook body with HMAC-SHA256 using the shared secret we issue, sent as X-Signature (hex).

Endpoints

EndpointAuthWhat it does
GET/api/v1/healthNoneStatus, version, and whether storage and encryption are configured.
GET/api/v1/programsNonePrograms, prices, and every question and hard stop in English and Spanish.
GET/api/v1/statesNoneWhich states are open, and for which programs.
POST/api/v1/quoteNoneEligibility and price from program, state, age, sex, height and weight. Stores nothing.
POST/api/v1/casesBrand keyStart a case after the quote. Returns the case reference and a case token.
GET/api/v1/cases/{ref}Case tokenStatus, next step and the questions to show next.
POST/api/v1/cases/{ref}/answersCase tokenSave one answer. Returns the next question, or a hard stop.
POST/api/v1/cases/{ref}/steps/{step}Case tokenSave account, identity, labs, insurance, shipping (with consent) or payment.
POST/api/v1/cases/{ref}/submitCase tokenSend the case packet to the state’s clinical network.
POST/api/v1/webhooks/{network}HMAC signatureClinician decision from the network: approved, declined or shipped.
POST/api/v1/waitlistNoneEmail and state for a state that isn’t open yet.

Case packet

What a network receives at submit. Questions travel with their English wording, so any clinician system can show them without our configuration. The patient’s language is in language.

{
  "case_ref": "ST-AYW5U2",
  "program": "glp1",
  "state": "FL",
  "visit_type": "async",
  "language": "es",
  "patient": {
    "first_name": "Ana",
    "last_name": "Rivera",
    "dob": "1980-04-12",
    "sex_at_birth": "female",
    "email": "ana@example.com",
    "phone": "5615550142",
    "address": {
      "address1": "100 Main St",
      "address2": "",
      "city": "Boca Raton",
      "state": "FL",
      "zip": "33431"
    }
  },
  "eligibility": {
    "height_in": 66,
    "weight_lb": 210,
    "bmi": 33.9
  },
  "answers": [
    {
      "id": "mtc",
      "question": "Have you, or has anyone in your family, had medullary thyroid cancer or multiple endocrine neoplasia type 2 (MEN2)?",
      "answer": "no",
      "answer_text": "No"
    },
    {
      "id": "diabetes",
      "question": "Do you have diabetes?",
      "answer": "type2",
      "answer_text": "Yes, type 2"
    }
  ],
  "flags": [],
  "labs": {
    "choice": "later",
    "route": "standard"
  },
  "identity": {
    "method": "vendor",
    "status": "passed"
  },
  "consent": {
    "telehealth_version": "a1b2c3d4e5f6",
    "language": "es",
    "location_attested": true
  },
  "webhook_url": "https://everstatehealth.com/api/v1/webhooks/partner"
}

Webhooks

Send decisions to POST /api/v1/webhooks/{network}. Repeats are safe: a decision that doesn’t fit the case’s status is ignored and logged.

POST /api/v1/webhooks/partner
Content-Type: application/json
X-Signature: hex( HMAC_SHA256( shared_secret, raw_body ) )

{"case_id": "P-48213", "event": "approved", "note": "Start 0.25 mg weekly"}

Events: approved (we capture the card hold), declined (we release it and show the note to the patient), shipped.

Case lifecycle

started → submitted → prescribed → shipped, with exits to not_eligible (hard stop, no charge) and declined (hold released).

Sandbox and data

This deployment is a sandbox. Its sandbox network accepts every case and waits for a decision from the operations console. Use test data only: production patient data runs on HIPAA-covered infrastructure under a signed BAA, and this endpoint set moves with it unchanged.