Use cases

What people build with Astris

The common integration patterns, end-to-end.

1. Auto-sync your careers page into Astris

Who: Employer with an ATS (Workday, iCIMS, Greenhouse, Greatjob, etc.) or a careers CMS.

What you get: Every new req on your site is in Astris within hours, indexed for matching, deduplicated, with structured fields (skills, certs, schedule, comp, benefits) extracted by Claude.

How:

  1. Issue an employer-scoped key with the jobs scope at /developers/keys.
  2. Set up a cron job that pulls your active reqs every 15 min / 1 hr / nightly (your choice).
  3. POST each req to /api/v1/jobs/sync with the ATS req id as externalId. Re-runs are idempotent.
  4. Optionally subscribe to match.created to know when Astris finds a candidate for one of your reqs.
// pseudo-cron
import cron from "node-cron";

cron.schedule("0 */1 * * *", async () => {
  const reqs = await myAts.fetchActiveReqs();
  for (const r of reqs) {
    await fetch("https://www.astrishr.com/api/v1/jobs/sync", {
      method: "POST",
      headers: { Authorization: `Bearer ${process.env.ASTRIS_API_KEY}`, "Content-Type": "application/json" },
      body: JSON.stringify({ externalId: r.id, text: r.fullBody, location: r.location }),
    });
  }
});

Full reference: /developers/api/jobs-sync.

2. Push candidates from your case-management system

Who: Refugee resettlement org, workforce board, vocational training program. Anyone running CaseWorthy, Apricot, ETO, Salesforce NPSP, or homegrown intake.

What you get: Every intake-complete client gets a candidate record in Astris automatically. Matching runs against every employer's open jobs. You receive ranked matches back, in your preferred ATS-shape via the webhook adapter.

How:

  1. Issue an organization-scoped key with the candidates scope.
  2. POST every client at intake completion to /api/v1/candidates/sync. Include resumeText if you have it (Astris parses + stores it).
  3. Send the self-validation link to the candidate via your normal channel — they review and approve the profile before Astris matches.
  4. Subscribe to match.created events with adapter=caseworthy / apricot / eto to receive new matches in your system's shape.

Full reference: /developers/api/candidates-sync.

3. Embed match scores in your existing UI

Who: Anyone with their own front-end who wants Astris's matching, retention forecast, and explanations without using astrishr.com's UI.

What you get: Real-time match scoring you can render in your own design system. 7-component breakdown, retention forecast, gaps, transferable-skill bridges — all from one API call.

How:

async function scoreMatch(candidateId, jobId) {
  const res = await fetch("https://www.astrishr.com/api/v1/match", {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.ASTRIS_API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({ candidateId, jobId }),
  });
  const data = await res.json();
  return {
    score: data.finalScore,                        // 0–100
    rec: data.recommendation,                       // strong_match / moderate / weak / …
    breakdown: data.componentScores,                // skills / experience / language / distance / schedule / cert / transport
    retention: data.retention.expectedTenureDays,   // 30–365
    gaps: data.gaps,                                // what's missing
    bridges: data.transferableSkills,               // transferable skill mappings
  };
}

4. Embed retention forecasts into your ATS dashboard

Who: Employer with internal HR analytics that want to surface retention risk per candidate-job pair.

What you get: 30/90/180/365-day retention probabilities + expected tenure days per (candidate, job) — without exposing candidate data to a third-party model.

const r = await fetch("https://www.astrishr.com/api/v1/retention-forecast", {
  method: "POST",
  headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ candidateId, jobId }),
}).then(r => r.json());

// Render r.retention180, r.expectedTenureDays, r.confidenceScore in your dashboard.

5. Augment your existing skill extraction

Who: Any HR tech building skill profiles from resumes.

What you get: The skills a worker has but didn't list. Combine your extracted skills with Astris's inferred skills for a fuller profile.

const r = await fetch("https://www.astrishr.com/api/v1/skills-infer", {
  method: "POST",
  headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    occupations: ["Forklift Operator", "Line Cook"],
    existing: ["Knife Skills"],
  }),
}).then(r => r.json());

// r.inferred → 8-10 likely skills with source ("curated" | "llm") and confidence (0..1)